From 1fdb33e7c42414edf6b51e196e29f75dfdf810f4 Mon Sep 17 00:00:00 2001
From: Brian Canini <canini.16@osu.edu>
Date: Tue, 16 Feb 2021 10:00:57 -0500
Subject: [PATCH] Updating drupal/simplesamlphp_auth (3.1.0 => 3.2.0)

---
 composer.json                                 |     2 +-
 composer.lock                                 |  1948 ++-
 vendor/composer/autoload_classmap.php         |   194 +-
 vendor/composer/autoload_files.php            |     3 +-
 vendor/composer/autoload_namespaces.php       |     2 +-
 vendor/composer/autoload_psr4.php             |    28 +-
 vendor/composer/autoload_static.php           |   347 +-
 vendor/composer/installed.json                |  2018 ++-
 vendor/gettext/gettext/CHANGELOG.md           |     6 +
 .../gettext/gettext/src/Extractors/Blade.php  |     5 +
 .../tests/bootstrap.php                       |     4 -
 .../phpfastcache/riak-client/.gitattributes   |    11 +
 vendor/phpfastcache/riak-client/.gitignore    |    31 +
 vendor/phpfastcache/riak-client/.gitmodules   |     3 +
 vendor/phpfastcache/riak-client/.travis.yml   |    29 +
 .../phpfastcache/riak-client/CONTRIBUTING.md  |   118 +
 vendor/phpfastcache/riak-client/LICENSE       |   177 +
 vendor/phpfastcache/riak-client/Makefile      |    57 +
 vendor/phpfastcache/riak-client/README.md     |   110 +
 vendor/phpfastcache/riak-client/RELNOTES.md   |     9 +
 vendor/phpfastcache/riak-client/apigen.neon   |    13 +
 vendor/phpfastcache/riak-client/composer.json |    60 +
 .../riak-client/examples/MapDataModel.php     |   246 +
 .../riak-client/examples/SimpleKV.php         |    47 +
 .../riak-client/examples/TimeSeries.php       |   183 +
 vendor/phpfastcache/riak-client/phpunit.xml   |    26 +
 vendor/phpfastcache/riak-client/src/Riak.php  |   244 +
 .../phpfastcache/riak-client/src/Riak/Api.php |   154 +
 .../riak-client/src/Riak/Api/Exception.php    |    13 +
 .../riak-client/src/Riak/Api/Http.php         |   858 +
 .../Api/Http/Translator/ObjectResponse.php    |    95 +
 .../Api/Http/Translator/SecondaryIndex.php    |   101 +
 .../riak-client/src/Riak/ApiInterface.php     |    45 +
 .../riak-client/src/Riak/Bucket.php           |   101 +
 .../riak-client/src/Riak/Command.php          |   158 +
 .../src/Riak/Command/Bucket/Delete.php        |    24 +
 .../src/Riak/Command/Bucket/Fetch.php         |    44 +
 .../src/Riak/Command/Bucket/Response.php      |    50 +
 .../src/Riak/Command/Bucket/Store.php         |    49 +
 .../riak-client/src/Riak/Command/Builder.php  |   151 +
 .../src/Riak/Command/Builder/BucketTrait.php  |    59 +
 .../src/Riak/Command/Builder/DeleteObject.php |    44 +
 .../src/Riak/Command/Builder/Exception.php    |    13 +
 .../Command/Builder/FetchBucketProperties.php |    45 +
 .../src/Riak/Command/Builder/FetchCounter.php |    45 +
 .../src/Riak/Command/Builder/FetchHll.php     |    45 +
 .../src/Riak/Command/Builder/FetchMap.php     |    45 +
 .../src/Riak/Command/Builder/FetchObject.php  |    79 +
 .../Riak/Command/Builder/FetchPreflist.php    |    43 +
 .../src/Riak/Command/Builder/FetchSet.php     |    45 +
 .../src/Riak/Command/Builder/FetchStats.php   |    38 +
 .../Riak/Command/Builder/IncrementCounter.php |    72 +
 .../src/Riak/Command/Builder/IndexTrait.php   |   303 +
 .../src/Riak/Command/Builder/ListObjects.php  |   109 +
 .../Riak/Command/Builder/LocationTrait.php    |    58 +
 .../Builder/MapReduce/FetchObjects.php        |   283 +
 .../src/Riak/Command/Builder/ObjectTrait.php  |    72 +
 .../src/Riak/Command/Builder/Ping.php         |    48 +
 .../src/Riak/Command/Builder/QueryIndex.php   |    56 +
 .../Command/Builder/Search/AssociateIndex.php |    36 +
 .../Command/Builder/Search/DeleteIndex.php    |    61 +
 .../Builder/Search/DissociateIndex.php        |    32 +
 .../Command/Builder/Search/FetchIndex.php     |    42 +
 .../Command/Builder/Search/FetchObjects.php   |   184 +
 .../Command/Builder/Search/FetchSchema.php    |    48 +
 .../Command/Builder/Search/StoreIndex.php     |    81 +
 .../Command/Builder/Search/StoreSchema.php    |    79 +
 .../Command/Builder/SetBucketProperties.php   |    64 +
 .../src/Riak/Command/Builder/StoreObject.php  |    76 +
 .../Command/Builder/TimeSeries/DeleteRow.php  |    36 +
 .../Builder/TimeSeries/DescribeTable.php      |    28 +
 .../Command/Builder/TimeSeries/FetchRow.php   |    36 +
 .../Command/Builder/TimeSeries/KeyTrait.php   |    40 +
 .../Riak/Command/Builder/TimeSeries/Query.php |    70 +
 .../Command/Builder/TimeSeries/RowsTrait.php  |    48 +
 .../Command/Builder/TimeSeries/StoreRows.php  |    36 +
 .../Command/Builder/TimeSeries/TableTrait.php |    40 +
 .../src/Riak/Command/Builder/UpdateGSet.php   |    66 +
 .../src/Riak/Command/Builder/UpdateHll.php    |    72 +
 .../src/Riak/Command/Builder/UpdateMap.php    |   280 +
 .../src/Riak/Command/Builder/UpdateSet.php    |   128 +
 .../src/Riak/Command/BuilderInterface.php     |    17 +
 .../Riak/Command/DataType/Counter/Fetch.php   |    56 +
 .../Command/DataType/Counter/Response.php     |    68 +
 .../Riak/Command/DataType/Counter/Store.php   |    65 +
 .../src/Riak/Command/DataType/GSet/Store.php  |    64 +
 .../src/Riak/Command/DataType/Hll/Fetch.php   |    56 +
 .../Riak/Command/DataType/Hll/Response.php    |    58 +
 .../src/Riak/Command/DataType/Hll/Store.php   |    64 +
 .../src/Riak/Command/DataType/Map/Fetch.php   |    56 +
 .../Riak/Command/DataType/Map/Response.php    |    68 +
 .../src/Riak/Command/DataType/Map/Store.php   |   133 +
 .../src/Riak/Command/DataType/Set/Fetch.php   |    56 +
 .../Riak/Command/DataType/Set/Response.php    |    58 +
 .../src/Riak/Command/DataType/Set/Store.php   |    70 +
 .../src/Riak/Command/Exception.php            |    13 +
 .../src/Riak/Command/Indexes/Query.php        |   128 +
 .../src/Riak/Command/Indexes/Response.php     |    93 +
 .../riak-client/src/Riak/Command/KVObject.php |    83 +
 .../src/Riak/Command/KVObject/Delete.php      |    24 +
 .../src/Riak/Command/KVObject/Fetch.php       |    23 +
 .../Riak/Command/KVObject/FetchPreflist.php   |    23 +
 .../src/Riak/Command/KVObject/Keys/Fetch.php  |    23 +
 .../Riak/Command/KVObject/Keys/Response.php   |    35 +
 .../src/Riak/Command/KVObject/Response.php    |    65 +
 .../src/Riak/Command/KVObject/Store.php       |    36 +
 .../src/Riak/Command/MapReduce/Fetch.php      |    52 +
 .../src/Riak/Command/MapReduce/Response.php   |    25 +
 .../riak-client/src/Riak/Command/Ping.php     |    29 +
 .../riak-client/src/Riak/Command/Response.php |    61 +
 .../src/Riak/Command/Search/Fetch.php         |    51 +
 .../src/Riak/Command/Search/Index/Delete.php  |    56 +
 .../src/Riak/Command/Search/Index/Fetch.php   |    51 +
 .../Riak/Command/Search/Index/Response.php    |    28 +
 .../src/Riak/Command/Search/Index/Store.php   |    62 +
 .../src/Riak/Command/Search/Response.php      |    55 +
 .../src/Riak/Command/Search/Schema/Fetch.php  |    53 +
 .../Riak/Command/Search/Schema/Response.php   |    35 +
 .../src/Riak/Command/Search/Schema/Store.php  |    64 +
 .../riak-client/src/Riak/Command/Stats.php    |    29 +
 .../src/Riak/Command/Stats/Response.php       |    34 +
 .../src/Riak/Command/TimeSeries/Delete.php    |    51 +
 .../src/Riak/Command/TimeSeries/Fetch.php     |    51 +
 .../Riak/Command/TimeSeries/Query/Fetch.php   |    49 +
 .../Command/TimeSeries/Query/Response.php     |    38 +
 .../src/Riak/Command/TimeSeries/Response.php  |    38 +
 .../src/Riak/Command/TimeSeries/Store.php     |    67 +
 .../riak-client/src/Riak/CommandInterface.php |    27 +
 .../riak-client/src/Riak/DataObject.php       |   281 +
 .../riak-client/src/Riak/DataType.php         |    35 +
 .../riak-client/src/Riak/DataType/Counter.php |    51 +
 .../src/Riak/DataType/Exception.php           |    28 +
 .../riak-client/src/Riak/DataType/Hll.php     |    36 +
 .../riak-client/src/Riak/DataType/Map.php     |   140 +
 .../riak-client/src/Riak/DataType/Set.php     |    63 +
 .../riak-client/src/Riak/Exception.php        |    13 +
 .../riak-client/src/Riak/HeadersTrait.php     |    42 +
 .../riak-client/src/Riak/Location.php         |    68 +
 .../riak-client/src/Riak/Node.php             |   222 +
 .../riak-client/src/Riak/Node/Builder.php     |   331 +
 .../src/Riak/Node/Builder/Exception.php       |    13 +
 .../riak-client/src/Riak/Node/Config.php      |   304 +
 .../riak-client/src/Riak/Search/Doc.php       |    77 +
 .../riak-client/src/Riak/TimeSeries/Cell.php  |   172 +
 .../riak-client/tests/Basho_Man_Super.png     |   462 +
 .../riak-client/tests/TestCase.php            |   110 +
 .../riak-client/tests/TimeSeriesTrait.php     |   101 +
 .../tests/functional/BucketOperationsTest.php |   115 +
 .../functional/CounterOperationsTest.php      |   155 +
 .../tests/functional/GSetOperationsTest.php   |   141 +
 .../tests/functional/HllOperationsTest.php    |   167 +
 .../tests/functional/MapOperationsTest.php    |   236 +
 .../functional/MapReduceOperationsTest.php    |    65 +
 .../tests/functional/ObjectOperationsTest.php |   215 +
 .../riak-client/tests/functional/PingTest.php |    25 +
 .../tests/functional/PreflistTest.php         |    46 +
 .../tests/functional/SearchOperationsTest.php |   261 +
 .../SecondaryIndexOperationsTest.php          |   299 +
 .../tests/functional/SecurityFeaturesTest.php |    66 +
 .../tests/functional/SetOperationsTest.php    |   202 +
 .../functional/TimeSeriesOperationsTest.php   |   291 +
 .../tests/scenario/EncodedDataTest.php        |   113 +
 .../scenario/InternalServerErrorTest.php      |    29 +
 .../tests/scenario/NodeUnreachableTest.php    |    78 +
 .../tests/scenario/ObjectConflictTest.php     |    90 +
 .../Api/Translator/SecondaryIndexTest.php     |    57 +
 .../Riak/Command/Builder/FetchCounterTest.php |    49 +
 .../Riak/Command/Builder/FetchHllTest.php     |    49 +
 .../Riak/Command/Builder/FetchMapTest.php     |    49 +
 .../Riak/Command/Builder/FetchObjectTest.php  |    49 +
 .../Riak/Command/Builder/FetchSetTest.php     |    49 +
 .../Command/Builder/IncrementCounterTest.php  |    74 +
 .../Riak/Command/Builder/ListObjectsTest.php  |    46 +
 .../Riak/Command/Builder/QueryIndexTest.php   |   142 +
 .../Riak/Command/Builder/StoreObjectTest.php  |    98 +
 .../Builder/TimeSeries/DeleteRowTest.php      |    51 +
 .../Builder/TimeSeries/DescribeTableTest.php  |    34 +
 .../Builder/TimeSeries/FetchRowTest.php       |    51 +
 .../Command/Builder/TimeSeries/QueryTest.php  |    34 +
 .../Builder/TimeSeries/StoreRowsTest.php      |    81 +
 .../Riak/Command/Builder/UpdateGSetTest.php   |    76 +
 .../Riak/Command/Builder/UpdateHllTest.php    |    80 +
 .../Riak/Command/Builder/UpdateMapTest.php    |    86 +
 .../Riak/Command/Builder/UpdateSetTest.php    |    89 +
 .../tests/unit/Riak/DataType/CounterTest.php  |    21 +
 .../tests/unit/Riak/DataType/HllTest.php      |    21 +
 .../tests/unit/Riak/DataType/MapTest.php      |    21 +
 .../tests/unit/Riak/DataType/SetTest.php      |    22 +
 .../tests/unit/Riak/Node/BuilderTest.php      |    98 +
 .../riak-client/tests/unit/Riak/NodeTest.php  |    23 +
 .../tests/unit/Riak/ObjectTest.php            |   134 +
 .../tests/unit/Riak/Search/DocTest.php        |    55 +
 .../riak-client/tests/unit/RiakTest.php       |    44 +
 vendor/robrichards/xmlseclibs/CHANGELOG.txt   |    10 +
 vendor/robrichards/xmlseclibs/README.md       |     3 +-
 .../xmlseclibs/src/XMLSecurityKey.php         |    19 +-
 vendor/robrichards/xmlseclibs/xmlseclibs.php  |     2 +-
 .../composer-module-installer/COPYING         |    18 +
 .../composer-module-installer/LICENSE         |   459 +
 .../composer-module-installer/README.md       |   124 +
 .../composer-module-installer/composer.json   |    16 +
 .../Composer/ModuleInstaller.php              |    72 +
 .../Composer/ModuleInstallerPlugin.php        |    52 +
 .../saml2/.github/workflows/php.yml           |   202 +
 vendor/simplesamlphp/saml2/README.md          |     7 +-
 vendor/simplesamlphp/saml2/UPGRADING.md       |    48 +
 vendor/simplesamlphp/saml2/composer.json      |    34 +-
 vendor/simplesamlphp/saml2/phpcs.xml          |    28 +
 vendor/simplesamlphp/saml2/phpunit.xml        |     4 +-
 .../saml2/src/SAML2/ArtifactResolve.php       |    14 +-
 .../saml2/src/SAML2/ArtifactResponse.php      |    24 +-
 .../saml2/src/SAML2/Assertion.php             |   435 +-
 .../saml2/src/SAML2/Assertion/Decrypter.php   |     8 +-
 .../Exception/InvalidAssertionException.php   |     2 +
 .../InvalidSubjectConfirmationException.php   |     2 +
 .../Exception/NotDecryptedException.php       |     2 +
 .../saml2/src/SAML2/Assertion/Processor.php   |    65 +-
 .../src/SAML2/Assertion/ProcessorBuilder.php  |    16 +-
 .../Transformer/DecodeBase64Transformer.php   |    12 +-
 .../NameIdDecryptionTransformer.php           |    12 +-
 .../Assertion/Transformer/Transformer.php     |     4 +-
 .../Transformer/TransformerChain.php          |     6 +-
 .../AssertionConstraintValidator.php          |     4 +-
 .../Validation/AssertionValidator.php         |     6 +-
 .../ConstraintValidator/NotBefore.php         |     4 +-
 .../ConstraintValidator/NotOnOrAfter.php      |     4 +-
 .../SessionNotOnOrAfter.php                   |     4 +-
 .../ConstraintValidator/SpIsValidAudience.php |     6 +-
 .../SubjectConfirmationMethod.php             |     9 +-
 .../SubjectConfirmationNotBefore.php          |    11 +-
 .../SubjectConfirmationNotOnOrAfter.php       |    11 +-
 .../SubjectConfirmationRecipientMatches.php   |    20 +-
 .../SubjectConfirmationResponseToMatches.php  |    18 +-
 .../src/SAML2/Assertion/Validation/Result.php |    12 +-
 ...SubjectConfirmationConstraintValidator.php |     4 +-
 .../SubjectConfirmationValidator.php          |     6 +-
 .../saml2/src/SAML2/AttributeQuery.php        |    28 +-
 .../saml2/src/SAML2/AuthnRequest.php          |   182 +-
 .../simplesamlphp/saml2/src/SAML2/Binding.php |    29 +-
 .../InvalidCertificateStructureException.php  |     2 +
 .../Exception/InvalidKeyUsageException.php    |     6 +-
 .../Exception/NoKeysFoundException.php        |     2 +
 .../src/SAML2/Certificate/Fingerprint.php     |    63 -
 .../Certificate/FingerprintCollection.php     |    52 -
 .../SAML2/Certificate/FingerprintLoader.php   |    61 -
 .../saml2/src/SAML2/Certificate/Key.php       |    22 +-
 .../src/SAML2/Certificate/KeyCollection.php   |    19 +-
 .../saml2/src/SAML2/Certificate/KeyLoader.php |    39 +-
 .../src/SAML2/Certificate/PrivateKey.php      |    16 +-
 .../SAML2/Certificate/PrivateKeyLoader.php    |    12 +-
 .../saml2/src/SAML2/Certificate/X509.php      |    38 +-
 .../src/SAML2/Compat/AbstractContainer.php    |    41 +-
 .../src/SAML2/Compat/ContainerSingleton.php   |    13 +-
 .../saml2/src/SAML2/Compat/MockContainer.php  |    52 +-
 .../saml2/src/SAML2/Compat/Ssp/Container.php  |    60 +-
 .../saml2/src/SAML2/Compat/Ssp/Logger.php     |    74 +-
 .../src/SAML2/Configuration/ArrayAdapter.php  |    11 +-
 .../Configuration/CertificateProvider.php     |    17 +-
 .../Configuration/DecryptionProvider.php      |    17 +-
 .../src/SAML2/Configuration/Destination.php   |    12 +-
 .../SAML2/Configuration/EntityIdProvider.php  |     4 +-
 .../SAML2/Configuration/IdentityProvider.php  |    43 +-
 .../Configuration/IdentityProviderAware.php   |     5 +-
 .../src/SAML2/Configuration/PrivateKey.php    |    37 +-
 .../src/SAML2/Configuration/Queryable.php     |     6 +-
 .../SAML2/Configuration/ServiceProvider.php   |    43 +-
 .../Configuration/ServiceProviderAware.php    |     4 +-
 .../Configuration/SimpleSAMLConverter.php     |    48 +-
 .../saml2/src/SAML2/Constants.php             |    17 +-
 .../saml2/src/SAML2/DOMDocumentFactory.php    |    22 +-
 .../saml2/src/SAML2/EncryptedAssertion.php    |    35 +-
 .../Exception/InvalidArgumentException.php    |     4 +-
 .../src/SAML2/Exception/RuntimeException.php  |     2 +
 .../saml2/src/SAML2/Exception/Throwable.php   |     2 +
 .../Exception/UnparseableXmlException.php     |     7 +-
 .../saml2/src/SAML2/HTTPArtifact.php          |    53 +-
 .../saml2/src/SAML2/HTTPPost.php              |    31 +-
 .../saml2/src/SAML2/HTTPRedirect.php          |    35 +-
 .../saml2/src/SAML2/LogoutRequest.php         |   129 +-
 .../saml2/src/SAML2/LogoutResponse.php        |     6 +-
 .../simplesamlphp/saml2/src/SAML2/Message.php |   138 +-
 .../simplesamlphp/saml2/src/SAML2/Request.php |     2 +
 .../saml2/src/SAML2/Response.php              |    18 +-
 .../Exception/InvalidResponseException.php    |     2 +
 .../Exception/InvalidSignatureException.php   |     2 +
 .../Exception/NoAssertionsFoundException.php  |     2 +
 .../Exception/PreconditionNotMetException.php |     4 +-
 .../UnencryptedAssertionFoundException.php    |     2 +
 .../Exception/UnsignedResponseException.php   |     2 +
 .../saml2/src/SAML2/Response/Processor.php    |    41 +-
 .../Validation/ConstraintValidator.php        |     4 +-
 .../DestinationMatches.php                    |    14 +-
 .../ConstraintValidator/IsSuccessful.php      |    10 +-
 .../Validation/PreconditionValidator.php      |     2 +
 .../src/SAML2/Response/Validation/Result.php  |    14 +-
 .../SAML2/Response/Validation/Validator.php   |     6 +-
 vendor/simplesamlphp/saml2/src/SAML2/SOAP.php |    37 +-
 .../saml2/src/SAML2/SOAPClient.php            |   108 +-
 .../Signature/AbstractChainedValidator.php    |    11 +-
 .../src/SAML2/Signature/ChainedValidator.php  |     4 +-
 .../SAML2/Signature/FingerprintValidator.php  |   108 -
 .../MissingConfigurationException.php         |     2 +
 .../SAML2/Signature/PublicKeyValidator.php    |    11 +-
 .../saml2/src/SAML2/Signature/Validator.php   |    12 +-
 .../src/SAML2/Signature/ValidatorChain.php    |    13 +-
 .../SAML2/Signature/ValidatorInterface.php    |     4 +-
 .../saml2/src/SAML2/SignedElement.php         |    58 +-
 .../saml2/src/SAML2/SignedElementHelper.php   |   104 +-
 .../saml2/src/SAML2/StatusResponse.php        |    48 +-
 .../saml2/src/SAML2/SubjectQuery.php          |    42 +-
 .../src/SAML2/Utilities/ArrayCollection.php   |    64 +-
 .../saml2/src/SAML2/Utilities/Certificate.php |     9 +-
 .../saml2/src/SAML2/Utilities/Collection.php  |    27 +-
 .../saml2/src/SAML2/Utilities/File.php        |     8 +-
 .../saml2/src/SAML2/Utilities/Temporal.php    |     4 +-
 .../simplesamlphp/saml2/src/SAML2/Utils.php   |   304 +-
 .../saml2/src/SAML2/XML/Chunk.php             |    67 +-
 .../saml2/src/SAML2/XML/alg/Common.php        |     2 +
 .../saml2/src/SAML2/XML/alg/DigestMethod.php  |    21 +-
 .../saml2/src/SAML2/XML/alg/SigningMethod.php |   105 +-
 .../saml2/src/SAML2/XML/ds/KeyInfo.php        |    59 +-
 .../saml2/src/SAML2/XML/ds/KeyName.php        |    20 +-
 .../src/SAML2/XML/ds/X509Certificate.php      |    19 +-
 .../saml2/src/SAML2/XML/ds/X509Data.php       |    25 +-
 .../saml2/src/SAML2/XML/ecp/Response.php      |    15 +-
 .../XML/md/AdditionalMetadataLocation.php     |    30 +-
 .../SAML2/XML/md/AffiliationDescriptor.php    |   150 +-
 .../XML/md/AttributeAuthorityDescriptor.php   |    82 +-
 .../XML/md/AttributeConsumingService.php      |    65 +-
 .../SAML2/XML/md/AuthnAuthorityDescriptor.php |    55 +-
 .../saml2/src/SAML2/XML/md/ContactPerson.php  |   129 +-
 .../saml2/src/SAML2/XML/md/EndpointType.php   |   115 +-
 .../src/SAML2/XML/md/EntitiesDescriptor.php   |   129 +-
 .../src/SAML2/XML/md/EntityDescriptor.php     |   280 +-
 .../saml2/src/SAML2/XML/md/Extensions.php     |    48 +-
 .../src/SAML2/XML/md/IDPSSODescriptor.php     |   108 +-
 .../src/SAML2/XML/md/IndexedEndpointType.php  |    53 +-
 .../saml2/src/SAML2/XML/md/KeyDescriptor.php  |    80 +-
 .../saml2/src/SAML2/XML/md/Organization.php   |   105 +-
 .../saml2/src/SAML2/XML/md/PDPDescriptor.php  |    61 +-
 .../src/SAML2/XML/md/RequestedAttribute.php   |    32 +-
 .../saml2/src/SAML2/XML/md/RoleDescriptor.php |   203 +-
 .../src/SAML2/XML/md/SPSSODescriptor.php      |    80 +-
 .../src/SAML2/XML/md/SSODescriptorType.php    |    75 +-
 .../SAML2/XML/md/UnknownRoleDescriptor.php    |    12 +-
 .../src/SAML2/XML/mdattr/EntityAttributes.php |    30 +-
 .../saml2/src/SAML2/XML/mdrpi/Common.php      |     2 +
 .../src/SAML2/XML/mdrpi/PublicationInfo.php   |    70 +-
 .../src/SAML2/XML/mdrpi/RegistrationInfo.php  |    76 +-
 .../saml2/src/SAML2/XML/mdui/Common.php       |     2 +
 .../saml2/src/SAML2/XML/mdui/DiscoHints.php   |    80 +-
 .../saml2/src/SAML2/XML/mdui/Keywords.php     |    46 +-
 .../saml2/src/SAML2/XML/mdui/Logo.php         |    65 +-
 .../saml2/src/SAML2/XML/mdui/UIInfo.php       |   136 +-
 .../saml2/src/SAML2/XML/saml/Attribute.php    |    77 +-
 .../src/SAML2/XML/saml/AttributeValue.php     |    57 +-
 .../saml2/src/SAML2/XML/saml/BaseIDType.php   |    43 +-
 .../saml2/src/SAML2/XML/saml/Issuer.php       |    58 +-
 .../saml2/src/SAML2/XML/saml/NameID.php       |     2 +
 .../saml2/src/SAML2/XML/saml/NameIDType.php   |    95 +-
 .../SAML2/XML/saml/SubjectConfirmation.php    |    64 +-
 .../XML/saml/SubjectConfirmationData.php      |    96 +-
 .../saml2/src/SAML2/XML/samlp/Extensions.php  |    13 +-
 .../saml2/src/SAML2/XML/shibmd/Scope.php      |    43 +-
 vendor/simplesamlphp/saml2/src/_autoload.php  |     9 +-
 vendor/simplesamlphp/saml2/tests/autoload.php |    12 +
 .../corrupted-metadata-selfsigned.xml         |    27 +
 .../xml/metadata/expired-metadata.xml         |    23 +
 .../metadata/valid-metadata-selfsigned.xml    |    27 +
 .../simplesamlphp/simplesamlphp/.appveyor.yml |    30 +
 .../simplesamlphp/CONTRIBUTING.md             |    12 +-
 vendor/simplesamlphp/simplesamlphp/README.md  |     2 +-
 .../simplesamlphp/simplesamlphp/SECURITY.md   |    29 +
 vendor/simplesamlphp/simplesamlphp/TESTING.md |    11 +-
 .../attributemap/deprecatedSchacNS.php        |     1 +
 .../simplesamlphp/attributemap/newSchacNS.php |     1 +
 .../simplesamlphp/attributemap/oid2name.php   |     1 +
 .../simplesamlphp/attributemap/oid2urn.php    |     1 +
 .../simplesamlphp/attributemap/urn2oid.php    |     1 +
 .../simplesamlphp/bin/build-release.sh        |     4 +-
 .../simplesamlphp/bin/check-syntax.sh         |    24 -
 .../simplesamlphp/bin/importPdoMetadata.php   |    11 +-
 .../simplesamlphp/bin/initMDSPdo.php          |    10 +-
 .../simplesamlphp/bin/memcacheSync.php        |    29 +-
 .../simplesamlphp/simplesamlphp/bin/pwgen.php |     6 +-
 .../simplesamlphp/bin/translateAttributes.php |   123 +
 .../simplesamlphp/simplesamlphp/composer.json |    57 +-
 .../simplesamlphp/simplesamlphp/composer.lock |  5582 +++++--
 .../config-templates/authsources.php          |    20 +-
 .../simplesamlphp/config-templates/config.php |   107 +-
 .../dictionaries/admin.definition.json        |    18 +-
 .../dictionaries/admin.translation.json       |   216 +-
 .../dictionaries/attributes.translation.json  |   199 +-
 .../dictionaries/disco.translation.json       |    21 +-
 .../dictionaries/errors.translation.json      |   237 +-
 .../dictionaries/general.translation.json     |    18 +-
 .../dictionaries/login.translation.json       |    73 +-
 .../dictionaries/logout.translation.json      |    54 +-
 .../dictionaries/status.definition.json       |     3 -
 .../dictionaries/status.translation.json      |    78 +-
 .../simplesamlphp/simplesamlphp/docs/index.md |     5 +-
 .../docs/simplesamlphp-advancedfeatures.md    |     2 +-
 .../docs/simplesamlphp-authproc.md            |     7 +-
 .../docs/simplesamlphp-changelog.md           |   171 +-
 .../docs/simplesamlphp-customauth.md          |    10 +-
 .../docs/simplesamlphp-errorhandling.md       |    13 +-
 .../simplesamlphp/docs/simplesamlphp-idp.md   |     8 +-
 .../docs/simplesamlphp-install.md             |    68 +-
 ...esamlphp-metadata-extensions-attributes.md |    54 +-
 .../docs/simplesamlphp-modules.md             |     4 +-
 .../simplesamlphp-reference-idp-hosted.md     |    75 +-
 .../simplesamlphp-reference-idp-remote.md     |    70 +-
 .../docs/simplesamlphp-reference-sp-remote.md |   106 +-
 .../docs/simplesamlphp-sp-api.md              |    21 +-
 .../simplesamlphp/docs/simplesamlphp-sp.md    |    22 +-
 .../docs/simplesamlphp-theming.md             |    16 +-
 .../docs/simplesamlphp-upgrade-notes-1.14.md  |     2 +-
 .../docs/simplesamlphp-upgrade-notes-1.17.md  |    27 +-
 .../docs/simplesamlphp-upgrade-notes-1.18.md  |    26 +
 .../simplesamlphp/extra/auth_memcookie.conf   |    38 -
 .../simplesamlphp/extra/simplesamlphp.spec    |     5 +-
 .../SimpleSAML/Auth/AuthenticationFactory.php |     8 +-
 .../Auth/{Default.php => DefaultAuth.php}     |    37 +-
 .../lib/SimpleSAML/Auth/LDAP.php              |   838 +-
 .../lib/SimpleSAML/Auth/ProcessingChain.php   |    57 +-
 .../lib/SimpleSAML/Auth/ProcessingFilter.php  |     2 +-
 .../lib/SimpleSAML/Auth/Simple.php            |    51 +-
 .../lib/SimpleSAML/Auth/Source.php            |    85 +-
 .../lib/SimpleSAML/Auth/State.php             |    57 +-
 .../lib/SimpleSAML/Auth/TimeLimitedToken.php  |    26 +-
 .../SimpleSAML/Bindings/Shib13/Artifact.php   |    34 +-
 .../SimpleSAML/Bindings/Shib13/HTTPPost.php   |    36 +-
 .../lib/SimpleSAML/Configuration.php          |   190 +-
 .../simplesamlphp/lib/SimpleSAML/Database.php |    35 +-
 .../lib/SimpleSAML/Error/Assertion.php        |     6 +-
 .../lib/SimpleSAML/Error/AuthSource.php       |     5 +-
 .../lib/SimpleSAML/Error/BadRequest.php       |     1 +
 .../SimpleSAML/Error/ConfigurationError.php   |     8 +-
 .../Error/CriticalConfigurationError.php      |    12 +-
 .../lib/SimpleSAML/Error/Error.php            |    42 +-
 .../lib/SimpleSAML/Error/ErrorCodes.php       |   134 +-
 .../lib/SimpleSAML/Error/Exception.php        |    83 +-
 .../lib/SimpleSAML/Error/NotFound.php         |     8 +-
 .../Error/UnserializableException.php         |     2 +-
 .../lib/SimpleSAML/HTTP/Router.php            |    44 +-
 .../lib/SimpleSAML/HTTP/RunnableResponse.php  |     5 +-
 .../simplesamlphp/lib/SimpleSAML/IdP.php      |    89 +-
 .../SimpleSAML/IdP/IFrameLogoutHandler.php    |    17 +-
 .../SimpleSAML/IdP/LogoutHandlerInterface.php |    11 +-
 .../IdP/TraditionalLogoutHandler.php          |    30 +-
 .../lib/SimpleSAML/Locale/Language.php        |    39 +-
 .../lib/SimpleSAML/Locale/Localization.php    |    57 +-
 .../lib/SimpleSAML/Locale/Translate.php       |   106 +-
 .../simplesamlphp/lib/SimpleSAML/Logger.php   |   115 +-
 .../Logger/ErrorLogLoggingHandler.php         |     7 +-
 .../SimpleSAML/Logger/FileLoggingHandler.php  |    26 +-
 .../Logger/LoggingHandlerInterface.php        |     7 +-
 .../Logger/StandardErrorLoggingHandler.php    |     7 +-
 .../Logger/SyslogLoggingHandler.php           |    15 +-
 .../simplesamlphp/lib/SimpleSAML/Memcache.php |    91 +-
 .../Metadata/MetaDataStorageHandler.php       |   106 +-
 .../MetaDataStorageHandlerFlatFile.php        |    23 +-
 .../Metadata/MetaDataStorageHandlerPdo.php    |    41 +-
 .../MetaDataStorageHandlerSerialize.php       |    84 +-
 .../Metadata/MetaDataStorageHandlerXML.php    |     7 +-
 .../Metadata/MetaDataStorageSource.php        |   104 +-
 .../lib/SimpleSAML/Metadata/SAMLBuilder.php   |   192 +-
 .../lib/SimpleSAML/Metadata/SAMLParser.php    |   303 +-
 .../lib/SimpleSAML/Metadata/Signer.php        |    68 +-
 .../lib/SimpleSAML/Metadata/Sources/MDQ.php   |    91 +-
 .../simplesamlphp/lib/SimpleSAML/Module.php   |   121 +-
 .../SimpleSAML/Module/ControllerResolver.php  |    14 +-
 .../simplesamlphp/lib/SimpleSAML/Session.php  |    99 +-
 .../lib/SimpleSAML/SessionHandler.php         |    10 +-
 .../lib/SimpleSAML/SessionHandlerCookie.php   |     7 +-
 .../lib/SimpleSAML/SessionHandlerPHP.php      |    92 +-
 .../lib/SimpleSAML/SessionHandlerStore.php    |     9 +-
 .../simplesamlphp/lib/SimpleSAML/Stats.php    |    10 +-
 .../lib/SimpleSAML/Stats/Output.php           |     4 +-
 .../simplesamlphp/lib/SimpleSAML/Store.php    |    10 +-
 .../lib/SimpleSAML/Store/Memcache.php         |    14 +-
 .../lib/SimpleSAML/Store/Redis.php            |    24 +-
 .../lib/SimpleSAML/Store/SQL.php              |   161 +-
 .../lib/SimpleSAML/Utilities.php              |   160 +
 .../lib/SimpleSAML/Utils/Arrays.php           |     2 +-
 .../lib/SimpleSAML/Utils/Attributes.php       |    16 +-
 .../lib/SimpleSAML/Utils/Auth.php             |    14 +-
 .../lib/SimpleSAML/Utils/Config.php           |    11 +-
 .../lib/SimpleSAML/Utils/Config/Metadata.php  |    65 +-
 .../lib/SimpleSAML/Utils/Crypto.php           |    79 +-
 .../lib/SimpleSAML/Utils/EMail.php            |   305 +
 .../lib/SimpleSAML/Utils/HTTP.php             |   159 +-
 .../lib/SimpleSAML/Utils/HttpAdapter.php      |    62 +
 .../lib/SimpleSAML/Utils/Net.php              |     2 +-
 .../lib/SimpleSAML/Utils/Random.php           |     4 +-
 .../lib/SimpleSAML/Utils/System.php           |    57 +-
 .../lib/SimpleSAML/Utils/Time.php             |    10 +-
 .../lib/SimpleSAML/Utils/XML.php              |   100 +-
 .../lib/SimpleSAML/XHTML/EMail.php            |   125 -
 .../lib/SimpleSAML/XHTML/IdPDisco.php         |    95 +-
 .../lib/SimpleSAML/XHTML/Template.php         |   228 +-
 .../XHTML/TemplateControllerInterface.php     |     6 +-
 .../lib/SimpleSAML/XHTML/TemplateLoader.php   |    23 +-
 .../lib/SimpleSAML/XML/Errors.php             |    14 +-
 .../lib/SimpleSAML/XML/Parser.php             |    47 +-
 .../SimpleSAML/XML/Shib13/AuthnRequest.php    |    45 +-
 .../SimpleSAML/XML/Shib13/AuthnResponse.php   |   161 +-
 .../lib/SimpleSAML/XML/Signer.php             |    36 +-
 .../lib/SimpleSAML/XML/Validator.php          |    58 +-
 .../simplesamlphp/lib/_autoload.php           |     8 +-
 .../simplesamlphp/lib/_autoload_modules.php   |    18 +-
 .../locales/af/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/af/LC_MESSAGES/messages.po        |   141 -
 .../locales/ar/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/ar/LC_MESSAGES/messages.po        |   149 +-
 .../locales/ca/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/ca/LC_MESSAGES/messages.po        |   142 -
 .../locales/cs/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/cs/LC_MESSAGES/messages.po        |   372 +-
 .../locales/da/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/da/LC_MESSAGES/messages.po        |   157 +-
 .../locales/de/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/de/LC_MESSAGES/messages.po        |   433 +-
 .../locales/el/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/el/LC_MESSAGES/messages.po        |   163 +-
 .../locales/en/LC_MESSAGES/attributes.po      |  1862 +++
 .../locales/en/LC_MESSAGES/messages.po        |   163 +-
 .../locales/es/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/es/LC_MESSAGES/messages.po        |   159 +-
 .../locales/et/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/et/LC_MESSAGES/messages.po        |   154 +-
 .../locales/eu/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/eu/LC_MESSAGES/messages.po        |   154 +-
 .../locales/fa/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/fi/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/fi/LC_MESSAGES/messages.po        |   145 +-
 .../locales/fr/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/fr/LC_MESSAGES/messages.po        |   154 +-
 .../locales/he/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/he/LC_MESSAGES/messages.po        |   154 +-
 .../locales/hr/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/hr/LC_MESSAGES/messages.po        |   154 +-
 .../locales/hu/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/hu/LC_MESSAGES/messages.po        |   151 +-
 .../locales/id/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/id/LC_MESSAGES/messages.po        |   154 +-
 .../locales/it/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/it/LC_MESSAGES/messages.po        |   154 +-
 .../locales/ja/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/ja/LC_MESSAGES/messages.po        |   154 +-
 .../locales/lb/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/lb/LC_MESSAGES/messages.po        |   123 -
 .../locales/lt/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/lt/LC_MESSAGES/messages.po        |   154 +-
 .../locales/lv/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/lv/LC_MESSAGES/messages.po        |   154 +-
 .../locales/nb/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/nb/LC_MESSAGES/messages.po        |   154 +-
 .../locales/nl/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/nl/LC_MESSAGES/messages.po        |   165 +-
 .../locales/nn/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/nn/LC_MESSAGES/messages.po        |   154 +-
 .../locales/pl/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/pl/LC_MESSAGES/messages.po        |   151 +-
 .../locales/pt-br/LC_MESSAGES/attributes.po   |  2058 +++
 .../locales/pt-br/LC_MESSAGES/messages.po     |   142 +-
 .../locales/pt/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/pt/LC_MESSAGES/messages.po        |   148 +-
 .../locales/ro/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/ro/LC_MESSAGES/messages.po        |   156 +-
 .../locales/ru/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/ru/LC_MESSAGES/messages.po        |   157 +-
 .../locales/se/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/se/LC_MESSAGES/messages.po        |    39 -
 .../locales/sl/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/sl/LC_MESSAGES/messages.po        |   154 +-
 .../locales/sma/LC_MESSAGES/attributes.po     |  2058 +++
 .../locales/sr/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/sr/LC_MESSAGES/messages.po        |   154 +-
 .../locales/sv/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/sv/LC_MESSAGES/messages.po        |   154 +-
 .../locales/tr/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/tr/LC_MESSAGES/messages.po        |   148 +-
 .../locales/ur/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/xh/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/xh/LC_MESSAGES/messages.po        |   155 -
 .../locales/zh-tw/LC_MESSAGES/attributes.po   |  2058 +++
 .../locales/zh-tw/LC_MESSAGES/messages.po     |   157 +-
 .../locales/zh/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/zh/LC_MESSAGES/messages.po        |   154 +-
 .../locales/zu/LC_MESSAGES/attributes.po      |  2058 +++
 .../locales/zu/LC_MESSAGES/messages.po        |   155 -
 .../metadata-templates/saml20-idp-hosted.php  |     1 +
 .../metadata-templates/saml20-idp-remote.php  |     1 +
 .../metadata-templates/saml20-sp-remote.php   |     1 +
 .../metadata-templates/shib13-idp-hosted.php  |     1 +
 .../metadata-templates/shib13-idp-remote.php  |     1 +
 .../metadata-templates/shib13-sp-hosted.php   |     1 +
 .../metadata-templates/shib13-sp-remote.php   |     1 +
 .../metadata-templates/wsfed-idp-remote.php   |     1 +
 .../metadata-templates/wsfed-sp-hosted.php    |     1 +
 .../simplesamlphp/modules/adfs/.php_cs.dist   |    16 +
 .../simplesamlphp/modules/adfs/.travis.yml    |    31 +
 .../simplesamlphp/modules/adfs/LICENSE        |   459 +
 .../modules/adfs/bin/check-syntax.sh          |    15 +
 .../simplesamlphp/modules/adfs/codecov.yml}   |     0
 .../simplesamlphp/modules/adfs/composer.json  |    42 +
 .../modules/adfs/lib/AdfsController.php       |   287 +
 .../modules/adfs/lib/IdP/ADFS.php             |   134 +-
 .../adfs/lib/SAML2/XML/fed/Endpoint.php       |     2 +
 .../XML/fed/SecurityTokenServiceType.php      |    14 +-
 .../lib/SAML2/XML/fed/TokenTypesOffered.php   |     1 +
 .../metadata-templates/adfs-idp-hosted.php    |    12 +
 .../metadata-templates/adfs-sp-remote.php     |    12 +
 .../simplesamlphp/modules/adfs}/phpunit.xml   |     0
 .../simplesamlphp/modules/adfs/psalm.xml      |    32 +
 .../modules/adfs/tests/bootstrap.php          |    12 +
 .../modules/adfs/www/idp/metadata.php         |   188 +-
 .../modules/adfs/www/idp/prp.php              |    29 +-
 .../modules/admin/lib/ConfigController.php    |    78 +-
 .../admin/lib/FederationController.php        |   236 +-
 .../simplesamlphp/modules/admin/lib/Menu.php  |     1 +
 .../modules/admin/lib/TestController.php      |   147 +-
 .../simplesamlphp/modules/admin/routes.yaml   |     9 +
 .../admin/templates/authsource_list.twig      |     2 +
 .../modules/admin/templates/diagnostics.twig  |     3 +
 .../modules/admin/templates/federation.twig   |    22 +-
 .../admin/templates/metadata_converter.twig   |    63 +
 .../admin/templates/show_metadata.twig        |    18 +
 .../modules/admin/templates/status.twig       |    75 +-
 .../simplesamlphp/modules/authX509/.gitignore |     8 +
 .../modules/authX509/.php_cs.dist             |    16 +
 .../modules/authX509/.travis.yml              |    27 +
 .../modules/authX509/codecov.yml              |    11 +
 .../modules/authX509/composer.json            |    49 +
 .../modules/authX509/default-disable          |     3 +
 .../modules/authX509/docs/authX509.md         |     3 +-
 .../lib/Auth/Process/ExpiryWarning.php        |     5 +-
 .../authX509/lib/Auth/Source/X509userCert.php |    56 +-
 .../authX509/lib/Controller/ExpiryWarning.php |   103 +
 .../locales/pl/LC_MESSAGES/authX509.po        |    61 +
 .../modules/authX509/phpunit.xml              |    19 +
 .../simplesamlphp/modules/authX509/psalm.xml  |    30 +
 .../authX509/routing/routes/routes.yml        |     6 +
 .../modules/authX509/templates/X509error.php  |     1 +
 .../modules/authX509/tests/bootstrap.php      |    11 +
 .../modules/authX509/www/expirywarning.php    |     5 +-
 .../modules/authYubiKey/.codecov.yml          |    11 +
 .../modules/authYubiKey/.php_cs.dist          |    17 +
 .../modules/authYubiKey/.travis.yml           |    35 +
 .../simplesamlphp/modules/authYubiKey/LICENSE |   165 +
 .../modules/authYubiKey/bin/check-syntax.sh   |    15 +
 .../modules/authYubiKey/composer.json         |    45 +
 .../modules/authYubiKey/default-disable       |     2 +-
 .../dictionaries/yubikey.translation.json     |     6 +-
 .../lib/Auth/Process/OTP2YubiPrefix.php       |     1 +
 .../authYubiKey/lib/Auth/Source/YubiKey.php   |    15 +
 .../modules/authYubiKey/libextinc/Yubico.php  |     4 +-
 .../modules/authYubiKey/phpunit.xml           |    19 +
 .../modules/authYubiKey/psalm.xml             |    32 +
 .../authYubiKey/templates/yubikeylogin.twig   |     4 +-
 .../modules/authYubiKey/tests/bootstrap.php   |    11 +
 .../modules/authYubiKey/www/yubikeylogin.php  |    12 +-
 .../modules/authcrypt/.php_cs.dist            |    15 +
 .../modules/authcrypt/.travis.yml             |    31 +
 .../simplesamlphp/modules/authcrypt/LICENSE   |   459 +
 .../modules/authcrypt/bin/check-syntax.sh     |    15 +
 .../modules/authcrypt/codecov.yml             |    11 +
 .../modules/authcrypt/composer.json           |    43 +
 .../authcrypt/lib/Auth/Source/Hash.php        |    10 +-
 .../authcrypt/lib/Auth/Source/Htpasswd.php    |    17 +-
 .../modules/authcrypt/phpunit.xml             |    19 +
 .../simplesamlphp/modules/authcrypt/psalm.xml |    30 +
 .../modules/authcrypt/tests/bootstrap.php     |    11 +
 .../modules/authfacebook/.php_cs.dist         |    17 +
 .../modules/authfacebook/.travis.yml          |    30 +
 .../modules/authfacebook/LICENSE              |   165 +
 .../modules/authfacebook/codecov.yml          |    11 +
 .../modules/authfacebook/composer.json        |    45 +
 .../authfacebook/extlibinc/base_facebook.php  |   170 +-
 .../authfacebook/lib/Auth/Source/Facebook.php |    39 +-
 .../modules/authfacebook/lib/Facebook.php     |    93 +-
 .../modules/authfacebook/phpunit.xml          |    22 +
 .../modules/authfacebook/psalm.xml            |    32 +
 .../modules/authfacebook/tests/bootstrap.php  |    11 +
 .../modules/authfacebook/www/linkback.php     |     7 +-
 .../modules/authorize/.php_cs.dist            |    17 +
 .../modules/authorize/.travis.yml             |    35 +
 .../simplesamlphp/modules/authorize/LICENSE   |   165 +
 .../modules/authorize/bin/check-syntax.sh     |    15 +
 .../modules/authorize/codecov.yml             |    11 +
 .../modules/authorize/composer.json           |    42 +
 .../dictionaries/Authorize.translation.json   |     8 +-
 .../modules/authorize/docs/authorize.md       |    17 +-
 .../authorize/lib/Auth/Process/Authorize.php  |    49 +-
 .../locales/st/LC_MESSAGES/authorize.po       |    35 +
 .../modules/authorize/phpunit.xml             |    19 +
 .../simplesamlphp/modules/authorize/psalm.xml |    32 +
 .../authorize/templates/authorize_403.php     |    11 +-
 .../tests/Utils/TestableAuthorize.php         |    20 +
 .../modules/authorize/tests/bootstrap.php     |    11 +
 .../tests/lib/Auth/Process/AuthorizeTest.php  |   162 +
 .../modules/authtwitter/.codecov.yml          |    11 +
 .../modules/authtwitter/.php_cs.dist          |    16 +
 .../modules/authtwitter/.travis.yml           |    31 +
 .../simplesamlphp/modules/authtwitter/LICENSE |   165 +
 .../modules/authtwitter}/bin/check-syntax.sh  |     2 +-
 .../modules/authtwitter/composer.json         |    46 +
 .../authtwitter/lib/Auth/Source/Twitter.php   |    17 +-
 .../modules/authtwitter/phpunit.xml           |    19 +
 .../modules/authtwitter/psalm.xml             |    31 +
 .../modules/authtwitter/tests/bootstrap.php   |    11 +
 .../modules/authtwitter/www/linkback.php      |     3 +-
 .../modules/authwindowslive/.codecov.yml      |    11 +
 .../modules/authwindowslive/.php_cs.dist      |    16 +
 .../modules/authwindowslive/.travis.yml       |    31 +
 .../modules/authwindowslive/LICENSE           |   165 +
 .../authwindowslive/bin/check-syntax.sh       |    15 +
 .../modules/authwindowslive/composer.json     |    47 +
 .../lib/Auth/Source/LiveID.php                |    14 +-
 .../modules/authwindowslive/phpunit.xml       |    19 +
 .../modules/authwindowslive/psalm.xml         |    31 +
 .../authwindowslive/tests/bootstrap.php       |    11 +
 .../modules/authwindowslive/www/linkback.php  |     6 +-
 .../simplesamlphp/modules/cas/.codecov.yml    |    11 +
 .../simplesamlphp/modules/cas/.php_cs.dist    |    15 +
 .../simplesamlphp/modules/cas/.travis.yml     |    31 +
 .../modules/cas/bin/check-syntax.sh           |    15 +
 .../simplesamlphp/modules/cas/composer.json   |    43 +
 .../simplesamlphp/modules/cas/docs/cas.md     |     4 -
 .../modules/cas/lib/Auth/Source/CAS.php       |    30 +-
 .../simplesamlphp/modules/cas/phpunit.xml     |    19 +
 .../simplesamlphp/modules/cas/psalm.xml       |    30 +
 .../modules/cas/tests/bootstrap.php           |    11 +
 .../modules/cas/www/linkback.php              |    11 +-
 .../simplesamlphp/modules/cdc/.codecov.yml    |    11 +
 .../simplesamlphp/modules/cdc/.travis.yml     |    31 +
 .../modules/cdc/bin/check-syntax.sh           |    15 +
 .../simplesamlphp/modules/cdc/composer.json   |    45 +
 .../modules/cdc/lib/Auth/Process/CDC.php      |     1 +
 .../simplesamlphp/modules/cdc/lib/Client.php  |     5 +-
 .../simplesamlphp/modules/cdc/lib/Server.php  |    16 +-
 .../simplesamlphp/modules/cdc/phpunit.xml     |    20 +
 .../simplesamlphp/modules/cdc/psalm.xml       |    32 +
 .../modules/cdc/tests/bootstrap.php           |    11 +
 .../simplesamlphp/modules/cdc/www/resume.php  |     8 +-
 .../modules/consent/.php_cs.dist              |    16 +
 .../simplesamlphp/modules/consent/.travis.yml |    31 +
 .../simplesamlphp/modules/consent/LICENSE     |   459 +
 .../modules/consent/bin/check-syntax.sh       |    15 +
 .../simplesamlphp/modules/consent/codecov.yml |    11 +
 .../modules/consent/composer.json             |    42 +
 .../modules/consent/default-disable           |     2 +-
 .../dictionaries/consent.translation.json     |    75 +-
 .../consent/lib/Auth/Process/Consent.php      |     2 +-
 .../consent/lib/Consent/Store/Cookie.php      |    15 +-
 .../consent/lib/Consent/Store/Database.php    |     9 +-
 .../modules/consent/lib/Logout.php            |     5 +
 .../modules/consent/lib/Store.php             |     7 +-
 .../consent/locales/af/LC_MESSAGES/consent.po |     2 +-
 .../consent/locales/st/LC_MESSAGES/consent.po |   148 +
 .../consent/locales/xh/LC_MESSAGES/consent.po |    70 +-
 .../consent/locales/zh/LC_MESSAGES/consent.po |    10 +-
 .../consent/locales/zu/LC_MESSAGES/consent.po |    72 +-
 .../simplesamlphp/modules/consent/phpunit.xml |    19 +
 .../simplesamlphp/modules/consent/psalm.xml   |    31 +
 .../modules/consent/templates/consentform.php |     2 +
 .../consent/templates/consentform.twig        |     8 +-
 .../modules/consent/tests/bootstrap.php       |    11 +
 .../tests/lib/Auth/Process/ConsentTest.php    |   251 +
 .../modules/consent/www/getconsent.php        |    17 +-
 .../modules/consent/www/logout.php            |     2 +-
 .../modules/consentAdmin/.codecov.yml         |    11 +
 .../modules/consentAdmin/.php_cs.dist         |    17 +
 .../modules/consentAdmin/.travis.yml          |    31 +
 .../modules/consentAdmin/LICENSE              |   165 +
 .../modules/consentAdmin/bin/check-syntax.sh  |    15 +
 .../modules/consentAdmin/composer.json        |    45 +
 .../consentAdmin/hooks/hook_configpage.php    |     2 +-
 .../consentAdmin/hooks/hook_frontpage.php     |     3 +-
 .../modules/consentAdmin/phpunit.xml          |    19 +
 .../modules/consentAdmin/psalm.xml            |    31 +
 .../consentAdmin/templates/consentadmin.twig  |     2 +-
 .../modules/consentAdmin/tests/bootstrap.php  |    11 +
 .../www/assets/js/consentAdmin.js             |     6 +-
 .../modules/consentAdmin/www/consentAdmin.php |    24 +-
 .../dictionaries/cardinality.translation.json |    12 +-
 .../dictionaries/frontpage.translation.json   |   155 +-
 .../dictionaries/no_cookie.translation.json   |     9 +-
 .../dictionaries/no_metadata.translation.json |    15 +-
 .../dictionaries/no_state.translation.json    |    39 +-
 .../short_sso_interval.translation.json       |     9 +-
 .../core/docs/authproc_attributealter.md      |    66 +-
 .../modules/core/hooks/hook_frontpage.php     |     3 +-
 .../modules/core/hooks/hook_sanitycheck.php   |     9 +-
 .../simplesamlphp/modules/core/lib/ACL.php    |    17 +-
 .../core/lib/Auth/Process/AttributeAdd.php    |    18 +-
 .../core/lib/Auth/Process/AttributeAlter.php  |    32 +-
 .../core/lib/Auth/Process/AttributeCopy.php   |    13 +-
 .../core/lib/Auth/Process/AttributeLimit.php  |    30 +-
 .../core/lib/Auth/Process/AttributeMap.php    |    33 +-
 .../core/lib/Auth/Process/AttributeRealm.php  |    12 +-
 .../lib/Auth/Process/AttributeValueMap.php    |    35 +-
 .../core/lib/Auth/Process/Cardinality.php     |    57 +-
 .../lib/Auth/Process/CardinalitySingle.php    |    32 +-
 .../lib/Auth/Process/ExtendIdPSession.php     |    21 +-
 .../core/lib/Auth/Process/GenerateGroups.php  |    29 +-
 .../core/lib/Auth/Process/LanguageAdaptor.php |    20 +-
 .../modules/core/lib/Auth/Process/PHP.php     |    21 +-
 .../core/lib/Auth/Process/ScopeAttribute.php  |    21 +-
 .../lib/Auth/Process/ScopeFromAttribute.php   |    31 +-
 .../Auth/Process/StatisticsWithAttribute.php  |    14 +-
 .../core/lib/Auth/Process/TargetedID.php      |    39 +-
 .../lib/Auth/Process/WarnShortSSOInterval.php |    17 +-
 .../core/lib/Auth/Source/AdminPassword.php    |    12 +-
 .../modules/core/lib/Auth/UserPassBase.php    |    61 +-
 .../modules/core/lib/Auth/UserPassOrgBase.php |    63 +-
 .../modules/core/lib/Controller.php           |    55 +-
 .../modules/core/lib/Stats/Output/File.php    |    40 +-
 .../modules/core/lib/Stats/Output/Log.php     |    20 +-
 .../core/lib/Storage/SQLPermanentStorage.php  |   149 +-
 .../core/locales/pl/LC_MESSAGES/core.po       |     4 +-
 .../core/templates/authsource_list.twig       |    11 +
 .../core/templates/cardinality_error.twig     |    25 +
 .../core/templates/frontpage_config.tpl.php   |     2 +-
 ...oginuserpass.php => loginuserpass.tpl.php} |     4 +-
 .../modules/core/templates/loginuserpass.twig |    15 +-
 ...pper.php => logout-iframe-wrapper.tpl.php} |     0
 .../core/templates/logout-iframe-wrapper.twig |    16 +-
 ...ogout-iframe.php => logout-iframe.tpl.php} |     0
 .../modules/core/templates/logout-iframe.twig |   123 +
 ...nterval.php => short_sso_interval.tpl.php} |     0
 .../core/templates/show_metadata.tpl.php      |     4 +-
 .../modules/core/www/authenticate.php         |     6 +-
 .../modules/core/www/cardinality_error.php    |     7 +-
 .../modules/core/www/frontpage_config.php     |    17 +-
 .../modules/core/www/frontpage_federation.php |    22 +-
 .../core/www/idp/logout-iframe-done.php       |     6 +-
 .../core/www/idp/logout-iframe-post.php       |     1 +
 .../modules/core/www/idp/logout-iframe.js     |     2 +-
 .../modules/core/www/idp/logout-iframe.php    |    14 +-
 .../modules/core/www/loginuserpass.php        |    17 +-
 .../modules/core/www/loginuserpassorg.php     |    28 +-
 .../modules/core/www/no_cookie.php            |    13 +-
 .../modules/core/www/short_sso_interval.php   |     5 +-
 .../modules/core/www/show_metadata.php        |    12 +-
 .../simplesamlphp/modules/cron/bin/cron.php   |     6 +-
 .../cron/dictionaries/cron.translation.json   |    27 +-
 .../simplesamlphp/modules/cron/docs/cron.md   |     2 +-
 .../modules/cron/hooks/hook_configpage.php    |     3 +-
 .../modules/cron/hooks/hook_cron.php          |     5 +-
 .../modules/cron/hooks/hook_frontpage.php     |     4 +-
 .../modules/cron/lib/Controller/Cron.php      |   162 +
 .../simplesamlphp/modules/cron/lib/Cron.php   |    24 +-
 .../cron/locales/nl/LC_MESSAGES/cron.po       |    31 +-
 .../simplesamlphp/modules/cron/routes.yaml    |     6 +
 ...nfo-result.php => croninfo-result.tpl.php} |     0
 .../cron/templates/croninfo-result.twig       |     9 +-
 .../modules/cron/templates/croninfo.tpl.php   |     4 +-
 .../modules/cron/templates/croninfo.twig      |    17 +-
 .../modules/cron/www/assets/css/cron.css      |     3 +-
 .../simplesamlphp/modules/cron/www/cron.php   |    67 +-
 .../modules/cron/www/croninfo.php             |    38 +-
 .../modules/discopower/.codecov.yml           |    11 +
 .../modules/discopower/.php_cs.dist           |    17 +
 .../modules/discopower/.travis.yml            |    30 +
 .../simplesamlphp/modules/discopower/LICENSE  |   165 +
 .../modules/discopower/bin/check-syntax.sh    |    15 +
 .../modules/discopower/composer.json          |    42 +
 .../config-templates/module_discopower.php    |     2 +-
 .../dictionaries/tabs.translation.json        |    52 +-
 .../modules/discopower/lib/PowerIdPDisco.php  |   100 +-
 .../locales/en/LC_MESSAGES/discopower.po      |     8 +-
 .../locales/nl/LC_MESSAGES/discopower.po      |     6 +
 .../locales/st/LC_MESSAGES/discopower.po      |    34 +
 .../modules/discopower/phpunit.xml            |    19 +
 .../modules/discopower/psalm.xml              |    32 +
 .../discopower/templates/disco.tpl.php        |    21 +-
 .../modules/discopower/templates/disco.twig   |    13 +-
 .../modules/discopower/tests/bootstrap.php    |    11 +
 .../images/ui-bg_glass_55_fbf9ee_1x400.png    |     5 +
 .../images/ui-bg_glass_65_ffffff_1x400.png    |     3 +
 .../images/ui-bg_glass_75_dadada_1x400.png    |     3 +
 .../images/ui-bg_glass_75_e6e6e6_1x400.png    |     3 +
 .../images/ui-bg_glass_95_fef1ec_1x400.png    |     3 +
 .../ui-bg_highlight-soft_75_cccccc_1x100.png  |     3 +
 .../images/ui-icons_222222_256x240.png        |    32 +
 .../images/ui-icons_2e83ff_256x240.png        |    18 +
 .../images/ui-icons_454545_256x240.png        |    30 +
 .../images/ui-icons_888888_256x240.png        |    35 +
 .../images/ui-icons_cd0a0a_256x240.png        |   198 +
 .../css/uitheme1.12.1/jquery-ui.min.css       |     7 +
 .../www/assets/js/jquery-1.12.4.min.js        |     5 +
 .../www/assets/js/jquery-ui-1.12.1.min.js     |    13 +
 .../discopower/www/assets/js/quicksilver.js   |     8 +-
 .../discopower/www/assets/js/suggest.js       |     8 +-
 .../discopower/www/assets/js/tablist.js       |    13 +
 .../modules/discopower/www/tablist.php        |    43 +
 .../exampleattributeserver/.codecov.yml       |    11 +
 .../exampleattributeserver/.php_cs.dist       |    15 +
 .../exampleattributeserver/.travis.yml        |    35 +
 .../modules/exampleattributeserver/LICENSE    |   165 +
 .../bin/check-syntax.sh                       |    15 +
 .../exampleattributeserver/composer.json      |    41 +
 .../{default-disable => default-enable}       |     2 +-
 .../exampleattributeserver/phpunit.xml        |    19 +
 .../modules/exampleattributeserver/psalm.xml  |    30 +
 .../tests/bootstrap.php                       |    11 +
 .../www/attributeserver.php                   |    10 +-
 .../lib/Auth/Process/RedirectTest.php         |    14 +-
 .../exampleauth/lib/Auth/Source/External.php  |    44 +-
 .../lib/Auth/Source/StaticSource.php          |    13 +-
 .../exampleauth/lib/Auth/Source/UserPass.php  |    23 +-
 .../templates/authenticate.tpl.php            |    29 +
 .../exampleauth/templates/authenticate.twig   |    29 +
 .../modules/exampleauth/www/authpage.php      |    57 +-
 .../modules/exampleauth/www/redirecttest.php  |     2 +
 .../modules/expirycheck/.codecov.yml          |    11 +
 .../modules/expirycheck/.php_cs.dist          |    17 +
 .../modules/expirycheck/.travis.yml           |    29 +
 .../simplesamlphp/modules/expirycheck/LICENSE |   165 +
 .../modules/expirycheck/composer.json         |    42 +
 .../{default-disable => default-enable}       |     2 +-
 .../dictionaries/expwarning.translation.json  |    44 +-
 .../lib/Auth/Process/ExpiryDate.php           |    55 +-
 .../locales/st/LC_MESSAGES/expirycheck.po     |    89 +
 .../modules/expirycheck/phpunit.xml           |    20 +
 .../modules/expirycheck/psalm.xml             |    39 +
 ...{about2expire.php => about2expire.tpl.php} |     2 +-
 .../{expired.php => expired.tpl.php}          |     0
 .../modules/expirycheck/tests/bootstrap.php   |    11 +
 .../modules/expirycheck/www/about2expire.php  |    34 +-
 .../modules/expirycheck/www/expired.php       |     1 +
 .../simplesamlphp/modules/ldap/.php_cs.dist   |    15 +
 .../simplesamlphp/modules/ldap/.travis.yml    |    35 +
 .../simplesamlphp/modules/ldap/LICENSE        |   459 +
 .../modules/ldap/bin/check-syntax.sh          |    15 +
 .../simplesamlphp/modules/ldap/codecov.yml    |    11 +
 .../simplesamlphp/modules/ldap/composer.json  |    48 +
 .../simplesamlphp/modules/ldap/docs/ldap.md   |     5 +
 .../modules/ldap/lib/Auth/Ldap.php            |   864 +
 .../lib/Auth/Process/AttributeAddFromLDAP.php |    16 +-
 .../Auth/Process/AttributeAddUsersGroups.php  |     6 +-
 .../ldap/lib/Auth/Process/BaseFilter.php      |    19 +-
 .../modules/ldap/lib/ConfigHelper.php         |    33 +-
 .../simplesamlphp/modules/ldap/phpunit.xml    |    19 +
 .../simplesamlphp/modules/ldap/psalm.xml      |    30 +
 .../modules/ldap/tests/bootstrap.php          |    11 +
 .../tests/lib/Auth/Process/BaseFilterTest.php |    31 +
 .../modules/memcacheMonitor/.php_cs.dist      |    17 +
 .../modules/memcacheMonitor/.travis.yml       |    31 +
 .../modules/memcacheMonitor/LICENSE           |   459 +
 .../modules/memcacheMonitor/codecov.yml       |    11 +
 .../modules/memcacheMonitor/composer.json     |    43 +
 .../memcacheMonitor/hooks/hook_configpage.php |     3 +-
 .../memcacheMonitor/hooks/hook_frontpage.php  |     3 +-
 .../hooks/hook_sanitycheck.php                |     2 +-
 .../modules/memcacheMonitor/phpunit.xml       |    19 +
 .../modules/memcacheMonitor/psalm.xml         |    31 +
 .../templates/memcachestat.twig               |     4 +-
 .../memcacheMonitor/tests/bootstrap.php       |    11 +
 .../memcacheMonitor/www/memcachestat.php      |    14 +
 .../modules/memcookie/.codecov.yml            |    11 +
 .../modules/memcookie/.travis.yml             |    31 +
 .../simplesamlphp/modules/memcookie/README.md |   109 +
 .../modules/memcookie/composer.json           |    31 +
 .../config-templates/authmemcookie.php        |     0
 .../modules/memcookie/default-enable          |     0
 .../memcookie/extra/auth_memcookie.conf       |    38 +
 .../memcookie/lib}/AuthMemCookie.php          |    52 +-
 .../modules/memcookie/phpunit.xml             |    19 +
 .../simplesamlphp/modules/memcookie/psalm.xml |    37 +
 .../modules/memcookie/tests/bootstrap.php     |    11 +
 .../modules/memcookie/www/auth.php            |    90 +
 .../modules/metarefresh/.php_cs.dist          |    17 +
 .../modules/metarefresh/.travis.yml           |    30 +
 .../simplesamlphp/modules/metarefresh/LICENSE |   459 +
 .../modules/metarefresh/bin/check-syntax.sh   |    15 +
 .../modules/metarefresh/bin/metarefresh.php   |    17 +
 .../modules/metarefresh/codecov.yml           |    11 +
 .../modules/metarefresh/composer.json         |    41 +
 .../config-templates/config-metarefresh.php   |     1 +
 .../dictionaries/metarefresh.translation.json |     3 +
 .../docs/simplesamlphp-automated_metadata.md  |    61 +-
 .../modules/metarefresh/hooks/hook_cron.php   |    21 +-
 .../metarefresh/hooks/hook_frontpage.php      |     3 +-
 .../modules/metarefresh/lib/ARP.php           |     7 +-
 .../modules/metarefresh/lib/MetaLoader.php    |   259 +-
 .../modules/metarefresh/phpunit.xml           |    19 +
 .../modules/metarefresh/psalm.xml             |    34 +
 .../modules/metarefresh/tests/bootstrap.php   |    11 +
 .../metarefresh/tests/lib/MetaLoaderTest.php  |   258 +
 .../modules/metarefresh/tests/mdx.pem         |    12 +
 .../metarefresh/tests/testmetadata.xml        |    59 +
 .../modules/metarefresh/www/fetch.php         |    12 +-
 .../dictionaries/multiauth.translation.json   |     6 +-
 .../multiauth/lib/Auth/Source/MultiAuth.php   |    69 +-
 ...{selectsource.php => selectsource.tpl.php} |     2 +-
 .../modules/multiauth/www/selectsource.php    |     5 +-
 .../modules/negotiate/.php_cs.dist            |    16 +
 .../modules/negotiate/.travis.yml             |   142 +
 .../simplesamlphp/modules/negotiate/LICENSE   |   459 +
 .../modules/negotiate/codecov.yml             |    11 +
 .../modules/negotiate/composer.json           |    49 +
 .../modules/negotiate/default-disable         |     2 +-
 .../modules/negotiate/docs/negotiate.md       |    30 +-
 .../negotiate/lib/Auth/Source/Negotiate.php   |   143 +-
 .../simplesamlphp/modules/negotiate/phpcs.xml |    15 +
 .../modules/negotiate/phpunit.xml             |    21 +
 .../simplesamlphp/modules/negotiate/psalm.xml |    42 +
 .../modules/negotiate/templates/disable.php   |     1 +
 .../modules/negotiate/templates/enable.php    |     1 +
 .../modules/negotiate/tests/bootstrap.php     |    11 +
 .../modules/negotiate/www/backend.php         |     2 +-
 .../modules/negotiate/www/disable.php         |     1 +
 .../modules/negotiate/www/enable.php          |     1 +
 .../modules/negotiate/www/retry.php           |     2 +-
 .../simplesamlphp/modules/oauth/.travis.yml   |    35 +
 .../simplesamlphp/modules/oauth/LICENSE       |   459 +
 .../simplesamlphp/modules/oauth/README.md     |     9 +
 .../modules/oauth/bin/check-syntax.sh         |    15 +
 .../simplesamlphp/modules/oauth/codecov.yml   |    12 +
 .../simplesamlphp/modules/oauth/composer.json |    29 +
 .../modules/oauth/hooks/hook_cron.php         |     2 +-
 .../modules/oauth/hooks/hook_frontpage.php    |     2 +
 .../modules/oauth/lib/Consumer.php            |    86 +-
 .../modules/oauth/lib/OAuthServer.php         |     8 +-
 .../modules/oauth/lib/OAuthStore.php          |    60 +-
 .../modules/oauth/lib/Registry.php            |    77 +-
 .../modules/oauth/libextinc/OAuth.php         |   442 +-
 .../simplesamlphp/modules/oauth/phpunit.xml   |    20 +
 .../simplesamlphp/modules/oauth/psalm.xml     |    34 +
 .../oauth/templates/registry.edit.tpl.php     |     8 +-
 .../oauth/templates/registry.edit.twig        |     6 +-
 .../modules/oauth/templates/registry.list.php |     3 +-
 .../modules/oauth/tests/bootstrap.php         |    11 +
 .../images/ui-bg_glass_55_fbf9ee_1x400.png    |     5 +
 .../images/ui-bg_glass_65_ffffff_1x400.png    |     3 +
 .../images/ui-bg_glass_75_dadada_1x400.png    |     3 +
 .../images/ui-bg_glass_75_e6e6e6_1x400.png    |     3 +
 .../images/ui-bg_glass_95_fef1ec_1x400.png    |     3 +
 .../ui-bg_highlight-soft_75_cccccc_1x100.png  |     3 +
 .../images/ui-icons_222222_256x240.png        |    32 +
 .../images/ui-icons_2e83ff_256x240.png        |    18 +
 .../images/ui-icons_454545_256x240.png        |    30 +
 .../images/ui-icons_888888_256x240.png        |    35 +
 .../images/ui-icons_cd0a0a_256x240.png        |   198 +
 .../css/uitheme1.12.1/jquery-ui.min.css       |     7 +
 .../oauth/www/assets/js/jquery-1.12.4.min.js  |     5 +
 .../www/assets/js/jquery-ui-1.12.1.min.js     |    13 +
 .../modules/oauth/www/registry.edit.php       |     6 +-
 .../modules/oauth/www/registry.php            |     7 +-
 .../modules/portal/hooks/hook_htmlinject.php  |     7 +-
 .../modules/portal/lib/Portal.php             |    62 +-
 .../modules/preprodwarning/.php_cs.dist       |    17 +
 .../modules/preprodwarning}/.travis.yml       |     7 +-
 .../modules/preprodwarning/LICENSE            |   459 +
 .../preprodwarning/bin/check-syntax.sh        |    15 +
 .../modules/preprodwarning/codecov.yml        |    11 +
 .../modules/preprodwarning/composer.json      |    42 +
 .../dictionaries/warning.translation.json     |     9 +-
 .../lib/Auth/Process/Warning.php              |     1 +
 .../locales/nl/LC_MESSAGES/preprodwarning.po  |     2 +-
 .../modules/preprodwarning/phpunit.xml        |    19 +
 .../modules/preprodwarning/psalm.xml          |    32 +
 .../preprodwarning/tests/bootstrap.php        |    11 +
 .../simplesamlphp/modules/radius/.codecov.yml |    11 +
 .../simplesamlphp/modules/radius/.php_cs.dist |    15 +
 .../simplesamlphp/modules/radius/.travis.yml  |    35 +
 .../simplesamlphp/modules/radius/LICENSE      |   165 +
 .../modules/radius/composer.json              |    42 +
 .../modules/radius/lib/Auth/Source/Radius.php |   104 +-
 .../simplesamlphp/modules/radius/phpunit.xml  |    19 +
 .../simplesamlphp/modules/radius/psalm.xml    |    34 +
 .../modules/radius/tests/bootstrap.php        |    11 +
 .../simplesamlphp/modules/riak/.codecov.yml   |    11 +
 .../simplesamlphp/modules/riak/.php_cs.dist   |    17 +
 .../simplesamlphp/modules/riak/.travis.yml    |    31 +
 .../simplesamlphp/modules/riak/LICENSE        |   674 +
 .../simplesamlphp/modules/riak/README.md      |     2 +
 .../modules/riak/bin/check-syntax.sh          |    15 +
 .../simplesamlphp/modules/riak/composer.json  |    42 +
 .../riak/config-templates/module_riak.php     |    16 +-
 .../modules/riak/docs/simplesamlphp-riak.md   |    12 +-
 .../modules/riak/hooks/hook_cron.php          |    18 +-
 .../modules/riak/lib/Store/Riak.php           |   175 +
 .../modules/riak/lib/Store/Store.php          |   111 -
 .../simplesamlphp/modules/riak/phpunit.xml    |    19 +
 .../simplesamlphp/modules/riak/psalm.xml      |    32 +
 .../modules/riak/tests/bootstrap.php          |    11 +
 .../saml/dictionaries/proxy.translation.json  |     6 +-
 ...rong_authncontextclassref.translation.json |     6 +-
 .../modules/saml/docs/filterscopes.md         |    38 +-
 .../simplesamlphp/modules/saml/docs/nameid.md |    11 +-
 .../simplesamlphp/modules/saml/docs/sp.md     |    19 +-
 .../saml/hooks/hook_metadata_hosted.php       |     5 +-
 .../saml/lib/Auth/Process/AttributeNameID.php |    26 +-
 .../lib/Auth/Process/AuthnContextClassRef.php |    12 +-
 .../Process/ExpectedAuthnContextClassRef.php  |    30 +-
 .../saml/lib/Auth/Process/FilterScopes.php    |    66 +-
 .../saml/lib/Auth/Process/NameIDAttribute.php |    28 +-
 .../lib/Auth/Process/PersistentNameID.php     |    35 +-
 .../Process/PersistentNameID2TargetedID.php   |    14 +-
 .../lib/Auth/Process/SQLPersistentNameID.php  |    74 +-
 .../saml/lib/Auth/Process/TransientNameID.php |     7 +-
 .../modules/saml/lib/Auth/Source/SP.php       |   385 +-
 .../modules/saml/lib/BaseNameIDGenerator.php  |    17 +-
 .../simplesamlphp/modules/saml/lib/Error.php  |    22 +-
 .../modules/saml/lib/Error/NoAuthnContext.php |     4 +-
 .../modules/saml/lib/Error/NoAvailableIDP.php |     4 +-
 .../modules/saml/lib/Error/NoPassive.php      |     4 +-
 .../modules/saml/lib/Error/NoSupportedIDP.php |     4 +-
 .../saml/lib/Error/ProxyCountExceeded.php     |     4 +-
 .../modules/saml/lib/IdP/SAML1.php            |    68 +-
 .../modules/saml/lib/IdP/SAML2.php            |   331 +-
 .../modules/saml/lib/IdP/SQLNameID.php        |   203 +-
 .../modules/saml/lib/Message.php              |   309 +-
 .../modules/saml/lib/SP/LogoutStore.php       |   131 +-
 ...id_session.php => invalid_session.tpl.php} |     0
 .../modules/saml/www/idp/certs.php            |     9 +-
 .../saml/www/proxy/invalid_session.php        |     9 +-
 .../modules/saml/www/sp/discoresp.php         |     4 +-
 .../modules/saml/www/sp/metadata.php          |    31 +-
 .../modules/saml/www/sp/saml1-acs.php         |     4 +-
 .../modules/saml/www/sp/saml2-acs.php         |    45 +-
 .../modules/saml/www/sp/saml2-logout.php      |    34 +-
 .../modules/sanitycheck/.php_cs.dist          |    18 +
 .../modules/sanitycheck/.travis.yml           |    35 +
 .../simplesamlphp/modules/sanitycheck/LICENSE |   459 +
 .../modules/sanitycheck/bin/check-syntax.sh   |    15 +
 .../modules/sanitycheck/codecov.yml           |    11 +
 .../modules/sanitycheck/composer.json         |    42 +
 .../dictionaries/strings.translation.json     |     3 +-
 .../sanitycheck/hooks/hook_configpage.php     |     2 +
 .../modules/sanitycheck/hooks/hook_cron.php   |     5 +-
 .../sanitycheck/hooks/hook_frontpage.php      |     2 +
 .../sanitycheck/hooks/hook_moduleinfo.php     |     2 +
 .../sanitycheck/hooks/hook_sanitycheck.php    |     2 +
 .../modules/sanitycheck/phpunit.xml           |    19 +
 .../modules/sanitycheck/psalm.xml             |    33 +
 .../sanitycheck/templates/check.tpl.php       |     6 +-
 .../modules/sanitycheck/tests/bootstrap.php   |    11 +
 .../modules/smartattributes/.codecov.yml      |    11 +
 .../modules/smartattributes/.php_cs.dist      |    15 +
 .../modules/smartattributes/.travis.yml       |    36 +
 .../modules/smartattributes/LICENSE           |   165 +
 .../smartattributes/bin/check-syntax.sh       |    15 +
 .../modules/smartattributes/composer.json     |    42 +
 .../lib/Auth/Process/SmartID.php              |    39 +-
 .../lib/Auth/Process/SmartName.php            |    18 +-
 .../modules/smartattributes/phpunit.xml       |    19 +
 .../modules/smartattributes/psalm.xml         |    30 +
 .../smartattributes/tests/bootstrap.php       |    11 +
 .../modules/sqlauth/default-disable           |     3 -
 .../simplesamlphp/modules/sqlauth/docs/sql.md |   100 -
 .../modules/sqlauth/lib/Auth/Source/SQL.php   |   199 -
 .../modules/statistics/.php_cs.dist           |    16 +
 .../modules/statistics/.travis.yml            |    30 +
 .../simplesamlphp/modules/statistics/LICENSE  |   459 +
 .../modules/statistics/bin/loganalyzer.php    |    10 +-
 .../modules/statistics/bin/logcleaner.php     |    10 +-
 .../modules/statistics/codecov.yml            |    11 +
 .../modules/statistics/composer.json          |    43 +
 .../config-templates/module_statistics.php    |     8 +-
 .../dictionaries/statistics.translation.json  |     6 +-
 .../statistics/hooks/hook_configpage.php      |     2 +
 .../modules/statistics/hooks/hook_cron.php    |     4 +-
 .../statistics/hooks/hook_frontpage.php       |     3 +-
 .../statistics/hooks/hook_sanitycheck.php     |    16 +-
 .../modules/statistics/lib/AccessCheck.php    |    37 +-
 .../modules/statistics/lib/Aggregator.php     |   106 +-
 .../modules/statistics/lib/DateHandler.php    |    45 +-
 .../statistics/lib/DateHandlerMonth.php       |    25 +-
 .../statistics/lib/Graph/GoogleCharts.php     |    94 +-
 .../modules/statistics/lib/LogCleaner.php     |    60 +-
 .../modules/statistics/lib/LogParser.php      |    21 +-
 .../modules/statistics/lib/RatioDataset.php   |    51 +-
 .../modules/statistics/lib/Ruleset.php        |    50 +-
 .../modules/statistics/lib/StatDataset.php    |   142 +-
 .../lib/Statistics/FieldPresentation/Base.php |    23 +-
 .../Statistics/FieldPresentation/Entity.php   |     9 +-
 .../lib/Statistics/Rulesets/BaseRule.php      |    72 +-
 .../lib/Statistics/Rulesets/Ratio.php         |    54 +-
 .../statistics/lib/StatisticsController.php   |   244 +
 .../modules/statistics/phpunit.xml            |    20 +
 .../modules/statistics/psalm.xml              |    31 +
 .../modules/statistics/routes.yaml            |     6 +
 .../statistics/templates/statistics.tpl.php   |    27 +-
 .../statistics/templates/statistics.twig      |    21 +-
 .../statistics/templates/statmeta.twig        |     9 +-
 .../modules/statistics/tests/bootstrap.php    |    11 +
 .../images/ui-bg_glass_55_fbf9ee_1x400.png    |     5 +
 .../images/ui-bg_glass_65_ffffff_1x400.png    |     3 +
 .../images/ui-bg_glass_75_dadada_1x400.png    |     3 +
 .../images/ui-bg_glass_75_e6e6e6_1x400.png    |     3 +
 .../images/ui-bg_glass_95_fef1ec_1x400.png    |     3 +
 .../ui-bg_highlight-soft_75_cccccc_1x100.png  |     3 +
 .../images/ui-icons_222222_256x240.png        |    32 +
 .../images/ui-icons_2e83ff_256x240.png        |    18 +
 .../images/ui-icons_454545_256x240.png        |    30 +
 .../images/ui-icons_888888_256x240.png        |    35 +
 .../images/ui-icons_cd0a0a_256x240.png        |   198 +
 .../css/uitheme1.12.1/jquery-ui.min.css       |     7 +
 .../www/assets/js/jquery-1.12.4.min.js        |     5 +
 .../www/assets/js/jquery-ui-1.12.1.min.js     |    13 +
 .../statistics/www/assets/js/statistics.js    |    10 +-
 .../modules/statistics/www/showstats.php      |   185 +-
 .../modules/statistics/www/statmeta.php       |    30 +-
 .../simplesamlphp/package-lock.json           | 13541 ++++++----------
 .../simplesamlphp/simplesamlphp/package.json  |    31 +-
 vendor/simplesamlphp/simplesamlphp/phpcs.xml  |    76 +
 .../simplesamlphp/simplesamlphp/phpunit.xml   |     3 +-
 vendor/simplesamlphp/simplesamlphp/psalm.xml  |    80 +-
 .../simplesamlphp/src/css/default.scss        |    30 +-
 .../simplesamlphp/src/js/bundle.js            |    14 +-
 .../simplesamlphp/src/js/logout/logout.js     |   262 +
 .../simplesamlphp/src/js/logout/main.js       |     5 +
 .../templates/IFrameLogoutHandler.twig        |    26 +-
 .../simplesamlphp/templates/_footer.twig      |    22 +-
 .../simplesamlphp/templates/_header.twig      |   158 +-
 .../simplesamlphp/templates/auth_status.twig  |    39 +-
 .../simplesamlphp/templates/base.twig         |    44 +-
 .../templates/includes/expander.twig          |     6 +-
 .../templates/login-ldapmulti.php             |     2 +-
 .../simplesamlphp/templates/login.php         |     2 +-
 .../simplesamlphp/templates/mailhtml.twig     |    25 +
 .../simplesamlphp/templates/mailtxt.twig      |    13 +
 .../templates/metadata-converter.twig         |    28 +-
 .../{metadata.php => metadata.tpl.php}        |     0
 .../simplesamlphp/templates/metadata.twig     |    96 +-
 .../simplesamlphp/templates/post.twig         |    40 +
 .../simplesamlphp/templates/status.twig       |     1 +
 .../simplesamlphp/webpack.config.js           |    17 +-
 .../simplesamlphp/www/_include.php            |     4 +-
 .../www/admin/metadata-converter.php          |     4 +-
 .../simplesamlphp/www/admin/sandbox.php       |     5 +-
 .../simplesamlphp/www/authmemcookie.php       |   106 -
 .../simplesamlphp/www/errorreport.php         |   108 +-
 .../simplesamlphp/www/module.php              |     1 +
 .../simplesamlphp/www/resources/script.js     |     6 +-
 .../saml2/idp/ArtifactResolutionService.php   |    10 +-
 .../www/saml2/idp/SSOService.php              |     2 +-
 .../www/saml2/idp/SingleLogoutService.php     |     2 +-
 .../simplesamlphp/www/saml2/idp/initSLO.php   |     2 +-
 .../simplesamlphp/www/saml2/idp/metadata.php  |    20 +-
 .../simplesamlphp/www/shib13/idp/metadata.php |     2 +-
 .../twig-configurable-i18n/.codecov.yml       |    11 +
 .../twig-configurable-i18n/.editorconfig      |     0
 .../twig-configurable-i18n/.php_cs.dist       |     0
 .../twig-configurable-i18n/.travis.yml        |   134 +
 .../twig-configurable-i18n/README.md          |     6 +-
 .../twig-configurable-i18n/composer.json      |    18 +-
 .../twig-configurable-i18n/phpcs.xml          |    16 +
 .../twig-configurable-i18n/phpunit.xml        |    19 +
 .../twig-configurable-i18n/psalm.xml          |     0
 .../src/Twig/Environment.php                  |    12 +-
 .../src/Twig/Extensions/Extension/I18n.php    |    33 +-
 .../src/Twig/Extensions/Node/Trans.php        |    25 +-
 .../src/Twig/Extensions/TokenParser/Trans.php |    18 +-
 .../tests/bootstrap.php                       |     4 +
 .../tests/src/Twig/EnvironmentTest.php        |    22 +
 vendor/symfony/config/Definition/BaseNode.php |     4 +-
 .../Builder/ArrayNodeDefinition.php           |     2 +-
 .../Definition/Dumper/YamlReferenceDumper.php |     8 +-
 .../symfony/config/Definition/Processor.php   |     4 +-
 .../config/Definition/PrototypedArrayNode.php |     6 +-
 vendor/symfony/config/LICENSE                 |     2 +-
 vendor/symfony/config/Loader/FileLoader.php   |     4 +-
 .../symfony/config/Loader/LoaderInterface.php |     2 +
 vendor/symfony/config/README.md               |     6 +-
 .../Resource/ClassExistenceResource.php       |     6 +-
 vendor/symfony/config/composer.json           |     2 +-
 vendor/symfony/filesystem/Filesystem.php      |     6 +-
 vendor/symfony/filesystem/LICENSE             |     2 +-
 vendor/symfony/filesystem/composer.json       |     2 +-
 vendor/webmozart/assert/CHANGELOG.md          |    82 +-
 vendor/webmozart/assert/README.md             |    42 +-
 vendor/webmozart/assert/ci/composer.json      |     5 +
 vendor/webmozart/assert/composer.json         |    12 +-
 vendor/webmozart/assert/psalm.xml             |     5 +-
 vendor/webmozart/assert/src/Assert.php        |   806 +-
 vendor/webmozart/assert/src/Mixin.php         |  1971 ---
 web/modules/simplesamlphp_auth/composer.json  |     3 +-
 .../install/simplesamlphp_auth.settings.yml   |     4 +-
 .../schema/simplesamlphp_auth.schema.yml      |     6 +-
 .../simplesamlphp_auth.api.php                |     4 +-
 .../simplesamlphp_auth.info.yml               |    10 +-
 .../simplesamlphp_auth.install                |    20 +-
 .../simplesamlphp_auth.module                 |    17 +-
 .../simplesamlphp_auth.routing.yml            |     6 +-
 .../src/Form/BasicSettingsForm.php            |     7 +-
 .../src/Form/LocalSettingsForm.php            |     2 +-
 .../src/Service/SimplesamlphpDrupalAuth.php   |    76 +-
 .../simplesamlphp_auth_test.info.yml          |     9 +-
 .../src/Functional/SimplesamlphpAuthTest.php  |    60 +-
 .../Service/SimplesamlphpDrupalAuthTest.php   |    37 +-
 1296 files changed, 149618 insertions(+), 29426 deletions(-)
 delete mode 100644 vendor/jaimeperez/twig-configurable-i18n/tests/bootstrap.php
 create mode 100644 vendor/phpfastcache/riak-client/.gitattributes
 create mode 100644 vendor/phpfastcache/riak-client/.gitignore
 create mode 100644 vendor/phpfastcache/riak-client/.gitmodules
 create mode 100644 vendor/phpfastcache/riak-client/.travis.yml
 create mode 100644 vendor/phpfastcache/riak-client/CONTRIBUTING.md
 create mode 100644 vendor/phpfastcache/riak-client/LICENSE
 create mode 100644 vendor/phpfastcache/riak-client/Makefile
 create mode 100644 vendor/phpfastcache/riak-client/README.md
 create mode 100644 vendor/phpfastcache/riak-client/RELNOTES.md
 create mode 100644 vendor/phpfastcache/riak-client/apigen.neon
 create mode 100644 vendor/phpfastcache/riak-client/composer.json
 create mode 100644 vendor/phpfastcache/riak-client/examples/MapDataModel.php
 create mode 100644 vendor/phpfastcache/riak-client/examples/SimpleKV.php
 create mode 100644 vendor/phpfastcache/riak-client/examples/TimeSeries.php
 create mode 100644 vendor/phpfastcache/riak-client/phpunit.xml
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Api.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Api/Exception.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Api/Http.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/ObjectResponse.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/SecondaryIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/ApiInterface.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Bucket.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Delete.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/BucketTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/DeleteObject.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Exception.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchBucketProperties.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchCounter.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchHll.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchMap.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchObject.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchPreflist.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchSet.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchStats.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IncrementCounter.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IndexTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ListObjects.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/LocationTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/MapReduce/FetchObjects.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ObjectTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Ping.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/QueryIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/AssociateIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DeleteIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DissociateIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchObjects.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchSchema.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreIndex.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreSchema.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/SetBucketProperties.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/StoreObject.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DeleteRow.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DescribeTable.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/FetchRow.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/KeyTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/Query.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/RowsTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/StoreRows.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/TableTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateGSet.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateHll.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateMap.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateSet.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/BuilderInterface.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/GSet/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Exception.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Query.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Delete.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/FetchPreflist.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Ping.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Delete.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Stats.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/Stats/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Delete.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Fetch.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Response.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Store.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/CommandInterface.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataObject.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataType.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataType/Counter.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataType/Exception.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataType/Hll.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataType/Map.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/DataType/Set.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Exception.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/HeadersTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Location.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Node.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Node/Builder.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Node/Builder/Exception.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Node/Config.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/Search/Doc.php
 create mode 100644 vendor/phpfastcache/riak-client/src/Riak/TimeSeries/Cell.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/Basho_Man_Super.png
 create mode 100644 vendor/phpfastcache/riak-client/tests/TestCase.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/TimeSeriesTrait.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/BucketOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/CounterOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/GSetOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/HllOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/MapOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/MapReduceOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/ObjectOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/PingTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/PreflistTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/SearchOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/SecondaryIndexOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/SecurityFeaturesTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/SetOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/functional/TimeSeriesOperationsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/scenario/EncodedDataTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/scenario/InternalServerErrorTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/scenario/NodeUnreachableTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/scenario/ObjectConflictTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Api/Translator/SecondaryIndexTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchCounterTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchHllTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchMapTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchObjectTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchSetTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/IncrementCounterTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/ListObjectsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/QueryIndexTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/StoreObjectTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DeleteRowTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DescribeTableTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/FetchRowTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/QueryTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/StoreRowsTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateGSetTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateHllTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateMapTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateSetTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/CounterTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/HllTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/MapTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/SetTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Node/BuilderTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/NodeTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/ObjectTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/Riak/Search/DocTest.php
 create mode 100644 vendor/phpfastcache/riak-client/tests/unit/RiakTest.php
 create mode 100644 vendor/simplesamlphp/composer-module-installer/COPYING
 create mode 100644 vendor/simplesamlphp/composer-module-installer/LICENSE
 create mode 100644 vendor/simplesamlphp/composer-module-installer/README.md
 create mode 100644 vendor/simplesamlphp/composer-module-installer/composer.json
 create mode 100644 vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstaller.php
 create mode 100644 vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstallerPlugin.php
 create mode 100644 vendor/simplesamlphp/saml2/.github/workflows/php.yml
 create mode 100644 vendor/simplesamlphp/saml2/UPGRADING.md
 create mode 100644 vendor/simplesamlphp/saml2/phpcs.xml
 delete mode 100644 vendor/simplesamlphp/saml2/src/SAML2/Certificate/Fingerprint.php
 delete mode 100644 vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintCollection.php
 delete mode 100644 vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintLoader.php
 delete mode 100644 vendor/simplesamlphp/saml2/src/SAML2/Signature/FingerprintValidator.php
 create mode 100644 vendor/simplesamlphp/saml2/tests/autoload.php
 create mode 100644 vendor/simplesamlphp/saml2/tests/resources/xml/metadata/corrupted-metadata-selfsigned.xml
 create mode 100644 vendor/simplesamlphp/saml2/tests/resources/xml/metadata/expired-metadata.xml
 create mode 100644 vendor/simplesamlphp/saml2/tests/resources/xml/metadata/valid-metadata-selfsigned.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/.appveyor.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/SECURITY.md
 delete mode 100755 vendor/simplesamlphp/simplesamlphp/bin/check-syntax.sh
 create mode 100755 vendor/simplesamlphp/simplesamlphp/bin/translateAttributes.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.18.md
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/extra/auth_memcookie.conf
 rename vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/{Default.php => DefaultAuth.php} (78%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/EMail.php
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/EMail.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/fa/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/sma/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/ur/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/attributes.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/adfs/bin/check-syntax.sh
 rename vendor/{jaimeperez/twig-configurable-i18n/.codecov.yml => simplesamlphp/simplesamlphp/modules/adfs/codecov.yml} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/AdfsController.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-idp-hosted.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-sp-remote.php
 rename vendor/{jaimeperez/twig-configurable-i18n => simplesamlphp/simplesamlphp/modules/adfs}/phpunit.xml (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/adfs/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/admin/templates/metadata_converter.twig
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/admin/templates/show_metadata.twig
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/.gitignore
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Controller/ExpiryWarning.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/locales/pl/LC_MESSAGES/authX509.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/routing/routes/routes.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authX509/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authcrypt/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authfacebook/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/authorize/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/locales/st/LC_MESSAGES/authorize.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/Utils/TestableAuthorize.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/lib/Auth/Process/AuthorizeTest.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/LICENSE
 rename vendor/{jaimeperez/twig-configurable-i18n => simplesamlphp/simplesamlphp/modules/authtwitter}/bin/check-syntax.sh (84%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authtwitter/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/.travis.yml
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/cas/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cas/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cdc/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cdc/.travis.yml
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/cdc/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cdc/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cdc/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cdc/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cdc/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/consent/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/locales/st/LC_MESSAGES/consent.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consent/tests/lib/Auth/Process/ConsentTest.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/core/templates/authsource_list.twig
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/core/templates/cardinality_error.twig
 rename vendor/simplesamlphp/simplesamlphp/modules/core/templates/{loginuserpass.php => loginuserpass.tpl.php} (98%)
 rename vendor/simplesamlphp/simplesamlphp/modules/core/templates/{logout-iframe-wrapper.php => logout-iframe-wrapper.tpl.php} (100%)
 rename vendor/simplesamlphp/simplesamlphp/modules/core/templates/{logout-iframe.php => logout-iframe.tpl.php} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.twig
 rename vendor/simplesamlphp/simplesamlphp/modules/core/templates/{short_sso_interval.php => short_sso_interval.tpl.php} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Controller/Cron.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/cron/routes.yaml
 rename vendor/simplesamlphp/simplesamlphp/modules/cron/templates/{croninfo-result.php => croninfo-result.tpl.php} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/discopower/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/st/LC_MESSAGES/discopower.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/jquery-ui.min.css
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-1.12.4.min.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-ui-1.12.1.min.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/tablist.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/discopower/www/tablist.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/composer.json
 rename vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/{default-disable => default-enable} (59%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.tpl.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.twig
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/composer.json
 rename vendor/simplesamlphp/simplesamlphp/modules/expirycheck/{default-disable => default-enable} (59%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/locales/st/LC_MESSAGES/expirycheck.po
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/psalm.xml
 rename vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/{about2expire.php => about2expire.tpl.php} (96%)
 rename vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/{expired.php => expired.tpl.php} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/expirycheck/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/ldap/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Ldap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/lib/Auth/Process/BaseFilterTest.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/README.md
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/composer.json
 rename vendor/simplesamlphp/simplesamlphp/{ => modules/memcookie}/config-templates/authmemcookie.php (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/default-enable
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/extra/auth_memcookie.conf
 rename vendor/simplesamlphp/simplesamlphp/{lib/SimpleSAML => modules/memcookie/lib}/AuthMemCookie.php (66%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/memcookie/www/auth.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/composer.json
 rename vendor/simplesamlphp/simplesamlphp/{ => modules/metarefresh}/docs/simplesamlphp-automated_metadata.md (74%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/lib/MetaLoaderTest.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/mdx.pem
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/testmetadata.xml
 rename vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/{selectsource.php => selectsource.tpl.php} (93%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpcs.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/negotiate/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/README.md
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/oauth/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/jquery-ui.min.css
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-1.12.4.min.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-ui-1.12.1.min.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.php_cs.dist
 rename vendor/{jaimeperez/twig-configurable-i18n => simplesamlphp/simplesamlphp/modules/preprodwarning}/.travis.yml (85%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/radius/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/README.md
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/riak/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Riak.php
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Store.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/riak/tests/bootstrap.php
 rename vendor/simplesamlphp/simplesamlphp/modules/saml/templates/proxy/{invalid_session.php => invalid_session.tpl.php} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/LICENSE
 create mode 100755 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/bin/check-syntax.sh
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/smartattributes/tests/bootstrap.php
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sqlauth/default-disable
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sqlauth/docs/sql.md
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/modules/sqlauth/lib/Auth/Source/SQL.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/.php_cs.dist
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/.travis.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/LICENSE
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/codecov.yml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/composer.json
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatisticsController.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/phpunit.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/psalm.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/routes.yaml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/jquery-ui.min.css
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-1.12.4.min.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-ui-1.12.1.min.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/phpcs.xml
 create mode 100644 vendor/simplesamlphp/simplesamlphp/src/js/logout/logout.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/src/js/logout/main.js
 create mode 100644 vendor/simplesamlphp/simplesamlphp/templates/mailhtml.twig
 create mode 100644 vendor/simplesamlphp/simplesamlphp/templates/mailtxt.twig
 rename vendor/simplesamlphp/simplesamlphp/templates/{metadata.php => metadata.tpl.php} (100%)
 create mode 100644 vendor/simplesamlphp/simplesamlphp/templates/post.twig
 create mode 120000 vendor/simplesamlphp/simplesamlphp/templates/status.twig
 delete mode 100644 vendor/simplesamlphp/simplesamlphp/www/authmemcookie.php
 create mode 100644 vendor/simplesamlphp/twig-configurable-i18n/.codecov.yml
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/.editorconfig (100%)
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/.php_cs.dist (100%)
 create mode 100644 vendor/simplesamlphp/twig-configurable-i18n/.travis.yml
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/README.md (95%)
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/composer.json (50%)
 create mode 100644 vendor/simplesamlphp/twig-configurable-i18n/phpcs.xml
 create mode 100644 vendor/simplesamlphp/twig-configurable-i18n/phpunit.xml
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/psalm.xml (100%)
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/src/Twig/Environment.php (82%)
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php (67%)
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php (70%)
 rename vendor/{jaimeperez => simplesamlphp}/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php (60%)
 create mode 100644 vendor/simplesamlphp/twig-configurable-i18n/tests/bootstrap.php
 create mode 100644 vendor/simplesamlphp/twig-configurable-i18n/tests/src/Twig/EnvironmentTest.php
 create mode 100644 vendor/webmozart/assert/ci/composer.json
 delete mode 100644 vendor/webmozart/assert/src/Mixin.php

diff --git a/composer.json b/composer.json
index 2951f098cc..16e7d6d5ff 100644
--- a/composer.json
+++ b/composer.json
@@ -167,7 +167,7 @@
         "drupal/simple_gmap": "3.0",
         "drupal/simple_megamenu": "1.0-beta3",
         "drupal/simple_sitemap": "3.8",
-        "drupal/simplesamlphp_auth": "3.1",
+        "drupal/simplesamlphp_auth": "3.2",
         "drupal/smtp": "1.0",
         "drupal/social_media": "1.8",
         "drupal/social_media_links": "^2.7",
diff --git a/composer.lock b/composer.lock
index cbbf052e93..70ccf3292f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "2a64549d50fa07eb94057cf9e7a56c55",
+    "content-hash": "a924689e4249f921d2df4f53f1991677",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -7549,27 +7549,27 @@
         },
         {
             "name": "drupal/simplesamlphp_auth",
-            "version": "3.1.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/simplesamlphp_auth.git",
-                "reference": "8.x-3.1"
+                "reference": "8.x-3.2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.1.zip",
-                "reference": "8.x-3.1",
-                "shasum": "db464b1a4716ad21e7f2ec141640691b8d040d59"
+                "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.2.zip",
+                "reference": "8.x-3.2",
+                "shasum": "a5a2b10fc873eb8669929ad1a6d9599e47a2ca99"
             },
             "require": {
-                "drupal/core": "^8",
+                "drupal/core": "^8.7|^9.0",
                 "drupal/externalauth": "^1.1",
-                "simplesamlphp/simplesamlphp": "~1.17.2"
+                "simplesamlphp/simplesamlphp": "^1.18.2"
             },
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "8.x-3.1",
+                    "version": "8.x-3.2",
                     "datestamp": "1580423953",
                     "security-coverage": {
                         "status": "covered",
@@ -9287,16 +9287,16 @@
         },
         {
             "name": "gettext/gettext",
-            "version": "v4.8.2",
+            "version": "v4.8.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-gettext/Gettext.git",
-                "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a"
+                "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/e474f872f2c8636cf53fd283ec4ce1218f3d236a",
-                "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a",
+                "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/57ff4fb16647e78e80a5909fe3c190f1c3110321",
+                "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321",
                 "shasum": ""
             },
             "require": {
@@ -9345,7 +9345,7 @@
                 "po",
                 "translation"
             ],
-            "time": "2019-12-02T10:21:14+00:00"
+            "time": "2020-11-18T22:35:49+00:00"
         },
         {
             "name": "gettext/languages",
@@ -9789,55 +9789,6 @@
             ],
             "time": "2017-05-08T12:10:56+00:00"
         },
-        {
-            "name": "jaimeperez/twig-configurable-i18n",
-            "version": "v2.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jaimeperez/twig-configurable-i18n.git",
-                "reference": "38a22aaa6b31efdc0d76d58f5934dea3ebac8556"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jaimeperez/twig-configurable-i18n/zipball/38a22aaa6b31efdc0d76d58f5934dea3ebac8556",
-                "reference": "38a22aaa6b31efdc0d76d58f5934dea3ebac8556",
-                "shasum": ""
-            },
-            "require": {
-                "twig/extensions": "^1.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8.36",
-                "twig/twig": "^1.37 || ^2.7"
-            },
-            "type": "project",
-            "autoload": {
-                "psr-4": {
-                    "JaimePerez\\TwigConfigurableI18n\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "LGPL-2.1"
-            ],
-            "authors": [
-                {
-                    "name": "Jaime Perez",
-                    "email": "jaime.perez@uninett.no"
-                }
-            ],
-            "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
-            "keywords": [
-                "extension",
-                "gettext",
-                "i18n",
-                "internationalization",
-                "translation",
-                "twig"
-            ],
-            "abandoned": "simplesamlphp/twig-configurable-i18n",
-            "time": "2019-06-07T11:03:28+00:00"
-        },
         {
             "name": "laminas/laminas-diactoros",
             "version": "1.8.7p2",
@@ -10797,6 +10748,78 @@
             ],
             "time": "2019-12-10T10:24:42+00:00"
         },
+        {
+            "name": "phpfastcache/riak-client",
+            "version": "3.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPSocialNetwork/riak-php-client.git",
+                "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9",
+                "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "ext-json": "*",
+                "php": ">=5.4"
+            },
+            "conflict": {
+                "basho/riak": "*"
+            },
+            "require-dev": {
+                "apigen/apigen": "4.1.*",
+                "phpunit/phpunit": "4.8.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Basho\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Georges.L",
+                    "email": "contact@geolim4.com",
+                    "homepage": "https://github.com/Geolim4",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Christopher Mancini",
+                    "email": "cmancini@basho.com",
+                    "homepage": "https://github.com/christophermancini",
+                    "role": "Former Lead Developer"
+                },
+                {
+                    "name": "Alex Moore",
+                    "email": "amoore@basho.com",
+                    "homepage": "https://github.com/alexmoore",
+                    "role": "Former Developer"
+                }
+            ],
+            "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)",
+            "homepage": "https://github.com/PHPSocialNetwork/riak-php-client",
+            "keywords": [
+                "basho",
+                "client",
+                "crdt",
+                "data",
+                "database",
+                "datatype",
+                "driver",
+                "kv",
+                "nosql",
+                "riak"
+            ],
+            "time": "2017-11-23T21:33:15+00:00"
+        },
         {
             "name": "phpmailer/phpmailer",
             "version": "v6.2.0",
@@ -11129,16 +11152,16 @@
         },
         {
             "name": "robrichards/xmlseclibs",
-            "version": "3.1.0",
+            "version": "3.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/robrichards/xmlseclibs.git",
-                "reference": "8d8e56ca7914440a8c60caff1a865e7dff1d9a5a"
+                "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/8d8e56ca7914440a8c60caff1a865e7dff1d9a5a",
-                "reference": "8d8e56ca7914440a8c60caff1a865e7dff1d9a5a",
+                "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
+                "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
                 "shasum": ""
             },
             "require": {
@@ -11163,53 +11186,83 @@
                 "xml",
                 "xmldsig"
             ],
-            "time": "2020-04-22T17:19:51+00:00"
+            "time": "2020-09-05T13:00:25+00:00"
+        },
+        {
+            "name": "simplesamlphp/composer-module-installer",
+            "version": "v1.1.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/composer-module-installer.git",
+                "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa",
+                "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.1|^2.0",
+                "simplesamlphp/simplesamlphp": "*"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin"
+            },
+            "autoload": {
+                "psr-0": {
+                    "SimpleSamlPhp\\Composer": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-only"
+            ],
+            "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.",
+            "time": "2020-08-25T19:04:33+00:00"
         },
         {
             "name": "simplesamlphp/saml2",
-            "version": "v3.4.5",
+            "version": "v4.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/simplesamlphp/saml2.git",
-                "reference": "acc47782592866423942dc30002c5220203ab466"
+                "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/acc47782592866423942dc30002c5220203ab466",
-                "reference": "acc47782592866423942dc30002c5220203ab466",
+                "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d4038b83be50ccd64ecdc0b7c68e66d63c899d2c",
+                "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-openssl": "*",
                 "ext-zlib": "*",
-                "php": ">=5.4",
-                "psr/log": "~1.0",
-                "robrichards/xmlseclibs": "^3.0.4",
-                "webmozart/assert": "^1.4"
+                "php": ">=7.1",
+                "psr/log": "~1.1",
+                "robrichards/xmlseclibs": "^3.1.0",
+                "webmozart/assert": "^1.5"
             },
             "require-dev": {
-                "mockery/mockery": "~0.9",
-                "phpmd/phpmd": "~2.6",
-                "phpunit/phpunit": "~5.7",
-                "sebastian/phpcpd": "~2.0",
-                "sensiolabs/security-checker": "~4.1",
-                "simplesamlphp/simplesamlphp-test-framework": "0.0.11",
-                "squizlabs/php_codesniffer": "~3.2"
+                "mockery/mockery": "~1.2",
+                "phpunit/phpunit": "^7.5",
+                "sebastian/phpcpd": "~4.1",
+                "sensiolabs/security-checker": "~6.0",
+                "simplesamlphp/simplesamlphp-test-framework": "~0.1.0",
+                "squizlabs/php_codesniffer": "~3.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "v3.1.x-dev"
+                    "dev-master": "v4.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "SAML2\\": "src/"
-                },
-                "files": [
-                    "src/_autoload.php"
-                ]
+                "psr-4": {
+                    "SAML2\\": "src/SAML2"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -11222,20 +11275,20 @@
                 }
             ],
             "description": "SAML2 PHP library from SimpleSAMLphp",
-            "time": "2020-05-14T16:38:12+00:00"
+            "time": "2021-01-28T21:35:22+00:00"
         },
         {
             "name": "simplesamlphp/simplesamlphp",
-            "version": "v1.17.8",
+            "version": "v1.18.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/simplesamlphp/simplesamlphp.git",
-                "reference": "295937ae8672278cad73ec2c78af3749426263de"
+                "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/295937ae8672278cad73ec2c78af3749426263de",
-                "reference": "295937ae8672278cad73ec2c78af3749426263de",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b",
+                "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b",
                 "shasum": ""
             },
             "require": {
@@ -11249,23 +11302,55 @@
                 "ext-spl": "*",
                 "ext-zlib": "*",
                 "gettext/gettext": "^4.6",
-                "jaimeperez/twig-configurable-i18n": "^2.0",
-                "php": ">=5.5",
+                "php": ">=5.6",
+                "phpmailer/phpmailer": "^6.0",
                 "robrichards/xmlseclibs": "^3.0.4",
-                "simplesamlphp/saml2": "^3.3",
+                "simplesamlphp/saml2": "^3.4 || ^4.0",
+                "simplesamlphp/simplesamlphp-module-adfs": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authorize": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authx509": "^0.9",
+                "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9",
+                "simplesamlphp/simplesamlphp-module-cas": "^0.9",
+                "simplesamlphp/simplesamlphp-module-cdc": "^0.9",
+                "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+                "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9",
+                "simplesamlphp/simplesamlphp-module-discopower": "^0.9",
+                "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0",
+                "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+                "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9",
+                "simplesamlphp/simplesamlphp-module-memcookie": "^1.2",
+                "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9",
+                "simplesamlphp/simplesamlphp-module-negotiate": "^0.9",
+                "simplesamlphp/simplesamlphp-module-oauth": "^0.9",
+                "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9",
+                "simplesamlphp/simplesamlphp-module-radius": "^0.9",
+                "simplesamlphp/simplesamlphp-module-riak": "^0.9",
+                "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9",
+                "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9",
+                "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9",
+                "simplesamlphp/simplesamlphp-module-statistics": "^0.9",
+                "simplesamlphp/twig-configurable-i18n": "^2.2",
                 "symfony/config": "^3.4 || ^4.0",
                 "symfony/dependency-injection": "^3.4 || ^4.0",
                 "symfony/http-foundation": "^3.4 || ^4.0",
                 "symfony/http-kernel": "^3.4 || ^4.0",
                 "symfony/routing": "^3.4 || ^4.0",
                 "symfony/yaml": "^3.4 || ^4.0",
-                "twig/twig": "~1.0 || ~2.0",
-                "whitehat101/apr1-md5": "~1.0"
+                "twig/twig": "~1.0 || ~2.0"
             },
             "require-dev": {
                 "ext-curl": "*",
                 "mikey179/vfsstream": "~1.6",
-                "phpunit/phpunit": "~4.8"
+                "phpunit/phpunit": "~5.7",
+                "sensiolabs/security-checker": "^5.0.3",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "~1.1.9"
             },
             "suggest": {
                 "ext-curl": "Needed in order to check for updates automatically",
@@ -11314,235 +11399,1617 @@
                 "sp",
                 "ws-federation"
             ],
-            "time": "2019-11-20T08:26:08+00:00"
+            "time": "2020-09-02T12:07:28+00:00"
         },
         {
-            "name": "stack/builder",
-            "version": "v1.0.5",
+            "name": "simplesamlphp/simplesamlphp-module-adfs",
+            "version": "v0.9.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/stackphp/builder.git",
-                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git",
+                "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
-                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237",
+                "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0",
-                "symfony/http-foundation": "~2.1|~3.0|~4.0",
-                "symfony/http-kernel": "~2.1|~3.0|~4.0"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "silex/silex": "~1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "<1.7"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
-                "psr-0": {
-                    "Stack": "src"
+                "psr-4": {
+                    "SimpleSAML\\Module\\adfs\\": "lib/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-2.1-or-later"
             ],
             "authors": [
                 {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Builder for stack middlewares based on HttpKernelInterface.",
+            "description": "A module that implements the WS-federation IDP",
             "keywords": [
-                "stack"
+                "adfs",
+                "simplesamlphp"
             ],
-            "time": "2017-11-18T14:57:29+00:00"
+            "time": "2020-03-31T14:29:24+00:00"
         },
         {
-            "name": "stecman/symfony-console-completion",
-            "version": "0.11.0",
+            "name": "simplesamlphp/simplesamlphp-module-authcrypt",
+            "version": "v0.9.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/stecman/symfony-console-completion.git",
-                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git",
+                "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
-                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/9a2c1a761e2d94394a4f2d3499fd6f0853899530",
+                "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2",
-                "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4",
+                "whitehat101/apr1-md5": "~1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "0.10.x-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
+                    "SimpleSAML\\Module\\authcrypt\\": "lib/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-2.1-or-later"
             ],
             "authors": [
                 {
-                    "name": "Stephen Holdaway",
-                    "email": "stephen@stecman.co.nz"
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
                 }
             ],
-            "description": "Automatic BASH completion for Symfony Console Component based applications.",
-            "time": "2019-11-24T17:03:06+00:00"
+            "description": "This module provides authentication against password hashes or .htpasswd files",
+            "keywords": [
+                "authcrypt",
+                "simplesamlphp"
+            ],
+            "time": "2021-01-08T09:09:33+00:00"
         },
         {
-            "name": "symfony-cmf/routing",
-            "version": "1.4.1",
+            "name": "simplesamlphp/simplesamlphp-module-authfacebook",
+            "version": "v0.9.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony-cmf/routing.git",
-                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git",
+                "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
-                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c",
+                "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.9|^7.0",
-                "psr/log": "1.*",
-                "symfony/http-kernel": "^2.2|3.*",
-                "symfony/routing": "^2.2|3.*"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "friendsofsymfony/jsrouting-bundle": "^1.1",
-                "symfony-cmf/testing": "^1.3",
-                "symfony/config": "^2.2|3.*",
-                "symfony/dependency-injection": "^2.0.5|3.*",
-                "symfony/event-dispatcher": "^2.1|3.*"
-            },
-            "suggest": {
-                "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Cmf\\Component\\Routing\\": ""
+                    "SimpleSAML\\Module\\authfacebook\\": "lib/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Symfony CMF Community",
-                    "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+                    "name": "Andjelko Horvat",
+                    "email": "comel@vingd.com"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
-            "homepage": "http://cmf.symfony.com",
+            "description": "A module that is able to authenticate against Facebook",
             "keywords": [
-                "database",
-                "routing"
+                "facebook",
+                "simplesamlphp"
             ],
-            "time": "2017-05-09T08:10:41+00:00"
+            "time": "2020-03-13T11:29:21+00:00"
         },
         {
-            "name": "symfony/class-loader",
-            "version": "v3.4.41",
+            "name": "simplesamlphp/simplesamlphp-module-authorize",
+            "version": "v0.9.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/class-loader.git",
-                "reference": "e4636a4f23f157278a19e5db160c63de0da297d8"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git",
+                "reference": "c2607a5252ee1256b50ce7795e35513b116998d4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8",
-                "reference": "e4636a4f23f157278a19e5db160c63de0da297d8",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4",
+                "reference": "c2607a5252ee1256b50ce7795e35513b116998d4",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "symfony/finder": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-apcu": "~1.1"
-            },
-            "suggest": {
-                "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\ClassLoader\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authorize\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Ernesto Revilla",
+                    "email": "erny@yaco.es"
                 }
             ],
-            "description": "Symfony ClassLoader Component",
-            "homepage": "https://symfony.com",
-            "time": "2020-03-15T09:38:08+00:00"
+            "description": "This module provides a user authorization filter based on attribute matching",
+            "keywords": [
+                "authorize",
+                "simplesamlphp"
+            ],
+            "time": "2020-02-25T15:16:57+00:00"
         },
         {
-            "name": "symfony/config",
-            "version": "v4.4.17",
+            "name": "simplesamlphp/simplesamlphp-module-authtwitter",
+            "version": "v0.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/config.git",
-                "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git",
+                "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
-                "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a",
+                "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1.3",
-                "symfony/filesystem": "^3.4|^4.0|^5.0",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": ">=5.5",
+                "simplesamlphp/composer-module-installer": "~1.0",
+                "simplesamlphp/simplesamlphp-module-oauth": "^0.9"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.35",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\authtwitter\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able to perform authentication against Twitter",
+            "keywords": [
+                "simplesamlphp",
+                "twitter"
+            ],
+            "time": "2019-12-03T09:00:09+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-authwindowslive",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git",
+                "reference": "f40aecec6c0adaedb6693309840c98cec783876e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e",
+                "reference": "f40aecec6c0adaedb6693309840c98cec783876e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\authwindowslive\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able to perform authentication against Windows Live",
+            "keywords": [
+                "live",
+                "simplesamlphp",
+                "windows",
+                "windowslive"
+            ],
+            "time": "2019-12-03T09:01:13+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-authx509",
+            "version": "v0.9.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git",
+                "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/66525b1ec4145ec8d0d0e9db4534624b6be4c1fb",
+                "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9"
+            },
+            "require-dev": {
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.15"
+            },
+            "type": "simplesamlphp-module",
+            "extra": {
+                "ssp-mixedcase-module-name": "authX509"
+            },
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\authX509\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Joost van Dijk",
+                    "email": "Joost.vanDijk@surfnet.nl"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able to authenticate users based on X509 client certificates",
+            "keywords": [
+                "simplesamlphp",
+                "x509"
+            ],
+            "time": "2020-12-15T23:06:47+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-authyubikey",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git",
+                "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2",
+                "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "extra": {
+                "ssp-mixedcase-module-name": "authYubikey"
+            },
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\modules\\yubikey\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able to authenticate against YubiKey",
+            "keywords": [
+                "authyubikey",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T08:52:49+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-cas",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git",
+                "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e",
+                "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\cas\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "A module that provides CAS authentication",
+            "keywords": [
+                "cas",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T09:03:06+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-cdc",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git",
+                "reference": "16a5bfac7299e04e5feb472af328e07598708166"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166",
+                "reference": "16a5bfac7299e04e5feb472af328e07598708166",
+                "shasum": ""
+            },
+            "require": {
+                "simplesamlphp/composer-module-installer": ">=1.1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\cdc\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                },
+                {
+                    "name": "Jaime Perez Crespo",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "A SimpleSAMLphp module that allows integration with CDC",
+            "homepage": "https://simplesamlphp.org/",
+            "keywords": [
+                "cdc",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T09:04:11+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-consent",
+            "version": "v0.9.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git",
+                "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d",
+                "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "<1.7"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\consent\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "lavmrk@gmail.com"
+                }
+            ],
+            "description": "A module that will ask for user consent before releasing attributes",
+            "keywords": [
+                "consent",
+                "simplesamlphp"
+            ],
+            "time": "2020-06-15T14:26:23+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-consentadmin",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git",
+                "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1",
+                "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "extra": {
+                "ssp-mixedcase-module-name": "consentAdmin"
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Jacob Christiansen",
+                    "email": "jach@wayf.dk"
+                },
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                }
+            ],
+            "description": "A module that allows users to manage their consent",
+            "keywords": [
+                "consentadmin",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T09:06:40+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-discopower",
+            "version": "v0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git",
+                "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb",
+                "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4 <1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\modules\\discopower\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed",
+            "keywords": [
+                "discopower",
+                "discovery",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-13T07:51:43+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git",
+                "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708",
+                "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\exampleattributeserver\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "An example for SAML attributes queries",
+            "keywords": [
+                "exampleattributeserver",
+                "simplesamlphp"
+            ],
+            "time": "2019-05-28T12:37:15+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-expirycheck",
+            "version": "v0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git",
+                "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20",
+                "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\expirycheck\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Alex Mihičinac",
+                    "email": "alexm@arnes.si"
+                }
+            ],
+            "description": "The expirycheck module validates user's expiry date",
+            "keywords": [
+                "expirycheck",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-14T13:20:46+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-ldap",
+            "version": "v0.9.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git",
+                "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77",
+                "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "suggest": {
+                "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\ldap\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that provides authentication against LDAP stores",
+            "keywords": [
+                "ldap",
+                "simplesamlphp"
+            ],
+            "time": "2020-09-16T21:09:07+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-memcachemonitor",
+            "version": "v0.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git",
+                "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/900b5c6b59913d9013b8dae090841a127ae55ae5",
+                "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "~0.0.6"
+            },
+            "type": "simplesamlphp-module",
+            "extra": {
+                "ssp-mixedcase-module-name": "memcacheMonitor"
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able display usage statistics of a memcache(d) store",
+            "keywords": [
+                "memcachemonitor",
+                "simplesamlphp"
+            ],
+            "time": "2021-01-25T15:44:44+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-memcookie",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git",
+                "reference": "39535304e8d464b7baa1e82cb441fa432947ff57"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57",
+                "reference": "39535304e8d464b7baa1e82cb441fa432947ff57",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": ">=1.1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.6"
+            },
+            "type": "simplesamlphp-module",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                },
+                {
+                    "name": "Jaime Perez Crespo",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.",
+            "homepage": "https://simplesamlphp.org/",
+            "keywords": [
+                "Auth MemCookie",
+                "apache",
+                "cookies",
+                "simplesamlphp"
+            ],
+            "time": "2019-08-08T18:33:47+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-metarefresh",
+            "version": "v0.9.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git",
+                "reference": "e284306a7097297765b5b78a4e28f19f18d4e001"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001",
+                "reference": "e284306a7097297765b5b78a4e28f19f18d4e001",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.18"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\metarefresh\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "The metarefresh module will download and parse metadata documents and store them locally",
+            "keywords": [
+                "metarefresh",
+                "simplesamlphp"
+            ],
+            "time": "2020-07-31T14:43:37+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-negotiate",
+            "version": "v0.9.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git",
+                "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/db05ff40399c66e3f14697a8162da6b2fbdab47d",
+                "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "sensiolabs/security-checker": "^5.0.3",
+                "simplesamlphp/simplesamlphp": "dev-testing-1.18",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "suggest": {
+                "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\negotiate\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism",
+            "keywords": [
+                "negotiate",
+                "simplesamlphp"
+            ],
+            "time": "2021-01-22T13:36:09+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-oauth",
+            "version": "v0.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git",
+                "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61",
+                "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61",
+                "shasum": ""
+            },
+            "require": {
+                "simplesamlphp/composer-module-installer": ">=1.1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.36",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                },
+                {
+                    "name": "Jaime Perez Crespo",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "A SimpleSAMLphp module that allows integration with OAuth1,",
+            "homepage": "https://simplesamlphp.org/",
+            "keywords": [
+                "oauth1",
+                "simplesamlphp"
+            ],
+            "time": "2020-04-29T19:37:43+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-preprodwarning",
+            "version": "v0.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git",
+                "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638",
+                "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "^1.4"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\preprodwarning\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "Display a warning when using a pre-production environment",
+            "keywords": [
+                "preprodwarning",
+                "simplesamlphp"
+            ],
+            "time": "2020-04-09T13:05:27+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-radius",
+            "version": "v0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git",
+                "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d",
+                "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.7"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\radius\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "A module that is able perform authentication against a RADIUS server",
+            "keywords": [
+                "radius",
+                "simplesamlphp"
+            ],
+            "time": "2019-10-03T18:13:07+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-riak",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git",
+                "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991",
+                "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "phpfastcache/riak-client": "^3.4",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\riak\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able to store key/value pairs in a Riak store",
+            "keywords": [
+                "riak",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T08:28:45+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-sanitycheck",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git",
+                "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a",
+                "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\sanitycheck\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "Perform sanity checks on configuration",
+            "keywords": [
+                "sanitycheck",
+                "simplesamlphp"
+            ],
+            "time": "2020-05-07T11:34:29+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-smartattributes",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git",
+                "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6",
+                "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\smartattributes\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.",
+            "keywords": [
+                "simplesamlphp",
+                "smartattributes"
+            ],
+            "time": "2019-12-03T09:24:09+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-sqlauth",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git",
+                "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b",
+                "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "^1.4"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\sqlauth\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "This is a authentication module for authenticating a user against a SQL database",
+            "keywords": [
+                "simplesamlphp",
+                "sqlauth"
+            ],
+            "time": "2019-12-03T09:07:09+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-statistics",
+            "version": "v0.9.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git",
+                "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/03fb6bdbbf5ce0a0cb257208db79aacac227ac10",
+                "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "^1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.12"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\statistics\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "The SimpleSAMLphp statistics module",
+            "keywords": [
+                "simplesamlphp",
+                "statistics"
+            ],
+            "time": "2021-01-25T15:15:26+00:00"
+        },
+        {
+            "name": "simplesamlphp/twig-configurable-i18n",
+            "version": "v2.3.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git",
+                "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a",
+                "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1",
+                "twig/extensions": "@dev"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.5",
+                "sensiolabs/security-checker": "~6.0.3",
+                "simplesamlphp/simplesamlphp-test-framework": "~0.1.2",
+                "squizlabs/php_codesniffer": "^3.5",
+                "twig/twig": "^2.13"
+            },
+            "type": "project",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\TwigConfigurableI18n\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1"
+            ],
+            "authors": [
+                {
+                    "name": "Jaime Perez",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
+            "keywords": [
+                "extension",
+                "gettext",
+                "i18n",
+                "internationalization",
+                "translation",
+                "twig"
+            ],
+            "time": "2020-08-27T12:51:10+00:00"
+        },
+        {
+            "name": "stack/builder",
+            "version": "v1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/stackphp/builder.git",
+                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+                "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "symfony/http-foundation": "~2.1|~3.0|~4.0",
+                "symfony/http-kernel": "~2.1|~3.0|~4.0"
+            },
+            "require-dev": {
+                "silex/silex": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Stack": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                }
+            ],
+            "description": "Builder for stack middlewares based on HttpKernelInterface.",
+            "keywords": [
+                "stack"
+            ],
+            "time": "2017-11-18T14:57:29+00:00"
+        },
+        {
+            "name": "stecman/symfony-console-completion",
+            "version": "0.11.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/stecman/symfony-console-completion.git",
+                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
+                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2",
+                "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Stephen Holdaway",
+                    "email": "stephen@stecman.co.nz"
+                }
+            ],
+            "description": "Automatic BASH completion for Symfony Console Component based applications.",
+            "time": "2019-11-24T17:03:06+00:00"
+        },
+        {
+            "name": "symfony-cmf/routing",
+            "version": "1.4.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony-cmf/routing.git",
+                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+                "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.9|^7.0",
+                "psr/log": "1.*",
+                "symfony/http-kernel": "^2.2|3.*",
+                "symfony/routing": "^2.2|3.*"
+            },
+            "require-dev": {
+                "friendsofsymfony/jsrouting-bundle": "^1.1",
+                "symfony-cmf/testing": "^1.3",
+                "symfony/config": "^2.2|3.*",
+                "symfony/dependency-injection": "^2.0.5|3.*",
+                "symfony/event-dispatcher": "^2.1|3.*"
+            },
+            "suggest": {
+                "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Cmf\\Component\\Routing\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony CMF Community",
+                    "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+                }
+            ],
+            "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
+            "homepage": "http://cmf.symfony.com",
+            "keywords": [
+                "database",
+                "routing"
+            ],
+            "time": "2017-05-09T08:10:41+00:00"
+        },
+        {
+            "name": "symfony/class-loader",
+            "version": "v3.4.41",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/class-loader.git",
+                "reference": "e4636a4f23f157278a19e5db160c63de0da297d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8",
+                "reference": "e4636a4f23f157278a19e5db160c63de0da297d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8"
+            },
+            "require-dev": {
+                "symfony/finder": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-apcu": "~1.1"
+            },
+            "suggest": {
+                "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\ClassLoader\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony ClassLoader Component",
+            "homepage": "https://symfony.com",
+            "time": "2020-03-15T09:38:08+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v4.4.19",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/2c4c7827a7e143f5cf375666641b0f448eab8802",
+                "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
@@ -11580,7 +13047,7 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Config Component",
+            "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
             "homepage": "https://symfony.com",
             "funding": [
                 {
@@ -11596,7 +13063,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-11-16T11:15:53+00:00"
+            "time": "2021-01-27T09:09:26+00:00"
         },
         {
             "name": "symfony/console",
@@ -11981,16 +13448,16 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.4.17",
+            "version": "v4.4.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2"
+                "reference": "83a6feed14846d2d9f3916adbaf838819e4e3380"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
-                "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/83a6feed14846d2d9f3916adbaf838819e4e3380",
+                "reference": "83a6feed14846d2d9f3916adbaf838819e4e3380",
                 "shasum": ""
             },
             "require": {
@@ -12020,7 +13487,7 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Filesystem Component",
+            "description": "Provides basic utilities for the filesystem",
             "homepage": "https://symfony.com",
             "funding": [
                 {
@@ -12036,7 +13503,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-11-11T22:20:15+00:00"
+            "time": "2021-01-27T09:09:26+00:00"
         },
         {
             "name": "symfony/finder",
@@ -13472,30 +14939,31 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.9.1",
+            "version": "1.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozarts/assert.git",
-                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+                "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
-                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "url": "https://api.github.com/repos/webmozarts/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
+                "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "php": "^5.3.3 || ^7.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
-            "conflict": {
-                "phpstan/phpstan": "<0.12.20",
-                "vimeo/psalm": "<3.9.1"
-            },
             "require-dev": {
                 "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -13517,7 +14985,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2020-07-08T17:02:28+00:00"
+            "time": "2019-08-24T08:43:50+00:00"
         },
         {
             "name": "webmozart/path-util",
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 817a87ee3d..b1fe89f10c 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -90,6 +90,124 @@
     'Asm89\\Stack\\Cors' => $vendorDir . '/asm89/stack-cors/src/Asm89/Stack/Cors.php',
     'Asm89\\Stack\\CorsService' => $vendorDir . '/asm89/stack-cors/src/Asm89/Stack/CorsService.php',
     'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
+    'Basho\\Riak' => $vendorDir . '/phpfastcache/riak-client/src/Riak.php',
+    'Basho\\Riak\\Api' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Api.php',
+    'Basho\\Riak\\ApiInterface' => $vendorDir . '/phpfastcache/riak-client/src/Riak/ApiInterface.php',
+    'Basho\\Riak\\Api\\Exception' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Api/Exception.php',
+    'Basho\\Riak\\Api\\Http' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Api/Http.php',
+    'Basho\\Riak\\Api\\Http\\Translator\\ObjectResponse' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Api/Http/Translator/ObjectResponse.php',
+    'Basho\\Riak\\Api\\Http\\Translator\\SecondaryIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Api/Http/Translator/SecondaryIndex.php',
+    'Basho\\Riak\\Bucket' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Bucket.php',
+    'Basho\\Riak\\Command' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command.php',
+    'Basho\\Riak\\CommandInterface' => $vendorDir . '/phpfastcache/riak-client/src/Riak/CommandInterface.php',
+    'Basho\\Riak\\Command\\Bucket\\Delete' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Delete.php',
+    'Basho\\Riak\\Command\\Bucket\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Fetch.php',
+    'Basho\\Riak\\Command\\Bucket\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Response.php',
+    'Basho\\Riak\\Command\\Bucket\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Store.php',
+    'Basho\\Riak\\Command\\Builder' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder.php',
+    'Basho\\Riak\\Command\\BuilderInterface' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/BuilderInterface.php',
+    'Basho\\Riak\\Command\\Builder\\BucketTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/BucketTrait.php',
+    'Basho\\Riak\\Command\\Builder\\DeleteObject' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/DeleteObject.php',
+    'Basho\\Riak\\Command\\Builder\\Exception' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Exception.php',
+    'Basho\\Riak\\Command\\Builder\\FetchBucketProperties' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchBucketProperties.php',
+    'Basho\\Riak\\Command\\Builder\\FetchCounter' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchCounter.php',
+    'Basho\\Riak\\Command\\Builder\\FetchHll' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchHll.php',
+    'Basho\\Riak\\Command\\Builder\\FetchMap' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchMap.php',
+    'Basho\\Riak\\Command\\Builder\\FetchObject' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchObject.php',
+    'Basho\\Riak\\Command\\Builder\\FetchPreflist' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchPreflist.php',
+    'Basho\\Riak\\Command\\Builder\\FetchSet' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchSet.php',
+    'Basho\\Riak\\Command\\Builder\\FetchStats' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchStats.php',
+    'Basho\\Riak\\Command\\Builder\\IncrementCounter' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/IncrementCounter.php',
+    'Basho\\Riak\\Command\\Builder\\IndexTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/IndexTrait.php',
+    'Basho\\Riak\\Command\\Builder\\ListObjects' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/ListObjects.php',
+    'Basho\\Riak\\Command\\Builder\\LocationTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/LocationTrait.php',
+    'Basho\\Riak\\Command\\Builder\\MapReduce\\FetchObjects' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/MapReduce/FetchObjects.php',
+    'Basho\\Riak\\Command\\Builder\\ObjectTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/ObjectTrait.php',
+    'Basho\\Riak\\Command\\Builder\\Ping' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Ping.php',
+    'Basho\\Riak\\Command\\Builder\\QueryIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/QueryIndex.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\AssociateIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/AssociateIndex.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\DeleteIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DeleteIndex.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\DissociateIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DissociateIndex.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\FetchIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchIndex.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\FetchObjects' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchObjects.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\FetchSchema' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchSchema.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\StoreIndex' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreIndex.php',
+    'Basho\\Riak\\Command\\Builder\\Search\\StoreSchema' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreSchema.php',
+    'Basho\\Riak\\Command\\Builder\\SetBucketProperties' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/SetBucketProperties.php',
+    'Basho\\Riak\\Command\\Builder\\StoreObject' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/StoreObject.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\DeleteRow' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DeleteRow.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\DescribeTable' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DescribeTable.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\FetchRow' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/FetchRow.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\KeyTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/KeyTrait.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\Query' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/Query.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\RowsTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/RowsTrait.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\StoreRows' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/StoreRows.php',
+    'Basho\\Riak\\Command\\Builder\\TimeSeries\\TableTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/TableTrait.php',
+    'Basho\\Riak\\Command\\Builder\\UpdateGSet' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateGSet.php',
+    'Basho\\Riak\\Command\\Builder\\UpdateHll' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateHll.php',
+    'Basho\\Riak\\Command\\Builder\\UpdateMap' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateMap.php',
+    'Basho\\Riak\\Command\\Builder\\UpdateSet' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateSet.php',
+    'Basho\\Riak\\Command\\DataType\\Counter\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Fetch.php',
+    'Basho\\Riak\\Command\\DataType\\Counter\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Response.php',
+    'Basho\\Riak\\Command\\DataType\\Counter\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Store.php',
+    'Basho\\Riak\\Command\\DataType\\GSet\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/GSet/Store.php',
+    'Basho\\Riak\\Command\\DataType\\Hll\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Fetch.php',
+    'Basho\\Riak\\Command\\DataType\\Hll\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Response.php',
+    'Basho\\Riak\\Command\\DataType\\Hll\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Store.php',
+    'Basho\\Riak\\Command\\DataType\\Map\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Fetch.php',
+    'Basho\\Riak\\Command\\DataType\\Map\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Response.php',
+    'Basho\\Riak\\Command\\DataType\\Map\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Store.php',
+    'Basho\\Riak\\Command\\DataType\\Set\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Fetch.php',
+    'Basho\\Riak\\Command\\DataType\\Set\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Response.php',
+    'Basho\\Riak\\Command\\DataType\\Set\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Store.php',
+    'Basho\\Riak\\Command\\Exception' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Exception.php',
+    'Basho\\Riak\\Command\\Indexes\\Query' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Indexes/Query.php',
+    'Basho\\Riak\\Command\\Indexes\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Indexes/Response.php',
+    'Basho\\Riak\\Command\\KVObject' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject.php',
+    'Basho\\Riak\\Command\\KVObject\\Delete' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Delete.php',
+    'Basho\\Riak\\Command\\KVObject\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Fetch.php',
+    'Basho\\Riak\\Command\\KVObject\\FetchPreflist' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/FetchPreflist.php',
+    'Basho\\Riak\\Command\\KVObject\\Keys\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Fetch.php',
+    'Basho\\Riak\\Command\\KVObject\\Keys\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Response.php',
+    'Basho\\Riak\\Command\\KVObject\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Response.php',
+    'Basho\\Riak\\Command\\KVObject\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Store.php',
+    'Basho\\Riak\\Command\\MapReduce\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/MapReduce/Fetch.php',
+    'Basho\\Riak\\Command\\MapReduce\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/MapReduce/Response.php',
+    'Basho\\Riak\\Command\\Ping' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Ping.php',
+    'Basho\\Riak\\Command\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Response.php',
+    'Basho\\Riak\\Command\\Search\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Fetch.php',
+    'Basho\\Riak\\Command\\Search\\Index\\Delete' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Delete.php',
+    'Basho\\Riak\\Command\\Search\\Index\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Fetch.php',
+    'Basho\\Riak\\Command\\Search\\Index\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Response.php',
+    'Basho\\Riak\\Command\\Search\\Index\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Store.php',
+    'Basho\\Riak\\Command\\Search\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Response.php',
+    'Basho\\Riak\\Command\\Search\\Schema\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Fetch.php',
+    'Basho\\Riak\\Command\\Search\\Schema\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Response.php',
+    'Basho\\Riak\\Command\\Search\\Schema\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Store.php',
+    'Basho\\Riak\\Command\\Stats' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Stats.php',
+    'Basho\\Riak\\Command\\Stats\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/Stats/Response.php',
+    'Basho\\Riak\\Command\\TimeSeries\\Delete' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Delete.php',
+    'Basho\\Riak\\Command\\TimeSeries\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Fetch.php',
+    'Basho\\Riak\\Command\\TimeSeries\\Query\\Fetch' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Fetch.php',
+    'Basho\\Riak\\Command\\TimeSeries\\Query\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Response.php',
+    'Basho\\Riak\\Command\\TimeSeries\\Response' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Response.php',
+    'Basho\\Riak\\Command\\TimeSeries\\Store' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Store.php',
+    'Basho\\Riak\\DataObject' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataObject.php',
+    'Basho\\Riak\\DataType' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataType.php',
+    'Basho\\Riak\\DataType\\Counter' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataType/Counter.php',
+    'Basho\\Riak\\DataType\\Exception' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataType/Exception.php',
+    'Basho\\Riak\\DataType\\Hll' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataType/Hll.php',
+    'Basho\\Riak\\DataType\\Map' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataType/Map.php',
+    'Basho\\Riak\\DataType\\Set' => $vendorDir . '/phpfastcache/riak-client/src/Riak/DataType/Set.php',
+    'Basho\\Riak\\Exception' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Exception.php',
+    'Basho\\Riak\\HeadersTrait' => $vendorDir . '/phpfastcache/riak-client/src/Riak/HeadersTrait.php',
+    'Basho\\Riak\\Location' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Location.php',
+    'Basho\\Riak\\Node' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Node.php',
+    'Basho\\Riak\\Node\\Builder' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Node/Builder.php',
+    'Basho\\Riak\\Node\\Builder\\Exception' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Node/Builder/Exception.php',
+    'Basho\\Riak\\Node\\Config' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Node/Config.php',
+    'Basho\\Riak\\Search\\Doc' => $vendorDir . '/phpfastcache/riak-client/src/Riak/Search/Doc.php',
+    'Basho\\Riak\\TimeSeries\\Cell' => $vendorDir . '/phpfastcache/riak-client/src/Riak/TimeSeries/Cell.php',
     'CommerceGuys\\Addressing\\AbstractEnum' => $vendorDir . '/commerceguys/addressing/src/AbstractEnum.php',
     'CommerceGuys\\Addressing\\Address' => $vendorDir . '/commerceguys/addressing/src/Address.php',
     'CommerceGuys\\Addressing\\AddressFormat\\AddressField' => $vendorDir . '/commerceguys/addressing/src/AddressFormat/AddressField.php',
@@ -3303,10 +3421,6 @@
     'Interop\\Container\\ContainerInterface' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php',
     'Interop\\Container\\Exception\\ContainerException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php',
     'Interop\\Container\\Exception\\NotFoundException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php',
-    'JaimePerez\\TwigConfigurableI18n\\Twig\\Environment' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Environment.php',
-    'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
-    'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
-    'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
     'Laminas\\Diactoros\\AbstractSerializer' => $vendorDir . '/laminas/laminas-diactoros/src/AbstractSerializer.php',
     'Laminas\\Diactoros\\CallbackStream' => $vendorDir . '/laminas/laminas-diactoros/src/CallbackStream.php',
     'Laminas\\Diactoros\\Exception\\DeprecatedMethodException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/DeprecatedMethodException.php',
@@ -4196,9 +4310,6 @@
     'SAML2\\Certificate\\Exception\\InvalidCertificateStructureException' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidCertificateStructureException.php',
     'SAML2\\Certificate\\Exception\\InvalidKeyUsageException' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidKeyUsageException.php',
     'SAML2\\Certificate\\Exception\\NoKeysFoundException' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/Exception/NoKeysFoundException.php',
-    'SAML2\\Certificate\\Fingerprint' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/Fingerprint.php',
-    'SAML2\\Certificate\\FingerprintCollection' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintCollection.php',
-    'SAML2\\Certificate\\FingerprintLoader' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintLoader.php',
     'SAML2\\Certificate\\Key' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/Key.php',
     'SAML2\\Certificate\\KeyCollection' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/KeyCollection.php',
     'SAML2\\Certificate\\KeyLoader' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Certificate/KeyLoader.php',
@@ -4254,7 +4365,6 @@
     'SAML2\\SOAPClient' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/SOAPClient.php',
     'SAML2\\Signature\\AbstractChainedValidator' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Signature/AbstractChainedValidator.php',
     'SAML2\\Signature\\ChainedValidator' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Signature/ChainedValidator.php',
-    'SAML2\\Signature\\FingerprintValidator' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Signature/FingerprintValidator.php',
     'SAML2\\Signature\\MissingConfigurationException' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Signature/MissingConfigurationException.php',
     'SAML2\\Signature\\PublicKeyValidator' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Signature/PublicKeyValidator.php',
     'SAML2\\Signature\\Validator' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/Signature/Validator.php',
@@ -4320,10 +4430,8 @@
     'SAML2\\XML\\shibmd\\Scope' => $vendorDir . '/simplesamlphp/saml2/src/SAML2/XML/shibmd/Scope.php',
     'SelfUpdate\\SelfUpdateCommand' => $vendorDir . '/consolidation/self-update/src/SelfUpdateCommand.php',
     'SessionUpdateTimestampHandlerInterface' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
-    'SimpleSAML\\AuthMemCookie' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/AuthMemCookie.php',
     'SimpleSAML\\Auth\\AuthenticationFactory' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/AuthenticationFactory.php',
-    'SimpleSAML\\Auth\\DefaultAuth' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Default.php',
-    'SimpleSAML\\Auth\\LDAP' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/LDAP.php',
+    'SimpleSAML\\Auth\\DefaultAuth' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/DefaultAuth.php',
     'SimpleSAML\\Auth\\ProcessingChain' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingChain.php',
     'SimpleSAML\\Auth\\ProcessingFilter' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingFilter.php',
     'SimpleSAML\\Auth\\Simple' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Simple.php',
@@ -4383,6 +4491,61 @@
     'SimpleSAML\\Metadata\\Sources\\MDQ' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Sources/MDQ.php',
     'SimpleSAML\\Module' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module.php',
     'SimpleSAML\\Module\\ControllerResolver' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module/ControllerResolver.php',
+    'SimpleSAML\\Module\\adfs\\AdfsController' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib/AdfsController.php',
+    'SimpleSAML\\Module\\adfs\\IdP\\ADFS' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib/IdP/ADFS.php',
+    'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\Constants' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Constants.php',
+    'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\Endpoint' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Endpoint.php',
+    'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\SecurityTokenServiceType' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/SecurityTokenServiceType.php',
+    'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\TokenTypesOffered' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/TokenTypesOffered.php',
+    'SimpleSAML\\Module\\authX509\\Auth\\Process\\ExpiryWarning' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Process/ExpiryWarning.php',
+    'SimpleSAML\\Module\\authX509\\Auth\\Source\\X509userCert' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Source/X509userCert.php',
+    'SimpleSAML\\Module\\authX509\\Controller\\ExpiryWarning' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authX509/lib/Controller/ExpiryWarning.php',
+    'SimpleSAML\\Module\\authcrypt\\Auth\\Source\\Hash' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Hash.php',
+    'SimpleSAML\\Module\\authcrypt\\Auth\\Source\\Htpasswd' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Htpasswd.php',
+    'SimpleSAML\\Module\\authfacebook\\Auth\\Source\\Facebook' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Auth/Source/Facebook.php',
+    'SimpleSAML\\Module\\authfacebook\\Facebook' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Facebook.php',
+    'SimpleSAML\\Module\\authorize\\Auth\\Process\\Authorize' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authorize/lib/Auth/Process/Authorize.php',
+    'SimpleSAML\\Module\\authtwitter\\Auth\\Source\\Twitter' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authtwitter/lib/Auth/Source/Twitter.php',
+    'SimpleSAML\\Module\\authwindowslive\\Auth\\Source\\LiveID' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/authwindowslive/lib/Auth/Source/LiveID.php',
+    'SimpleSAML\\Module\\cas\\Auth\\Source\\CAS' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/cas/lib/Auth/Source/CAS.php',
+    'SimpleSAML\\Module\\cdc\\Client' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/cdc/lib/Client.php',
+    'SimpleSAML\\Module\\cdc\\Server' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/cdc/lib/Server.php',
+    'SimpleSAML\\Module\\consent\\Auth\\Process\\Consent' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/consent/lib/Auth/Process/Consent.php',
+    'SimpleSAML\\Module\\consent\\Consent\\Store\\Cookie' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Cookie.php',
+    'SimpleSAML\\Module\\consent\\Consent\\Store\\Database' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Database.php',
+    'SimpleSAML\\Module\\consent\\Logout' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/consent/lib/Logout.php',
+    'SimpleSAML\\Module\\consent\\Store' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/consent/lib/Store.php',
+    'SimpleSAML\\Module\\expirycheck\\Auth\\Process\\ExpiryDate' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/expirycheck/lib/Auth/Process/ExpiryDate.php',
+    'SimpleSAML\\Module\\ldap\\Auth\\Ldap' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Ldap.php',
+    'SimpleSAML\\Module\\ldap\\Auth\\Process\\AttributeAddFromLDAP' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddFromLDAP.php',
+    'SimpleSAML\\Module\\ldap\\Auth\\Process\\AttributeAddUsersGroups' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddUsersGroups.php',
+    'SimpleSAML\\Module\\ldap\\Auth\\Process\\BaseFilter' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/BaseFilter.php',
+    'SimpleSAML\\Module\\ldap\\Auth\\Source\\LDAP' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Source/LDAP.php',
+    'SimpleSAML\\Module\\ldap\\Auth\\Source\\LDAPMulti' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Source/LDAPMulti.php',
+    'SimpleSAML\\Module\\ldap\\ConfigHelper' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib/ConfigHelper.php',
+    'SimpleSAML\\Module\\metarefresh\\ARP' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/metarefresh/lib/ARP.php',
+    'SimpleSAML\\Module\\metarefresh\\MetaLoader' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/metarefresh/lib/MetaLoader.php',
+    'SimpleSAML\\Module\\negotiate\\Auth\\Source\\Negotiate' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/negotiate/lib/Auth/Source/Negotiate.php',
+    'SimpleSAML\\Module\\preprodwarning\\Auth\\Process\\Warning' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/preprodwarning/lib/Auth/Process/Warning.php',
+    'SimpleSAML\\Module\\radius\\Auth\\Source\\Radius' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/radius/lib/Auth/Source/Radius.php',
+    'SimpleSAML\\Module\\riak\\Store\\Riak' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Riak.php',
+    'SimpleSAML\\Module\\smartattributes\\Auth\\Process\\SmartID' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartID.php',
+    'SimpleSAML\\Module\\smartattributes\\Auth\\Process\\SmartName' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartName.php',
+    'SimpleSAML\\Module\\statistics\\AccessCheck' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/AccessCheck.php',
+    'SimpleSAML\\Module\\statistics\\Aggregator' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Aggregator.php',
+    'SimpleSAML\\Module\\statistics\\DateHandler' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandler.php',
+    'SimpleSAML\\Module\\statistics\\DateHandlerMonth' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandlerMonth.php',
+    'SimpleSAML\\Module\\statistics\\Graph\\GoogleCharts' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Graph/GoogleCharts.php',
+    'SimpleSAML\\Module\\statistics\\LogCleaner' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/LogCleaner.php',
+    'SimpleSAML\\Module\\statistics\\LogParser' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/LogParser.php',
+    'SimpleSAML\\Module\\statistics\\RatioDataset' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/RatioDataset.php',
+    'SimpleSAML\\Module\\statistics\\Ruleset' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Ruleset.php',
+    'SimpleSAML\\Module\\statistics\\StatDataset' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/StatDataset.php',
+    'SimpleSAML\\Module\\statistics\\StatisticsController' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/StatisticsController.php',
+    'SimpleSAML\\Module\\statistics\\Statistics\\FieldPresentation\\Base' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Base.php',
+    'SimpleSAML\\Module\\statistics\\Statistics\\FieldPresentation\\Entity' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Entity.php',
+    'SimpleSAML\\Module\\statistics\\Statistics\\Rulesets\\BaseRule' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/BaseRule.php',
+    'SimpleSAML\\Module\\statistics\\Statistics\\Rulesets\\Ratio' => $vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/Ratio.php',
     'SimpleSAML\\Session' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Session.php',
     'SimpleSAML\\SessionHandler' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandler.php',
     'SimpleSAML\\SessionHandlerCookie' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerCookie.php',
@@ -4394,6 +4557,10 @@
     'SimpleSAML\\Store\\Memcache' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Memcache.php',
     'SimpleSAML\\Store\\Redis' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Redis.php',
     'SimpleSAML\\Store\\SQL' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/SQL.php',
+    'SimpleSAML\\TwigConfigurableI18n\\Twig\\Environment' => $vendorDir . '/simplesamlphp/twig-configurable-i18n/src/Twig/Environment.php',
+    'SimpleSAML\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => $vendorDir . '/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
+    'SimpleSAML\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => $vendorDir . '/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
+    'SimpleSAML\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => $vendorDir . '/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
     'SimpleSAML\\Utilities' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utilities.php',
     'SimpleSAML\\Utils\\Arrays' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Arrays.php',
     'SimpleSAML\\Utils\\Attributes' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Attributes.php',
@@ -4402,6 +4569,7 @@
     'SimpleSAML\\Utils\\Config' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config.php',
     'SimpleSAML\\Utils\\Config\\Metadata' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config/Metadata.php',
     'SimpleSAML\\Utils\\Crypto' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Crypto.php',
+    'SimpleSAML\\Utils\\EMail' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/EMail.php',
     'SimpleSAML\\Utils\\HTTP' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HTTP.php',
     'SimpleSAML\\Utils\\HttpAdapter' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HttpAdapter.php',
     'SimpleSAML\\Utils\\Net' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Net.php',
@@ -4409,7 +4577,6 @@
     'SimpleSAML\\Utils\\System' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/System.php',
     'SimpleSAML\\Utils\\Time' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Time.php',
     'SimpleSAML\\Utils\\XML' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/XML.php',
-    'SimpleSAML\\XHTML\\EMail' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/EMail.php',
     'SimpleSAML\\XHTML\\IdPDisco' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/IdPDisco.php',
     'SimpleSAML\\XHTML\\Template' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/Template.php',
     'SimpleSAML\\XHTML\\TemplateControllerInterface' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateControllerInterface.php',
@@ -4420,6 +4587,8 @@
     'SimpleSAML\\XML\\Shib13\\AuthnResponse' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnResponse.php',
     'SimpleSAML\\XML\\Signer' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Signer.php',
     'SimpleSAML\\XML\\Validator' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Validator.php',
+    'SimpleSamlPhp\\Composer\\ModuleInstaller' => $vendorDir . '/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstaller.php',
+    'SimpleSamlPhp\\Composer\\ModuleInstallerPlugin' => $vendorDir . '/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstallerPlugin.php',
     'Stack\\Builder' => $vendorDir . '/stack/builder/src/Stack/Builder.php',
     'Stack\\StackedHttpKernel' => $vendorDir . '/stack/builder/src/Stack/StackedHttpKernel.php',
     'Stecman\\Component\\Symfony\\Console\\BashCompletion\\Completion' => $vendorDir . '/stecman/symfony-console-completion/src/Completion.php',
@@ -6008,7 +6177,6 @@
     'TwitterAPIExchange' => $vendorDir . '/j7mbo/twitter-api-php/TwitterAPIExchange.php',
     'TypeError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
     'Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php',
-    'Webmozart\\Assert\\Mixin' => $vendorDir . '/webmozart/assert/src/Mixin.php',
     'Webmozart\\PathUtil\\Path' => $vendorDir . '/webmozart/path-util/src/Path.php',
     'Webmozart\\PathUtil\\Url' => $vendorDir . '/webmozart/path-util/src/Url.php',
     'WhiteHat101\\Crypt\\APR1_MD5' => $vendorDir . '/whitehat101/apr1-md5/src/APR1_MD5.php',
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
index 43bf56e214..b22ca8de96 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -35,9 +35,8 @@
     '786bf90caabc9e09b6ad4cc5ca8f0e30' => $vendorDir . '/laminas/laminas-diactoros/src/functions/normalize_uploaded_files.legacy.php',
     '751a5a3f463e4be759be31748b61737c' => $vendorDir . '/laminas/laminas-diactoros/src/functions/parse_cookie_header.legacy.php',
     'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
+    '5abda994d126976858eb25d2546ee3c9' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/_autoload_modules.php',
     '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php',
     '952683d815ff0a7bf322b93c0be7e4e4' => $vendorDir . '/chi-teck/drupal-code-generator/src/bootstrap.php',
-    '6175f5662c2e26de0149cb048cda7209' => $vendorDir . '/simplesamlphp/saml2/src/_autoload.php',
     '5a12a5271c58108e0aa33355e6ac54ea' => $vendorDir . '/drupal/console-core/src/functions.php',
-    '5abda994d126976858eb25d2546ee3c9' => $vendorDir . '/simplesamlphp/simplesamlphp/lib/_autoload_modules.php',
 );
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
index 8c5b9f67e1..e072df9f42 100644
--- a/vendor/composer/autoload_namespaces.php
+++ b/vendor/composer/autoload_namespaces.php
@@ -9,7 +9,7 @@
     'Twig_Extensions_' => array($vendorDir . '/twig/extensions/lib'),
     'Twig_' => array($vendorDir . '/twig/twig/lib'),
     'Stack' => array($vendorDir . '/stack/builder/src'),
-    'SAML2\\' => array($vendorDir . '/simplesamlphp/saml2/src'),
+    'SimpleSamlPhp\\Composer' => array($vendorDir . '/simplesamlphp/composer-module-installer/src'),
     'EasyRdf_' => array($vendorDir . '/easyrdf/easyrdf/lib'),
     'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/lib'),
     'Dflydev\\PlaceholderResolver' => array($vendorDir . '/dflydev/placeholder-resolver/src'),
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 204fed7266..8b0265e0e4 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -45,8 +45,34 @@
     'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
     'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'),
     'Stecman\\Component\\Symfony\\Console\\BashCompletion\\' => array($vendorDir . '/stecman/symfony-console-completion/src'),
+    'SimpleSAML\\modules\\yubikey\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authYubikey/lib'),
+    'SimpleSAML\\modules\\discopower\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/discopower/lib'),
+    'SimpleSAML\\TwigConfigurableI18n\\' => array($vendorDir . '/simplesamlphp/twig-configurable-i18n/src'),
+    'SimpleSAML\\Module\\statistics\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/statistics/lib'),
+    'SimpleSAML\\Module\\sqlauth\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/sqlauth/lib'),
+    'SimpleSAML\\Module\\smartattributes\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/smartattributes/lib'),
+    'SimpleSAML\\Module\\sanitycheck\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/sanitycheck/lib'),
+    'SimpleSAML\\Module\\riak\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/riak/lib'),
+    'SimpleSAML\\Module\\radius\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/radius/lib'),
+    'SimpleSAML\\Module\\preprodwarning\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/preprodwarning/lib'),
+    'SimpleSAML\\Module\\negotiate\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/negotiate/lib'),
+    'SimpleSAML\\Module\\metarefresh\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/metarefresh/lib'),
+    'SimpleSAML\\Module\\ldap\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/ldap/lib'),
+    'SimpleSAML\\Module\\expirycheck\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/expirycheck/lib'),
+    'SimpleSAML\\Module\\exampleattributeserver\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/exampleattributeserver/lib'),
+    'SimpleSAML\\Module\\consent\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/consent/lib'),
+    'SimpleSAML\\Module\\cdc\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/cdc/lib'),
+    'SimpleSAML\\Module\\cas\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/cas/lib'),
+    'SimpleSAML\\Module\\authwindowslive\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authwindowslive/lib'),
+    'SimpleSAML\\Module\\authtwitter\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authtwitter/lib'),
+    'SimpleSAML\\Module\\authorize\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authorize/lib'),
+    'SimpleSAML\\Module\\authfacebook\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authfacebook/lib'),
+    'SimpleSAML\\Module\\authcrypt\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authcrypt/lib'),
+    'SimpleSAML\\Module\\authX509\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/authX509/lib'),
+    'SimpleSAML\\Module\\adfs\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/modules/adfs/lib'),
     'SimpleSAML\\' => array($vendorDir . '/simplesamlphp/simplesamlphp/lib/SimpleSAML'),
     'SelfUpdate\\' => array($vendorDir . '/consolidation/self-update/src'),
+    'SAML2\\' => array($vendorDir . '/simplesamlphp/saml2/src/SAML2'),
     'Robo\\' => array($vendorDir . '/consolidation/robo/src'),
     'RobRichards\\XMLSecLibs\\' => array($vendorDir . '/robrichards/xmlseclibs/src'),
     'ReCaptcha\\' => array($vendorDir . '/google/recaptcha/src/ReCaptcha'),
@@ -65,7 +91,6 @@
     'Laminas\\Feed\\' => array($vendorDir . '/laminas/laminas-feed/src'),
     'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'),
     'Laminas\\Diactoros\\' => array($vendorDir . '/laminas/laminas-diactoros/src'),
-    'JaimePerez\\TwigConfigurableI18n\\' => array($vendorDir . '/jaimeperez/twig-configurable-i18n/src'),
     'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
@@ -102,6 +127,7 @@
     'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'),
     'CommerceGuys\\Intl\\' => array($vendorDir . '/commerceguys/intl/src'),
     'CommerceGuys\\Addressing\\' => array($vendorDir . '/commerceguys/addressing/src'),
+    'Basho\\' => array($vendorDir . '/phpfastcache/riak-client/src'),
     'Asm89\\Stack\\' => array($vendorDir . '/asm89/stack-cors/src/Asm89/Stack'),
     'Alchemy\\Zippy\\' => array($vendorDir . '/alchemy/zippy/src'),
 );
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 1d7b45c22e..c025311d0a 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -36,11 +36,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         '786bf90caabc9e09b6ad4cc5ca8f0e30' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/normalize_uploaded_files.legacy.php',
         '751a5a3f463e4be759be31748b61737c' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/functions/parse_cookie_header.legacy.php',
         'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
+        '5abda994d126976858eb25d2546ee3c9' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/_autoload_modules.php',
         '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php',
         '952683d815ff0a7bf322b93c0be7e4e4' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/bootstrap.php',
-        '6175f5662c2e26de0149cb048cda7209' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/_autoload.php',
         '5a12a5271c58108e0aa33355e6ac54ea' => __DIR__ . '/..' . '/drupal/console-core/src/functions.php',
-        '5abda994d126976858eb25d2546ee3c9' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/_autoload_modules.php',
     );
 
     public static $prefixLengthsPsr4 = array (
@@ -100,8 +99,34 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
             'Symfony\\Cmf\\Component\\Routing\\' => 30,
             'Symfony\\Bridge\\PsrHttpMessage\\' => 30,
             'Stecman\\Component\\Symfony\\Console\\BashCompletion\\' => 49,
+            'SimpleSAML\\modules\\yubikey\\' => 27,
+            'SimpleSAML\\modules\\discopower\\' => 30,
+            'SimpleSAML\\TwigConfigurableI18n\\' => 32,
+            'SimpleSAML\\Module\\statistics\\' => 29,
+            'SimpleSAML\\Module\\sqlauth\\' => 26,
+            'SimpleSAML\\Module\\smartattributes\\' => 34,
+            'SimpleSAML\\Module\\sanitycheck\\' => 30,
+            'SimpleSAML\\Module\\riak\\' => 23,
+            'SimpleSAML\\Module\\radius\\' => 25,
+            'SimpleSAML\\Module\\preprodwarning\\' => 33,
+            'SimpleSAML\\Module\\negotiate\\' => 28,
+            'SimpleSAML\\Module\\metarefresh\\' => 30,
+            'SimpleSAML\\Module\\ldap\\' => 23,
+            'SimpleSAML\\Module\\expirycheck\\' => 30,
+            'SimpleSAML\\Module\\exampleattributeserver\\' => 41,
+            'SimpleSAML\\Module\\consent\\' => 26,
+            'SimpleSAML\\Module\\cdc\\' => 22,
+            'SimpleSAML\\Module\\cas\\' => 22,
+            'SimpleSAML\\Module\\authwindowslive\\' => 34,
+            'SimpleSAML\\Module\\authtwitter\\' => 30,
+            'SimpleSAML\\Module\\authorize\\' => 28,
+            'SimpleSAML\\Module\\authfacebook\\' => 31,
+            'SimpleSAML\\Module\\authcrypt\\' => 28,
+            'SimpleSAML\\Module\\authX509\\' => 27,
+            'SimpleSAML\\Module\\adfs\\' => 23,
             'SimpleSAML\\' => 11,
             'SelfUpdate\\' => 11,
+            'SAML2\\' => 6,
         ),
         'R' => 
         array (
@@ -136,10 +161,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
             'Laminas\\Escaper\\' => 16,
             'Laminas\\Diactoros\\' => 18,
         ),
-        'J' => 
-        array (
-            'JaimePerez\\TwigConfigurableI18n\\' => 32,
-        ),
         'I' => 
         array (
             'Interop\\Container\\' => 18,
@@ -191,6 +212,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
             'CommerceGuys\\Intl\\' => 18,
             'CommerceGuys\\Addressing\\' => 24,
         ),
+        'B' => 
+        array (
+            'Basho\\' => 6,
+        ),
         'A' => 
         array (
             'Asm89\\Stack\\' => 12,
@@ -355,6 +380,106 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/stecman/symfony-console-completion/src',
         ),
+        'SimpleSAML\\modules\\yubikey\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authYubikey/lib',
+        ),
+        'SimpleSAML\\modules\\discopower\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/discopower/lib',
+        ),
+        'SimpleSAML\\TwigConfigurableI18n\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/twig-configurable-i18n/src',
+        ),
+        'SimpleSAML\\Module\\statistics\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib',
+        ),
+        'SimpleSAML\\Module\\sqlauth\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/sqlauth/lib',
+        ),
+        'SimpleSAML\\Module\\smartattributes\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/smartattributes/lib',
+        ),
+        'SimpleSAML\\Module\\sanitycheck\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/sanitycheck/lib',
+        ),
+        'SimpleSAML\\Module\\riak\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/riak/lib',
+        ),
+        'SimpleSAML\\Module\\radius\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/radius/lib',
+        ),
+        'SimpleSAML\\Module\\preprodwarning\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/preprodwarning/lib',
+        ),
+        'SimpleSAML\\Module\\negotiate\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/negotiate/lib',
+        ),
+        'SimpleSAML\\Module\\metarefresh\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/metarefresh/lib',
+        ),
+        'SimpleSAML\\Module\\ldap\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib',
+        ),
+        'SimpleSAML\\Module\\expirycheck\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/expirycheck/lib',
+        ),
+        'SimpleSAML\\Module\\exampleattributeserver\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/exampleattributeserver/lib',
+        ),
+        'SimpleSAML\\Module\\consent\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/consent/lib',
+        ),
+        'SimpleSAML\\Module\\cdc\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/cdc/lib',
+        ),
+        'SimpleSAML\\Module\\cas\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/cas/lib',
+        ),
+        'SimpleSAML\\Module\\authwindowslive\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authwindowslive/lib',
+        ),
+        'SimpleSAML\\Module\\authtwitter\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authtwitter/lib',
+        ),
+        'SimpleSAML\\Module\\authorize\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authorize/lib',
+        ),
+        'SimpleSAML\\Module\\authfacebook\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authfacebook/lib',
+        ),
+        'SimpleSAML\\Module\\authcrypt\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authcrypt/lib',
+        ),
+        'SimpleSAML\\Module\\authX509\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authX509/lib',
+        ),
+        'SimpleSAML\\Module\\adfs\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib',
+        ),
         'SimpleSAML\\' => 
         array (
             0 => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML',
@@ -363,6 +488,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/consolidation/self-update/src',
         ),
+        'SAML2\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2',
+        ),
         'Robo\\' => 
         array (
             0 => __DIR__ . '/..' . '/consolidation/robo/src',
@@ -435,10 +564,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/laminas/laminas-diactoros/src',
         ),
-        'JaimePerez\\TwigConfigurableI18n\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src',
-        ),
         'Interop\\Container\\' => 
         array (
             0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container',
@@ -583,6 +708,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/commerceguys/addressing/src',
         ),
+        'Basho\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/phpfastcache/riak-client/src',
+        ),
         'Asm89\\Stack\\' => 
         array (
             0 => __DIR__ . '/..' . '/asm89/stack-cors/src/Asm89/Stack',
@@ -611,9 +740,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
             array (
                 0 => __DIR__ . '/..' . '/stack/builder/src',
             ),
-            'SAML2\\' => 
+            'SimpleSamlPhp\\Composer' => 
             array (
-                0 => __DIR__ . '/..' . '/simplesamlphp/saml2/src',
+                0 => __DIR__ . '/..' . '/simplesamlphp/composer-module-installer/src',
             ),
         ),
         'E' => 
@@ -751,6 +880,124 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Asm89\\Stack\\Cors' => __DIR__ . '/..' . '/asm89/stack-cors/src/Asm89/Stack/Cors.php',
         'Asm89\\Stack\\CorsService' => __DIR__ . '/..' . '/asm89/stack-cors/src/Asm89/Stack/CorsService.php',
         'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
+        'Basho\\Riak' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak.php',
+        'Basho\\Riak\\Api' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Api.php',
+        'Basho\\Riak\\ApiInterface' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/ApiInterface.php',
+        'Basho\\Riak\\Api\\Exception' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Api/Exception.php',
+        'Basho\\Riak\\Api\\Http' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Api/Http.php',
+        'Basho\\Riak\\Api\\Http\\Translator\\ObjectResponse' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Api/Http/Translator/ObjectResponse.php',
+        'Basho\\Riak\\Api\\Http\\Translator\\SecondaryIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Api/Http/Translator/SecondaryIndex.php',
+        'Basho\\Riak\\Bucket' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Bucket.php',
+        'Basho\\Riak\\Command' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command.php',
+        'Basho\\Riak\\CommandInterface' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/CommandInterface.php',
+        'Basho\\Riak\\Command\\Bucket\\Delete' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Delete.php',
+        'Basho\\Riak\\Command\\Bucket\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Fetch.php',
+        'Basho\\Riak\\Command\\Bucket\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Response.php',
+        'Basho\\Riak\\Command\\Bucket\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Bucket/Store.php',
+        'Basho\\Riak\\Command\\Builder' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder.php',
+        'Basho\\Riak\\Command\\BuilderInterface' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/BuilderInterface.php',
+        'Basho\\Riak\\Command\\Builder\\BucketTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/BucketTrait.php',
+        'Basho\\Riak\\Command\\Builder\\DeleteObject' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/DeleteObject.php',
+        'Basho\\Riak\\Command\\Builder\\Exception' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Exception.php',
+        'Basho\\Riak\\Command\\Builder\\FetchBucketProperties' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchBucketProperties.php',
+        'Basho\\Riak\\Command\\Builder\\FetchCounter' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchCounter.php',
+        'Basho\\Riak\\Command\\Builder\\FetchHll' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchHll.php',
+        'Basho\\Riak\\Command\\Builder\\FetchMap' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchMap.php',
+        'Basho\\Riak\\Command\\Builder\\FetchObject' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchObject.php',
+        'Basho\\Riak\\Command\\Builder\\FetchPreflist' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchPreflist.php',
+        'Basho\\Riak\\Command\\Builder\\FetchSet' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchSet.php',
+        'Basho\\Riak\\Command\\Builder\\FetchStats' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/FetchStats.php',
+        'Basho\\Riak\\Command\\Builder\\IncrementCounter' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/IncrementCounter.php',
+        'Basho\\Riak\\Command\\Builder\\IndexTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/IndexTrait.php',
+        'Basho\\Riak\\Command\\Builder\\ListObjects' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/ListObjects.php',
+        'Basho\\Riak\\Command\\Builder\\LocationTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/LocationTrait.php',
+        'Basho\\Riak\\Command\\Builder\\MapReduce\\FetchObjects' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/MapReduce/FetchObjects.php',
+        'Basho\\Riak\\Command\\Builder\\ObjectTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/ObjectTrait.php',
+        'Basho\\Riak\\Command\\Builder\\Ping' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Ping.php',
+        'Basho\\Riak\\Command\\Builder\\QueryIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/QueryIndex.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\AssociateIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/AssociateIndex.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\DeleteIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DeleteIndex.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\DissociateIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DissociateIndex.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\FetchIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchIndex.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\FetchObjects' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchObjects.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\FetchSchema' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchSchema.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\StoreIndex' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreIndex.php',
+        'Basho\\Riak\\Command\\Builder\\Search\\StoreSchema' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreSchema.php',
+        'Basho\\Riak\\Command\\Builder\\SetBucketProperties' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/SetBucketProperties.php',
+        'Basho\\Riak\\Command\\Builder\\StoreObject' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/StoreObject.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\DeleteRow' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DeleteRow.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\DescribeTable' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DescribeTable.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\FetchRow' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/FetchRow.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\KeyTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/KeyTrait.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\Query' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/Query.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\RowsTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/RowsTrait.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\StoreRows' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/StoreRows.php',
+        'Basho\\Riak\\Command\\Builder\\TimeSeries\\TableTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/TableTrait.php',
+        'Basho\\Riak\\Command\\Builder\\UpdateGSet' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateGSet.php',
+        'Basho\\Riak\\Command\\Builder\\UpdateHll' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateHll.php',
+        'Basho\\Riak\\Command\\Builder\\UpdateMap' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateMap.php',
+        'Basho\\Riak\\Command\\Builder\\UpdateSet' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateSet.php',
+        'Basho\\Riak\\Command\\DataType\\Counter\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Fetch.php',
+        'Basho\\Riak\\Command\\DataType\\Counter\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Response.php',
+        'Basho\\Riak\\Command\\DataType\\Counter\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Store.php',
+        'Basho\\Riak\\Command\\DataType\\GSet\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/GSet/Store.php',
+        'Basho\\Riak\\Command\\DataType\\Hll\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Fetch.php',
+        'Basho\\Riak\\Command\\DataType\\Hll\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Response.php',
+        'Basho\\Riak\\Command\\DataType\\Hll\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Store.php',
+        'Basho\\Riak\\Command\\DataType\\Map\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Fetch.php',
+        'Basho\\Riak\\Command\\DataType\\Map\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Response.php',
+        'Basho\\Riak\\Command\\DataType\\Map\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Store.php',
+        'Basho\\Riak\\Command\\DataType\\Set\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Fetch.php',
+        'Basho\\Riak\\Command\\DataType\\Set\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Response.php',
+        'Basho\\Riak\\Command\\DataType\\Set\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Store.php',
+        'Basho\\Riak\\Command\\Exception' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Exception.php',
+        'Basho\\Riak\\Command\\Indexes\\Query' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Indexes/Query.php',
+        'Basho\\Riak\\Command\\Indexes\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Indexes/Response.php',
+        'Basho\\Riak\\Command\\KVObject' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject.php',
+        'Basho\\Riak\\Command\\KVObject\\Delete' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Delete.php',
+        'Basho\\Riak\\Command\\KVObject\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Fetch.php',
+        'Basho\\Riak\\Command\\KVObject\\FetchPreflist' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/FetchPreflist.php',
+        'Basho\\Riak\\Command\\KVObject\\Keys\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Fetch.php',
+        'Basho\\Riak\\Command\\KVObject\\Keys\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Response.php',
+        'Basho\\Riak\\Command\\KVObject\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Response.php',
+        'Basho\\Riak\\Command\\KVObject\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/KVObject/Store.php',
+        'Basho\\Riak\\Command\\MapReduce\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/MapReduce/Fetch.php',
+        'Basho\\Riak\\Command\\MapReduce\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/MapReduce/Response.php',
+        'Basho\\Riak\\Command\\Ping' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Ping.php',
+        'Basho\\Riak\\Command\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Response.php',
+        'Basho\\Riak\\Command\\Search\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Fetch.php',
+        'Basho\\Riak\\Command\\Search\\Index\\Delete' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Delete.php',
+        'Basho\\Riak\\Command\\Search\\Index\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Fetch.php',
+        'Basho\\Riak\\Command\\Search\\Index\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Response.php',
+        'Basho\\Riak\\Command\\Search\\Index\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Index/Store.php',
+        'Basho\\Riak\\Command\\Search\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Response.php',
+        'Basho\\Riak\\Command\\Search\\Schema\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Fetch.php',
+        'Basho\\Riak\\Command\\Search\\Schema\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Response.php',
+        'Basho\\Riak\\Command\\Search\\Schema\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Store.php',
+        'Basho\\Riak\\Command\\Stats' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Stats.php',
+        'Basho\\Riak\\Command\\Stats\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/Stats/Response.php',
+        'Basho\\Riak\\Command\\TimeSeries\\Delete' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Delete.php',
+        'Basho\\Riak\\Command\\TimeSeries\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Fetch.php',
+        'Basho\\Riak\\Command\\TimeSeries\\Query\\Fetch' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Fetch.php',
+        'Basho\\Riak\\Command\\TimeSeries\\Query\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Response.php',
+        'Basho\\Riak\\Command\\TimeSeries\\Response' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Response.php',
+        'Basho\\Riak\\Command\\TimeSeries\\Store' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Store.php',
+        'Basho\\Riak\\DataObject' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataObject.php',
+        'Basho\\Riak\\DataType' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataType.php',
+        'Basho\\Riak\\DataType\\Counter' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataType/Counter.php',
+        'Basho\\Riak\\DataType\\Exception' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataType/Exception.php',
+        'Basho\\Riak\\DataType\\Hll' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataType/Hll.php',
+        'Basho\\Riak\\DataType\\Map' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataType/Map.php',
+        'Basho\\Riak\\DataType\\Set' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/DataType/Set.php',
+        'Basho\\Riak\\Exception' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Exception.php',
+        'Basho\\Riak\\HeadersTrait' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/HeadersTrait.php',
+        'Basho\\Riak\\Location' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Location.php',
+        'Basho\\Riak\\Node' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Node.php',
+        'Basho\\Riak\\Node\\Builder' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Node/Builder.php',
+        'Basho\\Riak\\Node\\Builder\\Exception' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Node/Builder/Exception.php',
+        'Basho\\Riak\\Node\\Config' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Node/Config.php',
+        'Basho\\Riak\\Search\\Doc' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/Search/Doc.php',
+        'Basho\\Riak\\TimeSeries\\Cell' => __DIR__ . '/..' . '/phpfastcache/riak-client/src/Riak/TimeSeries/Cell.php',
         'CommerceGuys\\Addressing\\AbstractEnum' => __DIR__ . '/..' . '/commerceguys/addressing/src/AbstractEnum.php',
         'CommerceGuys\\Addressing\\Address' => __DIR__ . '/..' . '/commerceguys/addressing/src/Address.php',
         'CommerceGuys\\Addressing\\AddressFormat\\AddressField' => __DIR__ . '/..' . '/commerceguys/addressing/src/AddressFormat/AddressField.php',
@@ -3964,10 +4211,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Interop\\Container\\ContainerInterface' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php',
         'Interop\\Container\\Exception\\ContainerException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php',
         'Interop\\Container\\Exception\\NotFoundException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php',
-        'JaimePerez\\TwigConfigurableI18n\\Twig\\Environment' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Environment.php',
-        'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
-        'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
-        'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
         'Laminas\\Diactoros\\AbstractSerializer' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/AbstractSerializer.php',
         'Laminas\\Diactoros\\CallbackStream' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/CallbackStream.php',
         'Laminas\\Diactoros\\Exception\\DeprecatedMethodException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/DeprecatedMethodException.php',
@@ -4857,9 +5100,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SAML2\\Certificate\\Exception\\InvalidCertificateStructureException' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidCertificateStructureException.php',
         'SAML2\\Certificate\\Exception\\InvalidKeyUsageException' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidKeyUsageException.php',
         'SAML2\\Certificate\\Exception\\NoKeysFoundException' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/Exception/NoKeysFoundException.php',
-        'SAML2\\Certificate\\Fingerprint' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/Fingerprint.php',
-        'SAML2\\Certificate\\FingerprintCollection' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintCollection.php',
-        'SAML2\\Certificate\\FingerprintLoader' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintLoader.php',
         'SAML2\\Certificate\\Key' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/Key.php',
         'SAML2\\Certificate\\KeyCollection' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/KeyCollection.php',
         'SAML2\\Certificate\\KeyLoader' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Certificate/KeyLoader.php',
@@ -4915,7 +5155,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SAML2\\SOAPClient' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/SOAPClient.php',
         'SAML2\\Signature\\AbstractChainedValidator' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Signature/AbstractChainedValidator.php',
         'SAML2\\Signature\\ChainedValidator' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Signature/ChainedValidator.php',
-        'SAML2\\Signature\\FingerprintValidator' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Signature/FingerprintValidator.php',
         'SAML2\\Signature\\MissingConfigurationException' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Signature/MissingConfigurationException.php',
         'SAML2\\Signature\\PublicKeyValidator' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Signature/PublicKeyValidator.php',
         'SAML2\\Signature\\Validator' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/Signature/Validator.php',
@@ -4981,10 +5220,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SAML2\\XML\\shibmd\\Scope' => __DIR__ . '/..' . '/simplesamlphp/saml2/src/SAML2/XML/shibmd/Scope.php',
         'SelfUpdate\\SelfUpdateCommand' => __DIR__ . '/..' . '/consolidation/self-update/src/SelfUpdateCommand.php',
         'SessionUpdateTimestampHandlerInterface' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
-        'SimpleSAML\\AuthMemCookie' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/AuthMemCookie.php',
         'SimpleSAML\\Auth\\AuthenticationFactory' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/AuthenticationFactory.php',
-        'SimpleSAML\\Auth\\DefaultAuth' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Default.php',
-        'SimpleSAML\\Auth\\LDAP' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/LDAP.php',
+        'SimpleSAML\\Auth\\DefaultAuth' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/DefaultAuth.php',
         'SimpleSAML\\Auth\\ProcessingChain' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingChain.php',
         'SimpleSAML\\Auth\\ProcessingFilter' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingFilter.php',
         'SimpleSAML\\Auth\\Simple' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Simple.php',
@@ -5044,6 +5281,61 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SimpleSAML\\Metadata\\Sources\\MDQ' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Sources/MDQ.php',
         'SimpleSAML\\Module' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module.php',
         'SimpleSAML\\Module\\ControllerResolver' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module/ControllerResolver.php',
+        'SimpleSAML\\Module\\adfs\\AdfsController' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib/AdfsController.php',
+        'SimpleSAML\\Module\\adfs\\IdP\\ADFS' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib/IdP/ADFS.php',
+        'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\Constants' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Constants.php',
+        'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\Endpoint' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Endpoint.php',
+        'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\SecurityTokenServiceType' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/SecurityTokenServiceType.php',
+        'SimpleSAML\\Module\\adfs\\SAML2\\XML\\fed\\TokenTypesOffered' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/TokenTypesOffered.php',
+        'SimpleSAML\\Module\\authX509\\Auth\\Process\\ExpiryWarning' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Process/ExpiryWarning.php',
+        'SimpleSAML\\Module\\authX509\\Auth\\Source\\X509userCert' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Source/X509userCert.php',
+        'SimpleSAML\\Module\\authX509\\Controller\\ExpiryWarning' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authX509/lib/Controller/ExpiryWarning.php',
+        'SimpleSAML\\Module\\authcrypt\\Auth\\Source\\Hash' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Hash.php',
+        'SimpleSAML\\Module\\authcrypt\\Auth\\Source\\Htpasswd' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Htpasswd.php',
+        'SimpleSAML\\Module\\authfacebook\\Auth\\Source\\Facebook' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Auth/Source/Facebook.php',
+        'SimpleSAML\\Module\\authfacebook\\Facebook' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Facebook.php',
+        'SimpleSAML\\Module\\authorize\\Auth\\Process\\Authorize' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authorize/lib/Auth/Process/Authorize.php',
+        'SimpleSAML\\Module\\authtwitter\\Auth\\Source\\Twitter' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authtwitter/lib/Auth/Source/Twitter.php',
+        'SimpleSAML\\Module\\authwindowslive\\Auth\\Source\\LiveID' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/authwindowslive/lib/Auth/Source/LiveID.php',
+        'SimpleSAML\\Module\\cas\\Auth\\Source\\CAS' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/cas/lib/Auth/Source/CAS.php',
+        'SimpleSAML\\Module\\cdc\\Client' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/cdc/lib/Client.php',
+        'SimpleSAML\\Module\\cdc\\Server' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/cdc/lib/Server.php',
+        'SimpleSAML\\Module\\consent\\Auth\\Process\\Consent' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/consent/lib/Auth/Process/Consent.php',
+        'SimpleSAML\\Module\\consent\\Consent\\Store\\Cookie' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Cookie.php',
+        'SimpleSAML\\Module\\consent\\Consent\\Store\\Database' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Database.php',
+        'SimpleSAML\\Module\\consent\\Logout' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/consent/lib/Logout.php',
+        'SimpleSAML\\Module\\consent\\Store' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/consent/lib/Store.php',
+        'SimpleSAML\\Module\\expirycheck\\Auth\\Process\\ExpiryDate' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/expirycheck/lib/Auth/Process/ExpiryDate.php',
+        'SimpleSAML\\Module\\ldap\\Auth\\Ldap' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Ldap.php',
+        'SimpleSAML\\Module\\ldap\\Auth\\Process\\AttributeAddFromLDAP' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddFromLDAP.php',
+        'SimpleSAML\\Module\\ldap\\Auth\\Process\\AttributeAddUsersGroups' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddUsersGroups.php',
+        'SimpleSAML\\Module\\ldap\\Auth\\Process\\BaseFilter' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/BaseFilter.php',
+        'SimpleSAML\\Module\\ldap\\Auth\\Source\\LDAP' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Source/LDAP.php',
+        'SimpleSAML\\Module\\ldap\\Auth\\Source\\LDAPMulti' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Source/LDAPMulti.php',
+        'SimpleSAML\\Module\\ldap\\ConfigHelper' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/ldap/lib/ConfigHelper.php',
+        'SimpleSAML\\Module\\metarefresh\\ARP' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/metarefresh/lib/ARP.php',
+        'SimpleSAML\\Module\\metarefresh\\MetaLoader' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/metarefresh/lib/MetaLoader.php',
+        'SimpleSAML\\Module\\negotiate\\Auth\\Source\\Negotiate' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/negotiate/lib/Auth/Source/Negotiate.php',
+        'SimpleSAML\\Module\\preprodwarning\\Auth\\Process\\Warning' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/preprodwarning/lib/Auth/Process/Warning.php',
+        'SimpleSAML\\Module\\radius\\Auth\\Source\\Radius' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/radius/lib/Auth/Source/Radius.php',
+        'SimpleSAML\\Module\\riak\\Store\\Riak' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Riak.php',
+        'SimpleSAML\\Module\\smartattributes\\Auth\\Process\\SmartID' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartID.php',
+        'SimpleSAML\\Module\\smartattributes\\Auth\\Process\\SmartName' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartName.php',
+        'SimpleSAML\\Module\\statistics\\AccessCheck' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/AccessCheck.php',
+        'SimpleSAML\\Module\\statistics\\Aggregator' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Aggregator.php',
+        'SimpleSAML\\Module\\statistics\\DateHandler' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandler.php',
+        'SimpleSAML\\Module\\statistics\\DateHandlerMonth' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandlerMonth.php',
+        'SimpleSAML\\Module\\statistics\\Graph\\GoogleCharts' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Graph/GoogleCharts.php',
+        'SimpleSAML\\Module\\statistics\\LogCleaner' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/LogCleaner.php',
+        'SimpleSAML\\Module\\statistics\\LogParser' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/LogParser.php',
+        'SimpleSAML\\Module\\statistics\\RatioDataset' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/RatioDataset.php',
+        'SimpleSAML\\Module\\statistics\\Ruleset' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Ruleset.php',
+        'SimpleSAML\\Module\\statistics\\StatDataset' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/StatDataset.php',
+        'SimpleSAML\\Module\\statistics\\StatisticsController' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/StatisticsController.php',
+        'SimpleSAML\\Module\\statistics\\Statistics\\FieldPresentation\\Base' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Base.php',
+        'SimpleSAML\\Module\\statistics\\Statistics\\FieldPresentation\\Entity' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Entity.php',
+        'SimpleSAML\\Module\\statistics\\Statistics\\Rulesets\\BaseRule' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/BaseRule.php',
+        'SimpleSAML\\Module\\statistics\\Statistics\\Rulesets\\Ratio' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/Ratio.php',
         'SimpleSAML\\Session' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Session.php',
         'SimpleSAML\\SessionHandler' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandler.php',
         'SimpleSAML\\SessionHandlerCookie' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerCookie.php',
@@ -5055,6 +5347,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SimpleSAML\\Store\\Memcache' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Memcache.php',
         'SimpleSAML\\Store\\Redis' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Redis.php',
         'SimpleSAML\\Store\\SQL' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/SQL.php',
+        'SimpleSAML\\TwigConfigurableI18n\\Twig\\Environment' => __DIR__ . '/..' . '/simplesamlphp/twig-configurable-i18n/src/Twig/Environment.php',
+        'SimpleSAML\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => __DIR__ . '/..' . '/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
+        'SimpleSAML\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => __DIR__ . '/..' . '/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
+        'SimpleSAML\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => __DIR__ . '/..' . '/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
         'SimpleSAML\\Utilities' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utilities.php',
         'SimpleSAML\\Utils\\Arrays' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Arrays.php',
         'SimpleSAML\\Utils\\Attributes' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Attributes.php',
@@ -5063,6 +5359,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SimpleSAML\\Utils\\Config' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config.php',
         'SimpleSAML\\Utils\\Config\\Metadata' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config/Metadata.php',
         'SimpleSAML\\Utils\\Crypto' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Crypto.php',
+        'SimpleSAML\\Utils\\EMail' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/EMail.php',
         'SimpleSAML\\Utils\\HTTP' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HTTP.php',
         'SimpleSAML\\Utils\\HttpAdapter' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HttpAdapter.php',
         'SimpleSAML\\Utils\\Net' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Net.php',
@@ -5070,7 +5367,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SimpleSAML\\Utils\\System' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/System.php',
         'SimpleSAML\\Utils\\Time' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Time.php',
         'SimpleSAML\\Utils\\XML' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/XML.php',
-        'SimpleSAML\\XHTML\\EMail' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/EMail.php',
         'SimpleSAML\\XHTML\\IdPDisco' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/IdPDisco.php',
         'SimpleSAML\\XHTML\\Template' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/Template.php',
         'SimpleSAML\\XHTML\\TemplateControllerInterface' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateControllerInterface.php',
@@ -5081,6 +5377,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'SimpleSAML\\XML\\Shib13\\AuthnResponse' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnResponse.php',
         'SimpleSAML\\XML\\Signer' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Signer.php',
         'SimpleSAML\\XML\\Validator' => __DIR__ . '/..' . '/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Validator.php',
+        'SimpleSamlPhp\\Composer\\ModuleInstaller' => __DIR__ . '/..' . '/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstaller.php',
+        'SimpleSamlPhp\\Composer\\ModuleInstallerPlugin' => __DIR__ . '/..' . '/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstallerPlugin.php',
         'Stack\\Builder' => __DIR__ . '/..' . '/stack/builder/src/Stack/Builder.php',
         'Stack\\StackedHttpKernel' => __DIR__ . '/..' . '/stack/builder/src/Stack/StackedHttpKernel.php',
         'Stecman\\Component\\Symfony\\Console\\BashCompletion\\Completion' => __DIR__ . '/..' . '/stecman/symfony-console-completion/src/Completion.php',
@@ -6669,7 +6967,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'TwitterAPIExchange' => __DIR__ . '/..' . '/j7mbo/twitter-api-php/TwitterAPIExchange.php',
         'TypeError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
         'Webmozart\\Assert\\Assert' => __DIR__ . '/..' . '/webmozart/assert/src/Assert.php',
-        'Webmozart\\Assert\\Mixin' => __DIR__ . '/..' . '/webmozart/assert/src/Mixin.php',
         'Webmozart\\PathUtil\\Path' => __DIR__ . '/..' . '/webmozart/path-util/src/Path.php',
         'Webmozart\\PathUtil\\Url' => __DIR__ . '/..' . '/webmozart/path-util/src/Url.php',
         'WhiteHat101\\Crypt\\APR1_MD5' => __DIR__ . '/..' . '/whitehat101/apr1-md5/src/APR1_MD5.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 68516d3ec4..8ecf83f42f 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -7782,28 +7782,28 @@
     },
     {
         "name": "drupal/simplesamlphp_auth",
-        "version": "3.1.0",
-        "version_normalized": "3.1.0.0",
+        "version": "3.2.0",
+        "version_normalized": "3.2.0.0",
         "source": {
             "type": "git",
             "url": "https://git.drupalcode.org/project/simplesamlphp_auth.git",
-            "reference": "8.x-3.1"
+            "reference": "8.x-3.2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.1.zip",
-            "reference": "8.x-3.1",
-            "shasum": "db464b1a4716ad21e7f2ec141640691b8d040d59"
+            "url": "https://ftp.drupal.org/files/projects/simplesamlphp_auth-8.x-3.2.zip",
+            "reference": "8.x-3.2",
+            "shasum": "a5a2b10fc873eb8669929ad1a6d9599e47a2ca99"
         },
         "require": {
-            "drupal/core": "^8",
+            "drupal/core": "^8.7|^9.0",
             "drupal/externalauth": "^1.1",
-            "simplesamlphp/simplesamlphp": "~1.17.2"
+            "simplesamlphp/simplesamlphp": "^1.18.2"
         },
         "type": "drupal-module",
         "extra": {
             "drupal": {
-                "version": "8.x-3.1",
+                "version": "8.x-3.2",
                 "datestamp": "1580423953",
                 "security-coverage": {
                     "status": "covered",
@@ -9578,17 +9578,17 @@
     },
     {
         "name": "gettext/gettext",
-        "version": "v4.8.2",
-        "version_normalized": "4.8.2.0",
+        "version": "v4.8.3",
+        "version_normalized": "4.8.3.0",
         "source": {
             "type": "git",
             "url": "https://github.com/php-gettext/Gettext.git",
-            "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a"
+            "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/e474f872f2c8636cf53fd283ec4ce1218f3d236a",
-            "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a",
+            "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/57ff4fb16647e78e80a5909fe3c190f1c3110321",
+            "reference": "57ff4fb16647e78e80a5909fe3c190f1c3110321",
             "shasum": ""
         },
         "require": {
@@ -9609,7 +9609,7 @@
             "twig/extensions": "Is necessary if you want to use the Twig extractor",
             "twig/twig": "Is necessary if you want to use the Twig extractor"
         },
-        "time": "2019-12-02T10:21:14+00:00",
+        "time": "2020-11-18T22:35:49+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -10098,57 +10098,6 @@
             "twitter"
         ]
     },
-    {
-        "name": "jaimeperez/twig-configurable-i18n",
-        "version": "v2.1",
-        "version_normalized": "2.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/jaimeperez/twig-configurable-i18n.git",
-            "reference": "38a22aaa6b31efdc0d76d58f5934dea3ebac8556"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/jaimeperez/twig-configurable-i18n/zipball/38a22aaa6b31efdc0d76d58f5934dea3ebac8556",
-            "reference": "38a22aaa6b31efdc0d76d58f5934dea3ebac8556",
-            "shasum": ""
-        },
-        "require": {
-            "twig/extensions": "^1.5"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "~4.8.36",
-            "twig/twig": "^1.37 || ^2.7"
-        },
-        "time": "2019-06-07T11:03:28+00:00",
-        "type": "project",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "JaimePerez\\TwigConfigurableI18n\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "LGPL-2.1"
-        ],
-        "authors": [
-            {
-                "name": "Jaime Perez",
-                "email": "jaime.perez@uninett.no"
-            }
-        ],
-        "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
-        "keywords": [
-            "extension",
-            "gettext",
-            "i18n",
-            "internationalization",
-            "translation",
-            "twig"
-        ],
-        "abandoned": "simplesamlphp/twig-configurable-i18n"
-    },
     {
         "name": "laminas/laminas-diactoros",
         "version": "1.8.7p2",
@@ -11144,6 +11093,80 @@
             "exception"
         ]
     },
+    {
+        "name": "phpfastcache/riak-client",
+        "version": "3.4.3",
+        "version_normalized": "3.4.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/PHPSocialNetwork/riak-php-client.git",
+            "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9",
+            "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9",
+            "shasum": ""
+        },
+        "require": {
+            "ext-curl": "*",
+            "ext-json": "*",
+            "php": ">=5.4"
+        },
+        "conflict": {
+            "basho/riak": "*"
+        },
+        "require-dev": {
+            "apigen/apigen": "4.1.*",
+            "phpunit/phpunit": "4.8.*"
+        },
+        "time": "2017-11-23T21:33:15+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Basho\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "Apache-2.0"
+        ],
+        "authors": [
+            {
+                "name": "Georges.L",
+                "email": "contact@geolim4.com",
+                "homepage": "https://github.com/Geolim4",
+                "role": "Maintainer"
+            },
+            {
+                "name": "Christopher Mancini",
+                "email": "cmancini@basho.com",
+                "homepage": "https://github.com/christophermancini",
+                "role": "Former Lead Developer"
+            },
+            {
+                "name": "Alex Moore",
+                "email": "amoore@basho.com",
+                "homepage": "https://github.com/alexmoore",
+                "role": "Former Developer"
+            }
+        ],
+        "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)",
+        "homepage": "https://github.com/PHPSocialNetwork/riak-php-client",
+        "keywords": [
+            "basho",
+            "client",
+            "crdt",
+            "data",
+            "database",
+            "datatype",
+            "driver",
+            "kv",
+            "nosql",
+            "riak"
+        ]
+    },
     {
         "name": "phpmailer/phpmailer",
         "version": "v6.2.0",
@@ -11488,24 +11511,24 @@
     },
     {
         "name": "robrichards/xmlseclibs",
-        "version": "3.1.0",
-        "version_normalized": "3.1.0.0",
+        "version": "3.1.1",
+        "version_normalized": "3.1.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/robrichards/xmlseclibs.git",
-            "reference": "8d8e56ca7914440a8c60caff1a865e7dff1d9a5a"
+            "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/8d8e56ca7914440a8c60caff1a865e7dff1d9a5a",
-            "reference": "8d8e56ca7914440a8c60caff1a865e7dff1d9a5a",
+            "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/f8f19e58f26cdb42c54b214ff8a820760292f8df",
+            "reference": "f8f19e58f26cdb42c54b214ff8a820760292f8df",
             "shasum": ""
         },
         "require": {
             "ext-openssl": "*",
             "php": ">= 5.4"
         },
-        "time": "2020-04-22T17:19:51+00:00",
+        "time": "2020-09-05T13:00:25+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -11526,54 +11549,86 @@
             "xmldsig"
         ]
     },
+    {
+        "name": "simplesamlphp/composer-module-installer",
+        "version": "v1.1.8",
+        "version_normalized": "1.1.8.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/composer-module-installer.git",
+            "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa",
+            "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa",
+            "shasum": ""
+        },
+        "require": {
+            "composer-plugin-api": "^1.1|^2.0",
+            "simplesamlphp/simplesamlphp": "*"
+        },
+        "time": "2020-08-25T19:04:33+00:00",
+        "type": "composer-plugin",
+        "extra": {
+            "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin"
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "SimpleSamlPhp\\Composer": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-only"
+        ],
+        "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer."
+    },
     {
         "name": "simplesamlphp/saml2",
-        "version": "v3.4.5",
-        "version_normalized": "3.4.5.0",
+        "version": "v4.2.0",
+        "version_normalized": "4.2.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/simplesamlphp/saml2.git",
-            "reference": "acc47782592866423942dc30002c5220203ab466"
+            "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/acc47782592866423942dc30002c5220203ab466",
-            "reference": "acc47782592866423942dc30002c5220203ab466",
+            "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d4038b83be50ccd64ecdc0b7c68e66d63c899d2c",
+            "reference": "d4038b83be50ccd64ecdc0b7c68e66d63c899d2c",
             "shasum": ""
         },
         "require": {
             "ext-dom": "*",
             "ext-openssl": "*",
             "ext-zlib": "*",
-            "php": ">=5.4",
-            "psr/log": "~1.0",
-            "robrichards/xmlseclibs": "^3.0.4",
-            "webmozart/assert": "^1.4"
+            "php": ">=7.1",
+            "psr/log": "~1.1",
+            "robrichards/xmlseclibs": "^3.1.0",
+            "webmozart/assert": "^1.5"
         },
         "require-dev": {
-            "mockery/mockery": "~0.9",
-            "phpmd/phpmd": "~2.6",
-            "phpunit/phpunit": "~5.7",
-            "sebastian/phpcpd": "~2.0",
-            "sensiolabs/security-checker": "~4.1",
-            "simplesamlphp/simplesamlphp-test-framework": "0.0.11",
-            "squizlabs/php_codesniffer": "~3.2"
-        },
-        "time": "2020-05-14T16:38:12+00:00",
+            "mockery/mockery": "~1.2",
+            "phpunit/phpunit": "^7.5",
+            "sebastian/phpcpd": "~4.1",
+            "sensiolabs/security-checker": "~6.0",
+            "simplesamlphp/simplesamlphp-test-framework": "~0.1.0",
+            "squizlabs/php_codesniffer": "~3.5"
+        },
+        "time": "2021-01-28T21:35:22+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "v3.1.x-dev"
+                "dev-master": "v4.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "SAML2\\": "src/"
-            },
-            "files": [
-                "src/_autoload.php"
-            ]
+            "psr-4": {
+                "SAML2\\": "src/SAML2"
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -11589,17 +11644,17 @@
     },
     {
         "name": "simplesamlphp/simplesamlphp",
-        "version": "v1.17.8",
-        "version_normalized": "1.17.8.0",
+        "version": "v1.18.8",
+        "version_normalized": "1.18.8.0",
         "source": {
             "type": "git",
             "url": "https://github.com/simplesamlphp/simplesamlphp.git",
-            "reference": "295937ae8672278cad73ec2c78af3749426263de"
+            "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/295937ae8672278cad73ec2c78af3749426263de",
-            "reference": "295937ae8672278cad73ec2c78af3749426263de",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b",
+            "reference": "ebb6d15bb8e8b45504adc26fd3872073d1e5cd9b",
             "shasum": ""
         },
         "require": {
@@ -11613,23 +11668,55 @@
             "ext-spl": "*",
             "ext-zlib": "*",
             "gettext/gettext": "^4.6",
-            "jaimeperez/twig-configurable-i18n": "^2.0",
-            "php": ">=5.5",
+            "php": ">=5.6",
+            "phpmailer/phpmailer": "^6.0",
             "robrichards/xmlseclibs": "^3.0.4",
-            "simplesamlphp/saml2": "^3.3",
+            "simplesamlphp/saml2": "^3.4 || ^4.0",
+            "simplesamlphp/simplesamlphp-module-adfs": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authorize": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authx509": "^0.9",
+            "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9",
+            "simplesamlphp/simplesamlphp-module-cas": "^0.9",
+            "simplesamlphp/simplesamlphp-module-cdc": "^0.9",
+            "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+            "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9",
+            "simplesamlphp/simplesamlphp-module-discopower": "^0.9",
+            "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0",
+            "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9",
+            "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+            "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9",
+            "simplesamlphp/simplesamlphp-module-memcookie": "^1.2",
+            "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9",
+            "simplesamlphp/simplesamlphp-module-negotiate": "^0.9",
+            "simplesamlphp/simplesamlphp-module-oauth": "^0.9",
+            "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9",
+            "simplesamlphp/simplesamlphp-module-radius": "^0.9",
+            "simplesamlphp/simplesamlphp-module-riak": "^0.9",
+            "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9",
+            "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9",
+            "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9",
+            "simplesamlphp/simplesamlphp-module-statistics": "^0.9",
+            "simplesamlphp/twig-configurable-i18n": "^2.2",
             "symfony/config": "^3.4 || ^4.0",
             "symfony/dependency-injection": "^3.4 || ^4.0",
             "symfony/http-foundation": "^3.4 || ^4.0",
             "symfony/http-kernel": "^3.4 || ^4.0",
             "symfony/routing": "^3.4 || ^4.0",
             "symfony/yaml": "^3.4 || ^4.0",
-            "twig/twig": "~1.0 || ~2.0",
-            "whitehat101/apr1-md5": "~1.0"
+            "twig/twig": "~1.0 || ~2.0"
         },
         "require-dev": {
             "ext-curl": "*",
             "mikey179/vfsstream": "~1.6",
-            "phpunit/phpunit": "~4.8"
+            "phpunit/phpunit": "~5.7",
+            "sensiolabs/security-checker": "^5.0.3",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+            "squizlabs/php_codesniffer": "^3.5",
+            "vimeo/psalm": "~1.1.9"
         },
         "suggest": {
             "ext-curl": "Needed in order to check for updates automatically",
@@ -11641,7 +11728,7 @@
             "ext-radius": "Needed if a Radius backend is used",
             "predis/predis": "Needed if a Redis server is used to store session information"
         },
-        "time": "2019-11-20T08:26:08+00:00",
+        "time": "2020-09-02T12:07:28+00:00",
         "type": "project",
         "installation-source": "dist",
         "autoload": {
@@ -11682,215 +11769,1655 @@
         ]
     },
     {
-        "name": "stack/builder",
-        "version": "v1.0.5",
-        "version_normalized": "1.0.5.0",
+        "name": "simplesamlphp/simplesamlphp-module-adfs",
+        "version": "v0.9.6",
+        "version_normalized": "0.9.6.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/stackphp/builder.git",
-            "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a"
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git",
+            "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
-            "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237",
+            "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0",
-            "symfony/http-foundation": "~2.1|~3.0|~4.0",
-            "symfony/http-kernel": "~2.1|~3.0|~4.0"
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
         },
         "require-dev": {
-            "silex/silex": "~1.0"
-        },
-        "time": "2017-11-18T14:57:29+00:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0-dev"
-            }
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "webmozart/assert": "<1.7"
         },
+        "time": "2020-03-31T14:29:24+00:00",
+        "type": "simplesamlphp-module",
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "Stack": "src"
+            "psr-4": {
+                "SimpleSAML\\Module\\adfs\\": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "LGPL-2.1-or-later"
         ],
         "authors": [
             {
-                "name": "Igor Wiedler",
-                "email": "igor@wiedler.ch"
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
             }
         ],
-        "description": "Builder for stack middlewares based on HttpKernelInterface.",
+        "description": "A module that implements the WS-federation IDP",
         "keywords": [
-            "stack"
+            "adfs",
+            "simplesamlphp"
         ]
     },
     {
-        "name": "stecman/symfony-console-completion",
-        "version": "0.11.0",
-        "version_normalized": "0.11.0.0",
+        "name": "simplesamlphp/simplesamlphp-module-authcrypt",
+        "version": "v0.9.3",
+        "version_normalized": "0.9.3.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/stecman/symfony-console-completion.git",
-            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git",
+            "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
-            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/9a2c1a761e2d94394a4f2d3499fd6f0853899530",
+            "reference": "9a2c1a761e2d94394a4f2d3499fd6f0853899530",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.2",
-            "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "webmozart/assert": "~1.4",
+            "whitehat101/apr1-md5": "~1.0"
         },
         "require-dev": {
-            "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
-        },
-        "time": "2019-11-24T17:03:06+00:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "0.10.x-dev"
-            }
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
         },
+        "time": "2021-01-08T09:09:33+00:00",
+        "type": "simplesamlphp-module",
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
+                "SimpleSAML\\Module\\authcrypt\\": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "LGPL-2.1-or-later"
         ],
         "authors": [
             {
-                "name": "Stephen Holdaway",
-                "email": "stephen@stecman.co.nz"
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
             }
         ],
-        "description": "Automatic BASH completion for Symfony Console Component based applications."
+        "description": "This module provides authentication against password hashes or .htpasswd files",
+        "keywords": [
+            "authcrypt",
+            "simplesamlphp"
+        ]
     },
     {
-        "name": "symfony-cmf/routing",
-        "version": "1.4.1",
-        "version_normalized": "1.4.1.0",
+        "name": "simplesamlphp/simplesamlphp-module-authfacebook",
+        "version": "v0.9.3",
+        "version_normalized": "0.9.3.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony-cmf/routing.git",
-            "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git",
+            "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
-            "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c",
+            "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c",
             "shasum": ""
         },
         "require": {
-            "php": "^5.3.9|^7.0",
-            "psr/log": "1.*",
-            "symfony/http-kernel": "^2.2|3.*",
-            "symfony/routing": "^2.2|3.*"
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
         },
         "require-dev": {
-            "friendsofsymfony/jsrouting-bundle": "^1.1",
-            "symfony-cmf/testing": "^1.3",
-            "symfony/config": "^2.2|3.*",
-            "symfony/dependency-injection": "^2.0.5|3.*",
-            "symfony/event-dispatcher": "^2.1|3.*"
-        },
-        "suggest": {
-            "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
-        },
-        "time": "2017-05-09T08:10:41+00:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.4-dev"
-            }
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
         },
+        "time": "2020-03-13T11:29:21+00:00",
+        "type": "simplesamlphp-module",
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Symfony\\Cmf\\Component\\Routing\\": ""
+                "SimpleSAML\\Module\\authfacebook\\": "lib/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "LGPL-3.0-or-later"
         ],
         "authors": [
             {
-                "name": "Symfony CMF Community",
-                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+                "name": "Andjelko Horvat",
+                "email": "comel@vingd.com"
+            },
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
             }
         ],
-        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
-        "homepage": "http://cmf.symfony.com",
+        "description": "A module that is able to authenticate against Facebook",
         "keywords": [
-            "database",
-            "routing"
+            "facebook",
+            "simplesamlphp"
         ]
     },
     {
-        "name": "symfony/class-loader",
-        "version": "v3.4.41",
-        "version_normalized": "3.4.41.0",
+        "name": "simplesamlphp/simplesamlphp-module-authorize",
+        "version": "v0.9.2",
+        "version_normalized": "0.9.2.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/class-loader.git",
-            "reference": "e4636a4f23f157278a19e5db160c63de0da297d8"
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git",
+            "reference": "c2607a5252ee1256b50ce7795e35513b116998d4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8",
-            "reference": "e4636a4f23f157278a19e5db160c63de0da297d8",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4",
+            "reference": "c2607a5252ee1256b50ce7795e35513b116998d4",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8"
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
         },
         "require-dev": {
-            "symfony/finder": "~2.8|~3.0|~4.0",
-            "symfony/polyfill-apcu": "~1.1"
-        },
-        "suggest": {
-            "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
-        },
-        "time": "2020-03-15T09:38:08+00:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
         },
+        "time": "2020-02-25T15:16:57+00:00",
+        "type": "simplesamlphp-module",
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
-                "Symfony\\Component\\ClassLoader\\": ""
-            },
-            "exclude-from-classmap": [
-                "/Tests/"
-            ]
+                "SimpleSAML\\Module\\authorize\\": "lib/"
+            }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "LGPL-3.0-or-later"
         ],
         "authors": [
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            },
-            {
+                "name": "Ernesto Revilla",
+                "email": "erny@yaco.es"
+            }
+        ],
+        "description": "This module provides a user authorization filter based on attribute matching",
+        "keywords": [
+            "authorize",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-authtwitter",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git",
+            "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a",
+            "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.5",
+            "simplesamlphp/composer-module-installer": "~1.0",
+            "simplesamlphp/simplesamlphp-module-oauth": "^0.9"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.8.35",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T09:00:09+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\authtwitter\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            },
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that is able to perform authentication against Twitter",
+        "keywords": [
+            "simplesamlphp",
+            "twitter"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-authwindowslive",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git",
+            "reference": "f40aecec6c0adaedb6693309840c98cec783876e"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e",
+            "reference": "f40aecec6c0adaedb6693309840c98cec783876e",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T09:01:13+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\authwindowslive\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            },
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that is able to perform authentication against Windows Live",
+        "keywords": [
+            "live",
+            "simplesamlphp",
+            "windows",
+            "windowslive"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-authx509",
+        "version": "v0.9.8",
+        "version_normalized": "0.9.8.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git",
+            "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/66525b1ec4145ec8d0d0e9db4534624b6be4c1fb",
+            "reference": "66525b1ec4145ec8d0d0e9db4534624b6be4c1fb",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.5",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "simplesamlphp/simplesamlphp-module-ldap": "^0.9"
+        },
+        "require-dev": {
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.15"
+        },
+        "time": "2020-12-15T23:06:47+00:00",
+        "type": "simplesamlphp-module",
+        "extra": {
+            "ssp-mixedcase-module-name": "authX509"
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\authX509\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Joost van Dijk",
+                "email": "Joost.vanDijk@surfnet.nl"
+            },
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that is able to authenticate users based on X509 client certificates",
+        "keywords": [
+            "simplesamlphp",
+            "x509"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-authyubikey",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git",
+            "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2",
+            "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "webmozart/assert": "~1.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T08:52:49+00:00",
+        "type": "simplesamlphp-module",
+        "extra": {
+            "ssp-mixedcase-module-name": "authYubikey"
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\modules\\yubikey\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that is able to authenticate against YubiKey",
+        "keywords": [
+            "authyubikey",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-cas",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git",
+            "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e",
+            "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+            "webmozart/assert": "~1.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T09:03:06+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\cas\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            }
+        ],
+        "description": "A module that provides CAS authentication",
+        "keywords": [
+            "cas",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-cdc",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git",
+            "reference": "16a5bfac7299e04e5feb472af328e07598708166"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166",
+            "reference": "16a5bfac7299e04e5feb472af328e07598708166",
+            "shasum": ""
+        },
+        "require": {
+            "simplesamlphp/composer-module-installer": ">=1.1.6"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T09:04:11+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\cdc\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olav.morken@uninett.no"
+            },
+            {
+                "name": "Jaime Perez Crespo",
+                "email": "jaime.perez@uninett.no"
+            }
+        ],
+        "description": "A SimpleSAMLphp module that allows integration with CDC",
+        "homepage": "https://simplesamlphp.org/",
+        "keywords": [
+            "cdc",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-consent",
+        "version": "v0.9.6",
+        "version_normalized": "0.9.6.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git",
+            "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d",
+            "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "webmozart/assert": "<1.7"
+        },
+        "time": "2020-06-15T14:26:23+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\consent\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "lavmrk@gmail.com"
+            }
+        ],
+        "description": "A module that will ask for user consent before releasing attributes",
+        "keywords": [
+            "consent",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-consentadmin",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git",
+            "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1",
+            "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+            "webmozart/assert": "~1.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T09:06:40+00:00",
+        "type": "simplesamlphp-module",
+        "extra": {
+            "ssp-mixedcase-module-name": "consentAdmin"
+        },
+        "installation-source": "dist",
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Jacob Christiansen",
+                "email": "jach@wayf.dk"
+            },
+            {
+                "name": "Olav Morken",
+                "email": "olav.morken@uninett.no"
+            }
+        ],
+        "description": "A module that allows users to manage their consent",
+        "keywords": [
+            "consentadmin",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-discopower",
+        "version": "v0.9.3",
+        "version_normalized": "0.9.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git",
+            "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb",
+            "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "webmozart/assert": "~1.4 <1.6"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-13T07:51:43+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\modules\\discopower\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            }
+        ],
+        "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed",
+        "keywords": [
+            "discopower",
+            "discovery",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver",
+        "version": "v1.0.0",
+        "version_normalized": "1.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git",
+            "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708",
+            "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-05-28T12:37:15+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\exampleattributeserver\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            }
+        ],
+        "description": "An example for SAML attributes queries",
+        "keywords": [
+            "exampleattributeserver",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-expirycheck",
+        "version": "v0.9.3",
+        "version_normalized": "0.9.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git",
+            "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20",
+            "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "webmozart/assert": "~1.4"
+        },
+        "require-dev": {
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
+        },
+        "time": "2019-12-14T13:20:46+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\expirycheck\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Alex Mihičinac",
+                "email": "alexm@arnes.si"
+            }
+        ],
+        "description": "The expirycheck module validates user's expiry date",
+        "keywords": [
+            "expirycheck",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-ldap",
+        "version": "v0.9.10",
+        "version_normalized": "0.9.10.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git",
+            "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77",
+            "reference": "78f04cbe41bfb9dcbcdeff4b5f12e67c060e1a77",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "suggest": {
+            "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp"
+        },
+        "time": "2020-09-16T21:09:07+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\ldap\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            },
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that provides authentication against LDAP stores",
+        "keywords": [
+            "ldap",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-memcachemonitor",
+        "version": "v0.9.2",
+        "version_normalized": "0.9.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git",
+            "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/900b5c6b59913d9013b8dae090841a127ae55ae5",
+            "reference": "900b5c6b59913d9013b8dae090841a127ae55ae5",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "~0.0.6"
+        },
+        "time": "2021-01-25T15:44:44+00:00",
+        "type": "simplesamlphp-module",
+        "extra": {
+            "ssp-mixedcase-module-name": "memcacheMonitor"
+        },
+        "installation-source": "dist",
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            },
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that is able display usage statistics of a memcache(d) store",
+        "keywords": [
+            "memcachemonitor",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-memcookie",
+        "version": "v1.2.2",
+        "version_normalized": "1.2.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git",
+            "reference": "39535304e8d464b7baa1e82cb441fa432947ff57"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57",
+            "reference": "39535304e8d464b7baa1e82cb441fa432947ff57",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": ">=1.1.6"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.6"
+        },
+        "time": "2019-08-08T18:33:47+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olav.morken@uninett.no"
+            },
+            {
+                "name": "Jaime Perez Crespo",
+                "email": "jaime.perez@uninett.no"
+            }
+        ],
+        "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.",
+        "homepage": "https://simplesamlphp.org/",
+        "keywords": [
+            "Auth MemCookie",
+            "apache",
+            "cookies",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-metarefresh",
+        "version": "v0.9.6",
+        "version_normalized": "0.9.6.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git",
+            "reference": "e284306a7097297765b5b78a4e28f19f18d4e001"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001",
+            "reference": "e284306a7097297765b5b78a4e28f19f18d4e001",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.18"
+        },
+        "time": "2020-07-31T14:43:37+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\metarefresh\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            }
+        ],
+        "description": "The metarefresh module will download and parse metadata documents and store them locally",
+        "keywords": [
+            "metarefresh",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-negotiate",
+        "version": "v0.9.10",
+        "version_normalized": "0.9.10.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git",
+            "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/db05ff40399c66e3f14697a8162da6b2fbdab47d",
+            "reference": "db05ff40399c66e3f14697a8162da6b2fbdab47d",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+            "webmozart/assert": "~1.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "sensiolabs/security-checker": "^5.0.3",
+            "simplesamlphp/simplesamlphp": "dev-testing-1.18",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+            "squizlabs/php_codesniffer": "^3.5"
+        },
+        "suggest": {
+            "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used"
+        },
+        "time": "2021-01-22T13:36:09+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\negotiate\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            }
+        ],
+        "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism",
+        "keywords": [
+            "negotiate",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-oauth",
+        "version": "v0.9.2",
+        "version_normalized": "0.9.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git",
+            "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61",
+            "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61",
+            "shasum": ""
+        },
+        "require": {
+            "simplesamlphp/composer-module-installer": ">=1.1.6"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.8.36",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2020-04-29T19:37:43+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olav.morken@uninett.no"
+            },
+            {
+                "name": "Jaime Perez Crespo",
+                "email": "jaime.perez@uninett.no"
+            }
+        ],
+        "description": "A SimpleSAMLphp module that allows integration with OAuth1,",
+        "homepage": "https://simplesamlphp.org/",
+        "keywords": [
+            "oauth1",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-preprodwarning",
+        "version": "v0.9.2",
+        "version_normalized": "0.9.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git",
+            "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638",
+            "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "webmozart/assert": "^1.4"
+        },
+        "time": "2020-04-09T13:05:27+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\preprodwarning\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            }
+        ],
+        "description": "Display a warning when using a pre-production environment",
+        "keywords": [
+            "preprodwarning",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-radius",
+        "version": "v0.9.3",
+        "version_normalized": "0.9.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git",
+            "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d",
+            "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.7"
+        },
+        "time": "2019-10-03T18:13:07+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\radius\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            }
+        ],
+        "description": "A module that is able perform authentication against a RADIUS server",
+        "keywords": [
+            "radius",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-riak",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git",
+            "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991",
+            "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "phpfastcache/riak-client": "^3.4",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T08:28:45+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\riak\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Tim van Dijen",
+                "email": "tvdijen@gmail.com"
+            }
+        ],
+        "description": "A module that is able to store key/value pairs in a Riak store",
+        "keywords": [
+            "riak",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-sanitycheck",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git",
+            "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a",
+            "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "webmozart/assert": "~1.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2020-05-07T11:34:29+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\sanitycheck\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            }
+        ],
+        "description": "Perform sanity checks on configuration",
+        "keywords": [
+            "sanitycheck",
+            "simplesamlphp"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-smartattributes",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git",
+            "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6",
+            "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17"
+        },
+        "time": "2019-12-03T09:24:09+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\smartattributes\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            }
+        ],
+        "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.",
+        "keywords": [
+            "simplesamlphp",
+            "smartattributes"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-sqlauth",
+        "version": "v0.9.1",
+        "version_normalized": "0.9.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git",
+            "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b",
+            "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "webmozart/assert": "^1.4"
+        },
+        "time": "2019-12-03T09:07:09+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\sqlauth\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-3.0-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Olav Morken",
+                "email": "olavmrk@gmail.com"
+            }
+        ],
+        "description": "This is a authentication module for authenticating a user against a SQL database",
+        "keywords": [
+            "simplesamlphp",
+            "sqlauth"
+        ]
+    },
+    {
+        "name": "simplesamlphp/simplesamlphp-module-statistics",
+        "version": "v0.9.6",
+        "version_normalized": "0.9.6.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git",
+            "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/03fb6bdbbf5ce0a0cb257208db79aacac227ac10",
+            "reference": "03fb6bdbbf5ce0a0cb257208db79aacac227ac10",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6",
+            "simplesamlphp/composer-module-installer": "~1.1",
+            "webmozart/assert": "^1.4"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "simplesamlphp/simplesamlphp": "^1.17",
+            "simplesamlphp/simplesamlphp-test-framework": "^0.0.12"
+        },
+        "time": "2021-01-25T15:15:26+00:00",
+        "type": "simplesamlphp-module",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\Module\\statistics\\": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1-or-later"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Åkre Solberg",
+                "email": "andreas.solberg@uninett.no"
+            }
+        ],
+        "description": "The SimpleSAMLphp statistics module",
+        "keywords": [
+            "simplesamlphp",
+            "statistics"
+        ]
+    },
+    {
+        "name": "simplesamlphp/twig-configurable-i18n",
+        "version": "v2.3.4",
+        "version_normalized": "2.3.4.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git",
+            "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a",
+            "reference": "e2bffc7eed3112a0b3870ef5b4da0fd74c7c4b8a",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=7.1",
+            "twig/extensions": "@dev"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "^7.5",
+            "sensiolabs/security-checker": "~6.0.3",
+            "simplesamlphp/simplesamlphp-test-framework": "~0.1.2",
+            "squizlabs/php_codesniffer": "^3.5",
+            "twig/twig": "^2.13"
+        },
+        "time": "2020-08-27T12:51:10+00:00",
+        "type": "project",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "SimpleSAML\\TwigConfigurableI18n\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "LGPL-2.1"
+        ],
+        "authors": [
+            {
+                "name": "Jaime Perez",
+                "email": "jaime.perez@uninett.no"
+            }
+        ],
+        "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
+        "keywords": [
+            "extension",
+            "gettext",
+            "i18n",
+            "internationalization",
+            "translation",
+            "twig"
+        ]
+    },
+    {
+        "name": "stack/builder",
+        "version": "v1.0.5",
+        "version_normalized": "1.0.5.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/stackphp/builder.git",
+            "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+            "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0",
+            "symfony/http-foundation": "~2.1|~3.0|~4.0",
+            "symfony/http-kernel": "~2.1|~3.0|~4.0"
+        },
+        "require-dev": {
+            "silex/silex": "~1.0"
+        },
+        "time": "2017-11-18T14:57:29+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Stack": "src"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Igor Wiedler",
+                "email": "igor@wiedler.ch"
+            }
+        ],
+        "description": "Builder for stack middlewares based on HttpKernelInterface.",
+        "keywords": [
+            "stack"
+        ]
+    },
+    {
+        "name": "stecman/symfony-console-completion",
+        "version": "0.11.0",
+        "version_normalized": "0.11.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/stecman/symfony-console-completion.git",
+            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
+            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2",
+            "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
+        },
+        "time": "2019-11-24T17:03:06+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "0.10.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Stephen Holdaway",
+                "email": "stephen@stecman.co.nz"
+            }
+        ],
+        "description": "Automatic BASH completion for Symfony Console Component based applications."
+    },
+    {
+        "name": "symfony-cmf/routing",
+        "version": "1.4.1",
+        "version_normalized": "1.4.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony-cmf/routing.git",
+            "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+            "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac",
+            "shasum": ""
+        },
+        "require": {
+            "php": "^5.3.9|^7.0",
+            "psr/log": "1.*",
+            "symfony/http-kernel": "^2.2|3.*",
+            "symfony/routing": "^2.2|3.*"
+        },
+        "require-dev": {
+            "friendsofsymfony/jsrouting-bundle": "^1.1",
+            "symfony-cmf/testing": "^1.3",
+            "symfony/config": "^2.2|3.*",
+            "symfony/dependency-injection": "^2.0.5|3.*",
+            "symfony/event-dispatcher": "^2.1|3.*"
+        },
+        "suggest": {
+            "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version (~2.1)"
+        },
+        "time": "2017-05-09T08:10:41+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.4-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Symfony\\Cmf\\Component\\Routing\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony CMF Community",
+                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+            }
+        ],
+        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
+        "homepage": "http://cmf.symfony.com",
+        "keywords": [
+            "database",
+            "routing"
+        ]
+    },
+    {
+        "name": "symfony/class-loader",
+        "version": "v3.4.41",
+        "version_normalized": "3.4.41.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/class-loader.git",
+            "reference": "e4636a4f23f157278a19e5db160c63de0da297d8"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/class-loader/zipball/e4636a4f23f157278a19e5db160c63de0da297d8",
+            "reference": "e4636a4f23f157278a19e5db160c63de0da297d8",
+            "shasum": ""
+        },
+        "require": {
+            "php": "^5.5.9|>=7.0.8"
+        },
+        "require-dev": {
+            "symfony/finder": "~2.8|~3.0|~4.0",
+            "symfony/polyfill-apcu": "~1.1"
+        },
+        "suggest": {
+            "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
+        },
+        "time": "2020-03-15T09:38:08+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.4-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Symfony\\Component\\ClassLoader\\": ""
+            },
+            "exclude-from-classmap": [
+                "/Tests/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
                 "name": "Symfony Community",
                 "homepage": "https://symfony.com/contributors"
             }
@@ -11900,17 +13427,17 @@
     },
     {
         "name": "symfony/config",
-        "version": "v4.4.17",
-        "version_normalized": "4.4.17.0",
+        "version": "v4.4.19",
+        "version_normalized": "4.4.19.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/config.git",
-            "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065"
+            "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/config/zipball/4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
-            "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
+            "url": "https://api.github.com/repos/symfony/config/zipball/2c4c7827a7e143f5cf375666641b0f448eab8802",
+            "reference": "2c4c7827a7e143f5cf375666641b0f448eab8802",
             "shasum": ""
         },
         "require": {
@@ -11931,7 +13458,7 @@
         "suggest": {
             "symfony/yaml": "To use the yaml reference dumper"
         },
-        "time": "2020-11-16T11:15:53+00:00",
+        "time": "2021-01-27T09:09:26+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -11956,7 +13483,7 @@
                 "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Symfony Config Component",
+        "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
         "homepage": "https://symfony.com",
         "funding": [
             {
@@ -12368,24 +13895,24 @@
     },
     {
         "name": "symfony/filesystem",
-        "version": "v4.4.17",
-        "version_normalized": "4.4.17.0",
+        "version": "v4.4.19",
+        "version_normalized": "4.4.19.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/filesystem.git",
-            "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2"
+            "reference": "83a6feed14846d2d9f3916adbaf838819e4e3380"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/filesystem/zipball/17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
-            "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
+            "url": "https://api.github.com/repos/symfony/filesystem/zipball/83a6feed14846d2d9f3916adbaf838819e4e3380",
+            "reference": "83a6feed14846d2d9f3916adbaf838819e4e3380",
             "shasum": ""
         },
         "require": {
             "php": ">=7.1.3",
             "symfony/polyfill-ctype": "~1.8"
         },
-        "time": "2020-11-11T22:20:15+00:00",
+        "time": "2021-01-27T09:09:26+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -12410,7 +13937,7 @@
                 "homepage": "https://symfony.com/contributors"
             }
         ],
-        "description": "Symfony Filesystem Component",
+        "description": "Provides basic utilities for the filesystem",
         "homepage": "https://symfony.com",
         "funding": [
             {
@@ -13907,32 +15434,33 @@
     },
     {
         "name": "webmozart/assert",
-        "version": "1.9.1",
-        "version_normalized": "1.9.1.0",
+        "version": "1.5.0",
+        "version_normalized": "1.5.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/webmozarts/assert.git",
-            "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+            "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
-            "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+            "url": "https://api.github.com/repos/webmozarts/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
+            "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
             "shasum": ""
         },
         "require": {
-            "php": "^5.3.3 || ^7.0 || ^8.0",
+            "php": "^5.3.3 || ^7.0",
             "symfony/polyfill-ctype": "^1.8"
         },
-        "conflict": {
-            "phpstan/phpstan": "<0.12.20",
-            "vimeo/psalm": "<3.9.1"
-        },
         "require-dev": {
             "phpunit/phpunit": "^4.8.36 || ^7.5.13"
         },
-        "time": "2020-07-08T17:02:28+00:00",
+        "time": "2019-08-24T08:43:50+00:00",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.3-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
diff --git a/vendor/gettext/gettext/CHANGELOG.md b/vendor/gettext/gettext/CHANGELOG.md
index d270cd8193..054e8d8235 100644
--- a/vendor/gettext/gettext/CHANGELOG.md
+++ b/vendor/gettext/gettext/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
 
 Previous releases are documented in [github releases](https://github.com/oscarotero/Gettext/releases)
 
+## [4.8.3] - 2020-11-18
+### Fixed
+- Blade extractor for Laravel8/Jetstream [#261]
+
 ## [4.8.2] - 2019-12-02
 ### Fixed
 - UTF-8 handling for VueJs extractor [#242]
@@ -155,7 +159,9 @@ Previous releases are documented in [github releases](https://github.com/oscarot
 [#231]: https://github.com/oscarotero/Gettext/issues/231
 [#238]: https://github.com/oscarotero/Gettext/issues/238
 [#242]: https://github.com/oscarotero/Gettext/issues/242
+[#261]: https://github.com/oscarotero/Gettext/issues/261
 
+[4.8.3]: https://github.com/oscarotero/Gettext/compare/v4.8.2...v4.8.3
 [4.8.2]: https://github.com/oscarotero/Gettext/compare/v4.8.1...v4.8.2
 [4.8.1]: https://github.com/oscarotero/Gettext/compare/v4.8.0...v4.8.1
 [4.8.0]: https://github.com/oscarotero/Gettext/compare/v4.7.0...v4.8.0
diff --git a/vendor/gettext/gettext/src/Extractors/Blade.php b/vendor/gettext/gettext/src/Extractors/Blade.php
index 3c8c9da031..9122bb0c75 100644
--- a/vendor/gettext/gettext/src/Extractors/Blade.php
+++ b/vendor/gettext/gettext/src/Extractors/Blade.php
@@ -19,6 +19,11 @@ public static function fromString($string, Translations $translations, array $op
         if (empty($options['facade'])) {
             $cachePath = empty($options['cachePath']) ? sys_get_temp_dir() : $options['cachePath'];
             $bladeCompiler = new BladeCompiler(new Filesystem(), $cachePath);
+
+            if (method_exists($bladeCompiler, 'withoutComponentTags')) {
+                $bladeCompiler->withoutComponentTags();
+            }
+
             $string = $bladeCompiler->compileString($string);
         } else {
             $string = $options['facade']::compileString($string);
diff --git a/vendor/jaimeperez/twig-configurable-i18n/tests/bootstrap.php b/vendor/jaimeperez/twig-configurable-i18n/tests/bootstrap.php
deleted file mode 100644
index e23960d24a..0000000000
--- a/vendor/jaimeperez/twig-configurable-i18n/tests/bootstrap.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-
-$projectRoot = dirname(__DIR__);
-require_once($projectRoot.'/vendor/autoload.php');
diff --git a/vendor/phpfastcache/riak-client/.gitattributes b/vendor/phpfastcache/riak-client/.gitattributes
new file mode 100644
index 0000000000..c7586b6c3e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/.gitattributes
@@ -0,0 +1,11 @@
+* text=auto
+
+*.php text eol=lf
+*.yml text eol=lf
+*.xml text eol=lf
+*.md  text eol=lf
+
+*.png binary
+*.jpg binary
+*.gif binary
+*.ico binary
diff --git a/vendor/phpfastcache/riak-client/.gitignore b/vendor/phpfastcache/riak-client/.gitignore
new file mode 100644
index 0000000000..04c2dde448
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/.gitignore
@@ -0,0 +1,31 @@
+# Created by .gitignore support plugin (hsz.mobi)
+## JetBrains IDE project directory
+.idea/
+
+## File-based project format
+*.ipr
+*.iws
+
+## Additional for IntelliJ
+out/
+
+# generated by mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# generated by JIRA plugin
+atlassian-ide-plugin.xml
+
+# generated by Crashlytics plugin (for Android Studio and Intellij)
+com_crashlytics_export_strings.xml
+
+# ignore composer vendor directory and lock file
+vendor
+composer.lock
+
+# ignore mac files
+.DS_Store/
+
+docs
+
+composer
+composer.phar
diff --git a/vendor/phpfastcache/riak-client/.gitmodules b/vendor/phpfastcache/riak-client/.gitmodules
new file mode 100644
index 0000000000..7181e9dd75
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "tools"]
+	path = tools
+	url = https://github.com/basho/riak-client-tools
diff --git a/vendor/phpfastcache/riak-client/.travis.yml b/vendor/phpfastcache/riak-client/.travis.yml
new file mode 100644
index 0000000000..9e9c16fdb8
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/.travis.yml
@@ -0,0 +1,29 @@
+language: php
+php:
+- 5.4
+- 5.5
+- 5.6
+- 7.0
+- 7.1
+sudo: required
+dist: trusty
+addons:
+  hosts:
+    - riak-test
+env:
+  - RIAK_DOWNLOAD_URL=http://s3.amazonaws.com/downloads.basho.com/riak/2.0/2.0.7/ubuntu/trusty/riak_2.0.7-1_amd64.deb
+  - RIAK_DOWNLOAD_URL=http://s3.amazonaws.com/downloads.basho.com/riak/2.2/2.2.0/ubuntu/trusty/riak_2.2.0-1_amd64.deb
+before_script:
+  - phpenv config-rm xdebug.ini || echo 'xdebug.ini not installed'
+  - composer self-update
+  - composer install --prefer-source
+  - sudo ./tools/travis-ci/riak-install -d "$RIAK_DOWNLOAD_URL"
+  - sudo ./tools/setup-riak -s
+script:
+  - sudo riak-admin security disable
+  - make test
+  - sudo riak-admin security enable
+  - make security-test
+notifications:
+  slack:
+    secure: ZtgcjTxhTxrzWW6MIHLRtucW/BMm42RKS3nGRtSfgER9rx7oJ0Y9gOYkh1FM0GsM7Z11Q/iDhWs/8WTccAV0PrMZ6KHaq54wGmfYyqwPM4YreUwQ87PnOW4wZbl0TJTeWutasEwZvnVJ8VEyyQcS2PHt0zlsENn0XWvobvaZ+FM=
diff --git a/vendor/phpfastcache/riak-client/CONTRIBUTING.md b/vendor/phpfastcache/riak-client/CONTRIBUTING.md
new file mode 100644
index 0000000000..73b41bb868
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/CONTRIBUTING.md
@@ -0,0 +1,118 @@
+##Contributing
+
+This repo's maintainers are engineers at Basho and we welcome your contribution to the project!
+
+### An honest disclaimer
+
+Due to our obsession with stability and our rich ecosystem of users, community updates on this repo may take a little longer to review. 
+
+The most helpful way to contribute is by reporting your experience through issues. Issues may not be updated while we review internally, but they're still incredibly appreciated.
+
+Thank you for being part of the community! We love you for it. 
+
+## Helping through sample code
+
+The most immediately helpful way you can benefit this project is by forking the repo, **adding further [examples](/examples)** and submitting a pull request.
+
+## How-to contribute to the PHP client
+
+**_IMPORTANT_**: This is an open source project licensed under the Apache 2.0 License. We encourage contributions to the project from the community. We ask that you keep in mind these considerations when planning your contribution.
+
+* Whether your contribution is for a bug fix or a feature request, **create an [Issue](https://github.com/basho/riak-php-client/issues)** and let us know what you are thinking.
+* **For bugs**, if you have already found a fix, feel free to submit a Pull Request referencing the Issue you created.
+* **For feature requests**, we want to improve upon the library incrementally which means small changes at a time. In order ensure your PR can be reviewed in a timely manner, please keep PRs small, e.g. <10 files and <500 lines changed. If you think this is unrealistic, then mention that within the Issue and we can discuss it.
+* Before you open the PR, please review the following regarding Coding Standards, Docblock comments and unit / integration tests to reduce delays in getting your changes approved.
+
+### Pull Request Process
+
+Here's how to get started:
+
+* Fork the appropriate sub-projects that are affected by your change. 
+* Create a topic branch for your change and checkout that branch.
+     `git checkout -b some-topic-branch`
+* Make your changes and run the test suite if one is provided. (see below)
+* Commit your changes and push them to your fork.
+* Open pull requests for the appropriate projects.
+* Contributors will review your pull request, suggest changes, and merge it when it's ready and/or offer feedback.
+
+### Coding Standards
+Here are the standards we expect to see when considering pull requests
+
+* [PSR-2 Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
+* [PHP / Pear Docblock Guide](http://pear.php.net/manual/en/standards.sample.php)
+* [PHPUnit Tests](https://phpunit.de/manual/current/en/phpunit-book.html)
+* Please suffix all Interfaces and Traits with the descriptors Interface and Trait, e.g. `ObjectInterface` & `ObjectTrait`
+
+### Docblock Comments
+It is expected that any new code is updated with a reasonable docblock comment. 
+
+This includes:
+
+* Short & long descriptions (where appropriate) for all classes and all class members, properties and constants.
+* Please add code examples where it makes sense using the `<code>` tag.
+* A `@author` tag need to be included on all new classes.
+* A `@var` tag on every class property
+* A `@param` tag for every parameter on a class method
+* A `@return` tag for every class method that returns a value
+* A `@throws` tag for every method that has a thrown execution within it 
+
+Here is an example of a class docblock:
+```php
+/**
+ * A more elaborate description of what this class does. It may include warnings, limitations or examples.
+ *
+ * <code>
+ * $nodes = (new Node\Builder)
+ *   ->atHost('localhost')
+ *   ->onPort(8098)
+ *   ->build()
+ *
+ * $riak = new Riak($nodes);
+ * </code>
+ *
+ * @author  Author Name <author@domain.com>
+ */
+```
+
+It is not necessary to add short / long descriptions to simple getters & setters. Use the `@since` tag where appropriate.
+
+### Tests
+We want to ensure that all code that is included in a release has proper coverage with unit tests. It is expected that
+all pull requests that include new classes or class methods have appropriate unit tests included with the PR.
+
+There are three types of tests that we use, each has been setup within the phpunit.xml within the root of the library and are described below.
+<dl>
+<dt>Unit Tests</dt>
+<dd>Focus is on each unit of work. It is the most verbose as each member of every class should be tested. These tests use mock objects, so they do not require a live Riak instance.</dd>
+<dt>Functional Tests</dt>
+<dd>Focus is on the functionality the user is likely to regularly execute, e.g. storing an object. These tests will connect to and use a live Riak instance.</dd>
+<dt>Scenario Tests</dt>
+<dd>Focus is on testing how the library and Riak respond to edge cases, e.g. how it handles when a node becomes unreachable. These tests will connect to and use a live Riak instance.</dd>
+</dl>
+
+#### Running Tests
+We also expect that before submitting a pull request, that you have run the tests to ensure that all of them continue to pass after your changes.
+
+To run the tests, clone this repository and run `composer update` from the repository root, then you can execute all the tests by simply running `php vendor/bin/phpunit`. To execute only a single group of tests, you can use the "testsuite" argument, e.g. `php vendor/bin/phpunit --testsuite 'Unit Tests'`.
+
+You can execute code coverage analysis along side the test run by appending ` --coverage-text` to the command above.
+
+Please note, that the Functional and Scenario tests require a live Riak instance to test against. Also, the following bucket types to be created and activated on the Riak instance. If using the [riak-clients-vagrant](https://github.com/basho-labs/riak-clients-vagrant) project, the `integration_testing` role creates these bucket types for you.
+
+```bash
+riak-admin bucket-type create counters '{"props":{"datatype":"counter"}}'
+riak-admin bucket-type create sets '{"props":{"datatype":"set"}}'
+riak-admin bucket-type create maps '{"props":{"datatype":"map"}}'
+riak-admin bucket-type create yokozuna '{"props":{}}'
+
+riak-admin bucket-type activate counters
+riak-admin bucket-type activate sets
+riak-admin bucket-type activate maps
+riak-admin bucket-type activate yokozuna
+```
+
+## Thank You
+
+You can [read the full guidelines for bug reporting and code contributions](http://docs.basho.com/riak/latest/community/bugs/) on the Riak Docs. 
+
+And **thank you!** Your contribution is incredible important to us.
diff --git a/vendor/phpfastcache/riak-client/LICENSE b/vendor/phpfastcache/riak-client/LICENSE
new file mode 100644
index 0000000000..4947287f7b
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/LICENSE
@@ -0,0 +1,177 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/Makefile b/vendor/phpfastcache/riak-client/Makefile
new file mode 100644
index 0000000000..09c49c2608
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/Makefile
@@ -0,0 +1,57 @@
+.PHONY: all unit-test integration-test security-test
+.PHONY: install-composer install-deps help
+.PHONY: release
+
+all: test
+
+test: unit-test integration-test scenario-test
+
+unit-test:
+	@php ./vendor/bin/phpunit --testsuite=unit-tests
+
+integration-test:
+	@php ./vendor/bin/phpunit --testsuite=functional-tests
+
+security-test:
+	@php ./vendor/bin/phpunit  --testsuite=security-tests
+
+scenario-test:
+	@php ./vendor/bin/phpunit  --testsuite=scenario-tests
+
+timeseries-test:
+	@php ./vendor/bin/phpunit tests/functional/TimeSeriesOperationsTest.php
+
+install-deps:
+	@./composer install
+
+install-composer:
+	@rm -f ./composer.phar ./composer
+	@php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
+	@php ./composer-setup.php --filename=composer
+	@rm -f ./composer-setup.php
+
+release:
+ifeq ($(VERSION),)
+	$(error VERSION must be set to deploy this code)
+endif
+ifeq ($(RELEASE_GPG_KEYNAME),)
+	$(error RELEASE_GPG_KEYNAME must be set to deploy this code)
+endif
+	@./tools/build/publish $(VERSION) master validate
+	@git tag --sign -a "$(VERSION)" -m "riak-php-client $(VERSION)" --local-user "$(RELEASE_GPG_KEYNAME)"
+	@git push --tags
+	@./tools/build/publish $(VERSION) master 'Riak PHP Client' 'riak-php-client'
+
+help:
+	@echo ''
+	@echo ' Targets:'
+	@echo '-----------------------------------------------------------------'
+	@echo ' all                          - Run all tests                    '
+	@echo ' install-deps                 - Install required dependencies    '
+	@echo ' install-composer             - Installs composer                '
+	@echo ' test                         - Run unit & integration tests     '
+	@echo ' unit-test                    - Run unit tests                   '
+	@echo ' integration-test             - Run integration tests            '
+	@echo ' security-test                - Run security tests               '
+	@echo '-----------------------------------------------------------------'
+	@echo ''
diff --git a/vendor/phpfastcache/riak-client/README.md b/vendor/phpfastcache/riak-client/README.md
new file mode 100644
index 0000000000..d6a87c2dba
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/README.md
@@ -0,0 +1,110 @@
+# Riak Client for PHP (PhpFastCache Fork)
+#### (Fork of the official basho/riak due to maintainer significant inactivity)
+
+[![Packagist](https://img.shields.io/packagist/v/phpfastcache/riak-client.svg?maxAge=2592000)](https://packagist.org/packages/phpfastcache/riak-client)
+
+**Riak PHP Client** is a library which makes it easy to communicate with [Riak](http://basho.com/riak/), an open source, distributed database that focuses on high availability, horizontal scalability, and *predictable*
+latency. This library communicates with Riak's HTTP interface using the cURL extension. If you want to communicate with Riak using the Protocol Buffers interface, use the [Official PHP PB Client](https://github.com/basho/riak-phppb-client). Both Riak and this library are maintained by [Basho Technologies](http://www.basho.com/). 
+
+To see other clients available for use with Riak visit our [Documentation Site](http://docs.basho.com/riak/latest/dev/using/libraries)
+
+
+1. [Installation](#installation)
+1. [Documentation](#documentation)
+1. [Contributing](#contributing)
+	* [An honest disclaimer](#an-honest-disclaimer)
+1. [Roadmap](#roadmap)
+1. [License and Authors](#license-and-authors)
+
+
+## Installation
+
+### Dependencies
+- PHP 5.4+ (Up to PHP 7.2 with the 1.4.4 update provided by PhpFastCache)
+- PHP Extensions: curl, json and openssl [required for security features]
+- Riak 2.1+
+- [Composer PHP Dependency Manager](https://getcomposer.org/)
+
+### Composer Install
+
+This library has been added to [Packagist](https://packagist.org/packages/phpfastcache/) to simplify the installation process. Run the following [composer](https://getcomposer.org/) command:
+
+```console
+$ composer require "phpfastcache/riak-client": "^1.4.4"
+```
+
+Alternately, manually add the following to your `composer.json`, in the `require` section:
+
+```javascript
+"require": {
+    "phpfastcache/riak-client": "^1.4.4"
+}
+```
+
+And then run `composer update` to ensure the module is installed.
+
+## Documentation
+
+* Master: [![Build Status](https://secure.travis-ci.org/basho/riak-php-client.png?branch=master)](http://travis-ci.org/basho/riak-php-client)
+
+A fully traversable version of the API documentation for this library can be found on [Github Pages](http://basho.github.io/riak-php-client). 
+
+### Example Usage
+
+Below is a short example of using the client. More substantial sample code is available [in examples](/examples).
+
+```php
+// lib classes are included via the Composer autoloader files
+use Basho\Riak;
+use Basho\Riak\Node;
+use Basho\Riak\Command;
+
+// define the connection info to our Riak nodes
+$nodes = (new Node\Builder)
+    ->onPort(10018)
+    ->buildCluster(['riak1.company.com', 'riak2.company.com', 'riak3.company.com',]);
+
+// instantiate the Riak client
+$riak = new Riak($nodes);
+
+// build a command to be executed against Riak
+$command = (new Command\Builder\StoreObject($riak))
+    ->buildObject('some_data')
+    ->buildBucket('users')
+    ->build();
+    
+// Receive a response object
+$response = $command->execute();
+
+// Retrieve the Location of our newly stored object from the Response object
+$object_location = $response->getLocation();
+```
+
+## Contributing
+
+This repo's maintainers are engineers at Basho and we welcome your contribution to the project! You can start by reviewing [CONTRIBUTING.md](CONTRIBUTING.md) for information on everything from testing to coding standards.
+
+### An honest disclaimer
+
+Due to our obsession with stability and our rich ecosystem of users, community updates on this repo may take a little longer to review. 
+
+The most helpful way to contribute is by reporting your experience through issues. Issues may not be updated while we review internally, but they're still incredibly appreciated.
+
+Thank you for being part of the community! We love you for it. 
+
+## Roadmap
+
+* Current develop & master branches contain feature support for Riak version 2.1+
+* Add support for Riak TS Q2 2016
+
+## License and Authors
+
+### Active authors
+* Author: Georges.L (https://github.com/Geolim4)
+
+### Former authors
+* Author: Christopher Mancini (https://github.com/christophermancini)
+* Author: Alex Moore (https://github.com/alexmoore)
+* Author: Luke Bakken (https://github.com/lukebakken)
+
+Copyright (c) 2015 Basho Technologies, Inc. Licensed under the Apache License, Version 2.0 (the "License"). For more details, see [License](License).
diff --git a/vendor/phpfastcache/riak-client/RELNOTES.md b/vendor/phpfastcache/riak-client/RELNOTES.md
new file mode 100644
index 0000000000..9ac206c3d2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/RELNOTES.md
@@ -0,0 +1,9 @@
+Release Notes
+=============
+
+* [`3.3.0`]
+  * Add support for Riak TS 1.5 BLOB fields
+* [`3.2.0`](https://github.com/basho/riak-php-client/issues?q=milestone%3Ariak-php-client-3.2.0)
+* [`3.1.0`]
+ * Created RELNOTES.md file
+ * Added support for Riak TS 1.3
diff --git a/vendor/phpfastcache/riak-client/apigen.neon b/vendor/phpfastcache/riak-client/apigen.neon
new file mode 100644
index 0000000000..4f715178ab
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/apigen.neon
@@ -0,0 +1,13 @@
+# execute from the root directory
+# ./vendor/bin/apigen generate
+source:         src
+
+destination:    ../docs/riak-php-client
+
+templateTheme:  bootstrap
+
+title:          Official Riak Client for PHP
+
+tree:           true
+
+baseUrl:       https://basho.github.io/riak-php-client/
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/composer.json b/vendor/phpfastcache/riak-client/composer.json
new file mode 100644
index 0000000000..f936919308
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/composer.json
@@ -0,0 +1,60 @@
+{
+  "name": "phpfastcache/riak-client",
+  "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)",
+  "type": "library",
+  "keywords": [
+    "basho",
+    "riak",
+    "client",
+    "driver",
+    "database",
+    "nosql",
+    "kv",
+    "datatype",
+    "crdt",
+    "data"
+  ],
+  "homepage": "https://github.com/PHPSocialNetwork/riak-php-client",
+  "license": "Apache-2.0",
+  "authors": [
+    {
+      "name": "Georges.L",
+      "email": "contact@geolim4.com",
+      "homepage": "https://github.com/Geolim4",
+      "role": "Maintainer"
+    },
+    {
+      "name": "Christopher Mancini",
+      "email": "cmancini@basho.com",
+      "homepage": "https://github.com/christophermancini",
+      "role": "Former Lead Developer"
+    },
+    {
+      "name": "Alex Moore",
+      "email": "amoore@basho.com",
+      "homepage": "https://github.com/alexmoore",
+      "role": "Former Developer"
+    }
+  ],
+  "autoload": {
+    "psr-4": {"Basho\\": "src/"}
+  },
+  "autoload-dev": {
+    "psr-4": {"Basho\\Tests\\": "tests/"}
+  },
+  "support": {
+    "issues": "https://github.com/PHPSocialNetwork/riak-php-client/issues"
+  },
+  "conflict": {
+    "basho/riak": "*"
+  },
+  "require": {
+    "php": ">=5.4",
+    "ext-json": "*",
+    "ext-curl": "*"
+  },
+  "require-dev": {
+    "phpunit/phpunit": "4.8.*",
+    "apigen/apigen": "4.1.*"
+  }
+}
diff --git a/vendor/phpfastcache/riak-client/examples/MapDataModel.php b/vendor/phpfastcache/riak-client/examples/MapDataModel.php
new file mode 100644
index 0000000000..38eb49e0e5
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/examples/MapDataModel.php
@@ -0,0 +1,246 @@
+<?php
+
+require __DIR__ . '/../vendor/autoload.php';
+
+use Basho\Riak;
+
+class User
+{
+    /**
+     * @var Riak $riak
+     */
+    private $riak = null;
+
+    /**
+     * @var Riak\DataType\Map $data
+     */
+    private $data = null;
+
+    /**
+     * @var Riak\Bucket $bucket
+     */
+    private $bucket;
+
+    /**
+     * @var Riak\Location $location
+     */
+    private $location;
+
+    /**
+     * @var string $first_name
+     */
+    private $first_name;
+
+    /**
+     * @var string $last_name
+     */
+    private $last_name;
+
+    public function __construct(Riak $riak, $first_name, $last_name)
+    {
+        $this->riak = $riak;
+        $this->bucket = new Riak\Bucket('users', 'maps');
+        $this->first_name = $first_name;
+        $this->last_name = $last_name;
+        $this->location = new Riak\Location(sprintf('%s_%s', $first_name, $last_name), $this->bucket);
+    }
+
+    public function __toString()
+    {
+        return json_encode([
+            'first_name'   => $this->first_name,
+            'last_name'    => $this->last_name,
+            'interests'    => $this->getInterests(),
+            'visits'       => $this->getVisitCount(),
+            'paid_account' => $this->getPaidAccount()
+        ]);
+    }
+
+    public function getInterests()
+    {
+        return $this->getData()->getSet('interests')->getData();
+    }
+
+    private function getData()
+    {
+        $response = (new Riak\Command\Builder\FetchMap($this->riak))
+            ->atLocation($this->location)
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        } elseif ($response->isNotFound()) {
+            $this->data = $this->init();
+        } else {
+            throw new Exception('Unknown error: ' . $response->getStatusCode());
+        }
+
+        return $this->data;
+    }
+
+    private function init()
+    {
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->updateRegister('first_name', $this->first_name)
+            ->updateRegister('last_name', $this->last_name)
+            ->updateFlag('paid_account', false)
+            ->atLocation($this->location)
+            ->withParameter('returnbody', 'true')
+            ->build()
+            ->execute();
+
+        return $response->getMap();
+    }
+
+    public function getVisitCount()
+    {
+        return $this->getData()->getCounter('visits')->getData();
+    }
+
+    public function getPaidAccount()
+    {
+        return $this->getData()->getFlag('paid_account');
+    }
+
+    public function addInterests(array $interests)
+    {
+        $updateSetBuilder = (new Riak\Command\Builder\UpdateSet($this->riak));
+        foreach ($interests as $interest) {
+            $updateSetBuilder->add($interest);
+        }
+
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->atLocation($this->location)
+            ->updateSet('interests', $updateSetBuilder)
+            ->withParameter('returnbody', 'true')
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        }
+
+        return $this;
+    }
+
+    public function addInterest($interest)
+    {
+        $updateSetBuilder = (new Riak\Command\Builder\UpdateSet($this->riak))->add($interest);
+
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->atLocation($this->location)
+            ->updateSet('interests', $updateSetBuilder)
+            ->withParameter('returnbody', 'true')
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        }
+
+        return $this;
+    }
+
+    public function removeInterest($interest)
+    {
+        $updateSetBuilder = (new Riak\Command\Builder\UpdateSet($this->riak))->remove($interest);
+
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->atLocation($this->location)
+            ->updateSet('interests', $updateSetBuilder)
+            ->withParameter('returnbody', 'true')
+            ->withContext($this->data->getContext())
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        }
+
+        return $this;
+    }
+
+    public function recordVisit()
+    {
+        $updateCounterBuilder = (new Riak\Command\Builder\IncrementCounter($this->riak))
+            ->withIncrement(1);
+
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->updateCounter('visits', $updateCounterBuilder)
+            ->atLocation($this->location)
+            ->withParameter('returnbody', 'true')
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        }
+
+        return $this;
+    }
+
+    public function upgradeAccount()
+    {
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->updateFlag('paid_account', true)
+            ->atLocation($this->location)
+            ->withParameter('returnbody', 'true')
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        }
+
+        return $this;
+    }
+
+    public function downgradeAccount()
+    {
+        $response = (new Riak\Command\Builder\UpdateMap($this->riak))
+            ->updateFlag('paid_account', false)
+            ->atLocation($this->location)
+            ->withParameter('returnbody', 'true')
+            ->build()
+            ->execute();
+
+        if ($response->isSuccess()) {
+            $this->data = $response->getMap();
+        }
+
+        return $this;
+    }
+
+    public function getFirstName()
+    {
+        return $this->getData()->getRegister('first_name');
+    }
+
+    public function getLastName()
+    {
+        return $this->getData()->getRegister('last_name');
+    }
+}
+
+$riak = new Riak((new Riak\Node\Builder())->buildLocalhost([8087]));
+
+$iAmBatman = new User($riak, 'Bruce', 'Wayne');
+$iAmBatman->addInterests(['crime fighting', 'climbing stuff']);
+// prints json to standard out
+echo $iAmBatman;
+
+//-----------------------------------------------------------
+
+$joe = (new User($riak, 'Joe', 'Armstrong'))
+    ->addInterests(['distributed systems', 'Erlang'])
+    ->recordVisit();
+
+var_dump(
+    $joe->getFirstName(),
+    $joe->getLastName(),
+    $joe->getInterests(),
+    $joe->getVisitCount(),
+    $joe->recordVisit()->getVisitCount(),
+    $joe->getPaidAccount()
+);
diff --git a/vendor/phpfastcache/riak-client/examples/SimpleKV.php b/vendor/phpfastcache/riak-client/examples/SimpleKV.php
new file mode 100644
index 0000000000..07ebbcf18e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/examples/SimpleKV.php
@@ -0,0 +1,47 @@
+<?php
+
+require __DIR__ . '/../vendor/autoload.php';
+
+use Basho\Riak;
+use Basho\Riak\Command;
+use Basho\Riak\Node;
+
+$node = (new Node\Builder)
+    ->atHost('riak-test')
+    ->onPort(8098)
+    ->build();
+
+$riak = new Riak([$node]);
+
+$user = new \StdClass();
+$user->name = 'John Doe';
+$user->email = 'jdoe@example.com';
+
+// store a new value
+$command = (new Command\Builder\StoreObject($riak))
+    ->buildJsonObject($user)
+    ->buildBucket('users')
+    ->build();
+
+$response = $command->execute();
+
+$location = $response->getLocation();
+
+$command = (new Command\Builder\FetchObject($riak))
+    ->atLocation($location)
+    ->build();
+
+$response = $command->execute();
+
+$object = $response->getObject();
+
+$object->getData()->country = 'USA';
+
+$command = (new Command\Builder\StoreObject($riak))
+    ->withObject($object)
+    ->atLocation($location)
+    ->build();
+
+$response = $command->execute();
+
+echo $response->getStatusCode() . PHP_EOL;
diff --git a/vendor/phpfastcache/riak-client/examples/TimeSeries.php b/vendor/phpfastcache/riak-client/examples/TimeSeries.php
new file mode 100644
index 0000000000..f2a72f438e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/examples/TimeSeries.php
@@ -0,0 +1,183 @@
+<?php
+
+require __DIR__ . '/../vendor/autoload.php';
+
+use Basho\Riak;
+use Basho\Riak\Command;
+use Basho\Riak\Node;
+
+$node = (new Node\Builder)
+    ->atHost('riak-test')
+    ->onPort(8087)
+    ->build();
+
+$riak = new Riak([$node], [], new Riak\Api\Pb());
+
+
+# create table
+$table_definition = "
+    CREATE TABLE %s (
+        family varchar not null,
+        series varchar not null,
+        time timestamp not null,
+        weather varchar not null,
+        temperature double,
+        PRIMARY KEY((family, series, quantum(time, 15, 'm')), family, series, time)
+    )";
+
+$command = (new Command\Builder\TimeSeries\Query($riak))
+    ->withQuery(sprintf($table_definition, "GeoCheckins"))
+    ->build();
+
+if (!$response->isSuccess()) {
+    echo $response->getMessage();
+    exit;
+}
+
+
+# describe table
+$command = (new Command\Builder\TimeSeries\DescribeTable($riak))
+    ->withTable('GeoCheckins')
+    ->build();
+
+if (!$response->isSuccess()) {
+    echo $response->getMessage();
+    exit;
+}
+
+foreach ($response->getResults() as $column_index => $column_definition) {
+    print_r([$column_index => $column_definition]);
+}
+
+
+# store a row
+$response = (new Command\Builder\TimeSeries\StoreRows($riak))
+    ->inTable('GeoCheckins')
+    ->withRow([
+        (new Cell("family"))->setValue("family1"),
+        (new Cell("series"))->setValue("series1"),
+        (new Cell("time"))->setTimestampValue(1420113600),
+        (new Cell("weather"))->setValue("hot"),
+        (new Cell("temperature"))->setValue(23.5),
+    ])
+    ->build()
+    ->execute();
+
+if (!$response->isSuccess()) {
+    echo $response->getMessage();
+    exit;
+}
+
+
+# store rows
+$response = (new Command\Builder\TimeSeries\StoreRows($riak))
+    ->inTable('GeoCheckins')
+    ->withRows([
+        [
+            (new Cell("family"))->setValue("family1"),
+            (new Cell("series"))->setValue("series1"),
+            (new Cell("time"))->setTimestampValue(1420115400),
+            (new Cell("weather"))->setValue("hot"),
+            (new Cell("temperature"))->setValue(22.4),
+        ],
+        [
+            (new Cell("family"))->setValue("family1"),
+            (new Cell("series"))->setValue("series1"),
+            (new Cell("time"))->setTimestampValue(1420117200),
+            (new Cell("weather"))->setValue("warm"),
+            (new Cell("temperature"))->setValue(20.5),
+        ],
+    ])
+    ->build()
+    ->execute();
+
+if (!$response->isSuccess()) {
+    echo $response->getMessage();
+    exit;
+}
+
+
+# fetch a row
+/** @var Command\TimeSeries\Response $response */
+$response = (new Command\Builder\TimeSeries\FetchRow($riak))
+    ->atKey([
+        (new Cell("family"))->setValue("family1"),
+        (new Cell("series"))->setValue("series1"),
+        (new Cell("time"))->setTimestampValue(1420113600),
+    ])
+    ->inTable('GeoCheckins')
+    ->build()
+    ->execute();
+
+if (!$response->isSuccess()) {
+    echo $response->getMessage();
+    exit;
+}
+
+# output row data
+foreach ($response->getRow() as $index => $column) {
+    switch ($column->getType()) {
+        case Riak\TimeSeries\Cell::INT_TYPE:
+            printf("Column %d: %s is an integer equal to %d\n", $index, $column->getName(), $column->getValue());
+            break;
+        case Riak\TimeSeries\Cell::DOUBLE_TYPE:
+            printf("Column %d: %s is a double equal to %d\n", $index, $column->getName(), $column->getValue());
+            break;
+        case Riak\TimeSeries\Cell::BOOL_TYPE:
+            printf("Column %d: %s is a boolean equal to %s\n", $index, $column->getName(), $column->getValue());
+            break;
+        case Riak\TimeSeries\Cell::TIMESTAMP_TYPE:
+            printf("Column %d: %s is a timestamp equal to %d\n", $index, $column->getName(), $column->getValue());
+            break;
+        default:
+            printf("Column %d: %s is a string equal to %s\n", $index, $column->getName(), $column->getValue());
+            break;
+    }
+}
+
+
+# query for data
+$response = (new Command\Builder\TimeSeries\Query($riak))
+    ->withQuery("select * from GeoCheckins where family = 'family1' and series = 'myseries1' and (time > 1420113500 and time < 1420116000)")
+    ->build()
+    ->execute();
+
+# output rows
+foreach ($response->getResults() as $row_index => $row) {
+    foreach ($row as $column_index => $column) {
+        switch ($column->getType()) {
+            case Riak\TimeSeries\Cell::INT_TYPE:
+                printf("Column %d: %s is an integer equal to %d\n", $index, $column->getName(), $column->getValue());
+                break;
+            case Riak\TimeSeries\Cell::DOUBLE_TYPE:
+                printf("Column %d: %s is a double equal to %d\n", $index, $column->getName(), $column->getValue());
+                break;
+            case Riak\TimeSeries\Cell::BOOL_TYPE:
+                printf("Column %d: %s is a boolean equal to %s\n", $index, $column->getName(), $column->getValue());
+                break;
+            case Riak\TimeSeries\Cell::TIMESTAMP_TYPE:
+                printf("Column %d: %s is a timestamp equal to %d\n", $index, $column->getName(), $column->getValue());
+                break;
+            default:
+                printf("Column %d: %s is a string equal to %s\n", $index, $column->getName(), $column->getValue());
+                break;
+        }
+    }
+}
+
+
+# delete a row
+$response = (new Command\Builder\TimeSeries\DeleteRow($riak))
+    ->atKey([
+        (new Cell("family"))->setValue("family1"),
+        (new Cell("series"))->setValue("series1"),
+        (new Cell("time"))->setTimestampValue(1420113600),
+    ])
+    ->inTable('GeoCheckins')
+    ->build()
+    ->execute();
+
+if (!$response->isSuccess()) {
+    echo $response->getMessage();
+    exit;
+}
diff --git a/vendor/phpfastcache/riak-client/phpunit.xml b/vendor/phpfastcache/riak-client/phpunit.xml
new file mode 100644
index 0000000000..e7878097cc
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/phpunit.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit colors="true">
+    <testsuites>
+        <testsuite name="unit-tests">
+            <directory>tests/unit</directory>
+        </testsuite>
+        <testsuite name="functional-tests">
+            <directory>tests/functional</directory>
+            <exclude>tests/functional/SecurityFeaturesTest.php</exclude>
+            <exclude>tests/functional/TimeSeriesOperationsTest.php</exclude>
+        </testsuite>
+        <testsuite name="security-tests">
+            <file>tests/functional/SecurityFeaturesTest.php</file>
+        </testsuite>
+        <testsuite name="scenario-tests">
+            <directory>tests/scenario</directory>
+            <exclude>tests/scenario/InternalServerErrorTest.php</exclude>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory>./src</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/vendor/phpfastcache/riak-client/src/Riak.php b/vendor/phpfastcache/riak-client/src/Riak.php
new file mode 100644
index 0000000000..c7f1cf8b3f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak.php
@@ -0,0 +1,244 @@
+<?php
+
+namespace Basho;
+
+use Basho\Riak\Api;
+use Basho\Riak\Api\Http;
+use Basho\Riak\Command;
+use Basho\Riak\Exception;
+use Basho\Riak\Node;
+
+/**
+ * This class maintains the list of nodes in the Riak cluster.
+ *
+ * <code>
+ * $nodes = (new Node\Builder)
+ *   ->atHost('localhost')
+ *   ->onPort(8098)
+ *   ->build()
+ *
+ * $riak = new Riak($nodes);
+ *
+ * $command = (new Command\Builder\FetchObject($riak))
+ *   ->buildLocation('username', 'users')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $user = $response->getObject();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Riak
+{
+    const VERSION = "2.0.3";
+
+    /**
+     * Riak server ring
+     *
+     * @var Node[]
+     */
+    protected $nodes = [];
+
+    /**
+     * Configuration options for this client
+     *
+     * @var array
+     */
+    protected $config = [
+        'prefix'               => 'riak',
+        'mapred_prefix'        => 'mapred',
+        'index_prefix'         => 'buckets',
+        'dns_server'           => '8.8.8.8',
+        'max_connect_attempts' => 3,
+    ];
+
+    /**
+     * The actively connected Riak Node from the ring
+     *
+     * @var int
+     */
+    protected $activeNodeIndex = 0;
+
+    /**
+     * API Bridge class to use
+     *
+     * @var Api|null
+     */
+    protected $api = NULL;
+
+    /**
+     * List of nodes marked inactive
+     *
+     * @var array
+     */
+    protected $inactiveNodes = [];
+
+    /**
+     * Connection attempts made that failed
+     *
+     * @var int
+     */
+    protected $attempts = 0;
+
+    /**
+     * Construct a new Client object, defaults to port 8098.
+     *
+     * @param Node[] $nodes an array of Basho\Riak\Node objects
+     * @param array $config a configuration object
+     * @param Api $api
+     *
+     * @throws Exception
+     */
+    public function __construct(array $nodes, array $config = [], Api $api = NULL)
+    {
+        // wash any custom keys if any
+        $this->nodes = array_values($nodes);
+        $this->setActiveNodeIndex($this->pickNode());
+
+        if (!empty($config)) {
+            // use php array merge so passed in config overrides defaults
+            $this->config = array_merge($this->config, $config);
+        }
+
+        if ($api) {
+            $this->api = $api;
+        } else {
+            // default to HTTP bridge class
+            $this->api = new Http($this->config);
+        }
+    }
+
+    /**
+     * Pick a random Node from the ring
+     *
+     * You can pick your friends, you can pick your node, but you can't pick your friend's node.  :)
+     *
+     * @return int
+     * @throws Exception
+     */
+    protected function pickNode()
+    {
+        $nodes       = $this->getNodes();
+        $index = mt_rand(0, count($nodes) - 1);
+        return array_keys($nodes)[$index];
+    }
+
+    /**
+     * @return Node[]
+     */
+    public function getNodes()
+    {
+        return $this->nodes;
+    }
+
+    /**
+     * Get value from connection config
+     *
+     * @param $key
+     *
+     * @return mixed
+     */
+    public function getConfigValue($key)
+    {
+        return $this->config[$key];
+    }
+
+    /**
+     * @return array
+     */
+    public function getConfig()
+    {
+        return $this->config;
+    }
+
+    /**
+     * Execute a Riak command
+     *
+     * @param Command $command
+     * @return Command\Response
+     * @throws Exception
+     */
+    public function execute(Command $command)
+    {
+        $response = $this->getActiveNode()->execute($command, $this->api);
+
+        // if more than 1 node configured, lets try a different node up to max connection attempts
+        if (empty($response) && count($this->nodes) > 1 && $this->attempts < $this->getConfigValue('max_connect_attempts')) {
+            $response = $this->pickNewNode()->execute($command);
+        } elseif (empty($response) && $this->attempts >= $this->getConfigValue('max_connect_attempts')) {
+            throw new Exception('Nodes unreachable. Error Msg: ' . $this->api->getError());
+        } elseif ($response == false) {
+            throw new Exception('Command failed to execute against Riak. Error Msg: ' . $this->api->getError());
+        }
+
+        return $response;
+    }
+
+    /**
+     * @return Node
+     */
+    public function getActiveNode()
+    {
+        $nodes = $this->getNodes();
+
+        return $nodes[$this->getActiveNodeIndex()];
+    }
+
+    /**
+     * @return int
+     */
+    public function getActiveNodeIndex()
+    {
+        return $this->activeNodeIndex;
+    }
+
+    /**
+     * @param int $activeNodeIndex
+     */
+    public function setActiveNodeIndex($activeNodeIndex)
+    {
+        $this->activeNodeIndex = $activeNodeIndex;
+    }
+
+    /**
+     * @return Api|null
+     */
+    public function getApi()
+    {
+        return $this->api;
+    }
+
+    /**
+     * Accessor for the last request issued to the API. For debugging purposes.
+     *
+     * @return string
+     */
+    public function getLastRequest()
+    {
+        return $this->api->getRequest();
+    }
+
+    /**
+     * Pick new active node
+     *
+     * Used when the currently active node fails to complete a command / query
+     *
+     * @return $this
+     * @throws Exception
+     */
+    public function pickNewNode()
+    {
+        // mark current active node as inactive and increment attempts
+        $this->getActiveNode()->setInactive(true);
+        $this->attempts++;
+        $this->inactiveNodes[$this->getActiveNodeIndex()] = $this->getActiveNode();
+
+        // move active node to inactive nodes structure to prevent selecting again
+        unset($this->nodes[$this->getActiveNodeIndex()]);
+        $this->setActiveNodeIndex($this->pickNode());
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Api.php b/vendor/phpfastcache/riak-client/src/Riak/Api.php
new file mode 100644
index 0000000000..e3d49af2d8
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Api.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Extend this class to implement your own API bridge.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+abstract class Api
+{
+    /**
+     * Request string to be sent
+     *
+     * @var string
+     */
+    protected $request = '';
+
+    /**
+     * @var Command\Response|null
+     */
+    protected $response = null;
+
+    /**
+     * @var Command|null
+     */
+    protected $command = null;
+
+    /**
+     * @var Node|null
+     */
+    protected $node = null;
+
+    protected $success = null;
+
+    protected $error = '';
+
+    protected $config = [];
+
+    public function __construct(array $config = [])
+    {
+        $this->config = $config;
+    }
+
+    /**
+     * @return string
+     */
+    public function getError()
+    {
+        return $this->error;
+    }
+
+    /**
+     * @return Command|null
+     */
+    public function getCommand()
+    {
+        return $this->command;
+    }
+
+    /**
+     * @param Command|null $command
+     *
+     * @return $this
+     */
+    protected function setCommand($command)
+    {
+        $this->command = $command;
+
+        return $this;
+    }
+
+    /**
+     * @return Node|null
+     */
+    public function getNode()
+    {
+        return $this->node;
+    }
+
+    /**
+     * @param Node|null $node
+     *
+     * @return $this
+     */
+    public function setNode($node)
+    {
+        $this->node = $node;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRequest()
+    {
+        return $this->request;
+    }
+
+    /**
+     * Prepare the api connection
+     *
+     * @param Command $command
+     * @param Node $node
+     *
+     * @return $this
+     */
+    public function prepare(Command $command, Node $node)
+    {
+        $this->setCommand($command);
+        $this->setNode($node);
+
+        return $this;
+    }
+
+    /**
+     * @return Command\Response|null
+     */
+    public function getResponse()
+    {
+        return $this->response;
+    }
+
+    /**
+     * @return null
+     */
+    public function getSuccess()
+    {
+        return $this->success;
+    }
+
+    /**
+     * @return array
+     */
+    public function getConfig()
+    {
+        return $this->config;
+    }
+
+    /**
+     * send
+     *
+     * @return bool
+     */
+    abstract public function send();
+
+    /**
+     * Closes the connection to the Riak Interface
+     *
+     * @return null
+     */
+    abstract public function closeConnection();
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Api/Exception.php b/vendor/phpfastcache/riak-client/src/Riak/Api/Exception.php
new file mode 100644
index 0000000000..0e28c985d4
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Api/Exception.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Basho\Riak\Api;
+
+/**
+ * Exception thrown when there is an error within the execution of an Api Bridge object.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Exception extends \Basho\Riak\Exception
+{
+
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Api/Http.php b/vendor/phpfastcache/riak-client/src/Riak/Api/Http.php
new file mode 100644
index 0000000000..f87f840416
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Api/Http.php
@@ -0,0 +1,858 @@
+<?php
+
+namespace Basho\Riak\Api;
+
+use Basho\Riak\Api;
+use Basho\Riak\ApiInterface;
+use Basho\Riak\Bucket;
+use Basho\Riak\Command;
+use Basho\Riak\DataType\Counter;
+use Basho\Riak\DataType\Map;
+use Basho\Riak\DataType\Set;
+use Basho\Riak\DataType\Hll;
+use Basho\Riak\Location;
+use Basho\Riak\Node;
+use Basho\Riak\DataObject;
+use Basho\Riak\Search\Doc;
+use Basho\Riak\TimeSeries\Cell;
+
+/**
+ * Handles communications between end user app & Riak via Riak HTTP API using cURL
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Http extends Api implements ApiInterface
+{
+    // Header keys
+    const VCLOCK_KEY = 'X-Riak-Vclock';
+    const CONTENT_TYPE_KEY = 'Content-Type';
+    const METADATA_PREFIX = 'X-Riak-Meta-';
+    const LAST_MODIFIED_KEY = 'Last-Modified';
+
+    // Content Types
+    const CONTENT_TYPE_JSON = 'application/json';
+    const CONTENT_TYPE_XML = 'application/xml';
+
+    const TS_API_PREFIX = '/ts/v1';
+
+    /**
+     * Request body to be sent
+     *
+     * @var string
+     */
+    protected $requestBody = '';
+
+    /**
+     * Request url the request is being sent to
+     *
+     * @var string
+     */
+    protected $requestURL = '';
+
+    /**
+     * Response headers returned from request
+     *
+     * @var array
+     */
+    protected $responseHeaders = [];
+
+    /**
+     * Response body returned from request
+     *
+     * @var string
+     */
+    protected $responseBody = '';
+
+    /**
+     * HTTP Status Code from response
+     *
+     * @var int
+     */
+    protected $statusCode = 0;
+
+    /**
+     * cURL connection handle
+     *
+     * @var null
+     */
+    protected $connection = null;
+
+    /**
+     * API path
+     *
+     * @var string
+     */
+    protected $path = '';
+
+    /**
+     * Query string
+     *
+     * @var string
+     */
+    protected $query = '';
+
+    private $options = [];
+
+    protected $headers = [];
+
+    /**
+     * @return int
+     */
+    public function getStatusCode()
+    {
+        return $this->statusCode;
+    }
+
+    /**
+     * @return string
+     */
+    public function getResponseBody()
+    {
+        return $this->responseBody;
+    }
+
+    /**
+     * @return array
+     */
+    public function getResponseHeaders()
+    {
+        return $this->responseHeaders;
+    }
+
+    /**
+     * @return string
+     */
+    public function getRequest()
+    {
+        return $this->request . $this->requestBody;
+    }
+
+    public function closeConnection()
+    {
+        if ($this->connection) {
+            curl_close($this->connection);
+            $this->connection = null;
+        }
+    }
+
+    /**
+     * Prepare request to be sent
+     *
+     * @param Command $command
+     * @param Node $node
+     *
+     * @return $this
+     */
+    public function prepare(Command $command, Node $node)
+    {
+        if ($this->connection) {
+            $this->resetConnection();
+        }
+
+        // call parent prepare method to setup object members
+        parent::prepare($command, $node);
+
+        // set the API path to be used
+        $this->buildPath();
+
+        // general connection preparation
+        $this->prepareConnection();
+
+        // request specific connection preparation
+        $this->prepareRequest();
+
+        return $this;
+    }
+
+    public function resetConnection()
+    {
+        $this->command = null;
+        $this->options = [];
+        $this->path = '';
+        $this->query = '';
+        $this->requestBody = '';
+        $this->requestURL = '';
+        $this->responseHeaders = [];
+        $this->responseBody = '';
+
+        if (version_compare(PHP_VERSION, '5.5.0') >= 0) {
+            curl_reset($this->connection);
+        } else {
+            curl_close($this->connection);
+            $this->connection = null;
+        }
+    }
+
+    /**
+     * Sets the API path for the command
+     *
+     * @return $this
+     */
+    protected function buildPath()
+    {
+        $bucket = null;
+        $key = '';
+
+        $bucket = $this->command->getBucket();
+
+        $location = $this->command->getLocation();
+        if (!empty($location) && $location instanceof Location) {
+            $key = $location->getKey();
+        }
+        switch (get_class($this->command)) {
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'Basho\Riak\Command\Bucket\Store':
+                $this->headers[static::CONTENT_TYPE_KEY] = static::CONTENT_TYPE_JSON;
+            case 'Basho\Riak\Command\Bucket\Fetch':
+            case 'Basho\Riak\Command\Bucket\Delete':
+                $this->path = sprintf('/types/%s/buckets/%s/props', $bucket->getType(), $bucket->getName());
+                break;
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'Basho\Riak\Command\KVObject\Fetch':
+                $this->headers['Accept'] = '*/*, multipart/mixed';
+            case 'Basho\Riak\Command\KVObject\Store':
+            case 'Basho\Riak\Command\KVObject\Delete':
+                $this->path = sprintf('/types/%s/buckets/%s/keys/%s', $bucket->getType(), $bucket->getName(), $key);
+                break;
+            case 'Basho\Riak\Command\KVObject\Keys\Fetch':
+                $this->headers[static::CONTENT_TYPE_KEY] = static::CONTENT_TYPE_JSON;
+                $this->path = sprintf('/types/%s/buckets/%s/keys', $bucket->getType(), $bucket->getName());
+                break;
+            case 'Basho\Riak\Command\DataType\Counter\Store':
+            case 'Basho\Riak\Command\DataType\GSet\Store':
+            case 'Basho\Riak\Command\DataType\Set\Store':
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'Basho\Riak\Command\DataType\Map\Store':
+            case 'Basho\Riak\Command\DataType\Hll\Store':
+                $this->headers[static::CONTENT_TYPE_KEY] = static::CONTENT_TYPE_JSON;
+            case 'Basho\Riak\Command\DataType\Counter\Fetch':
+            case 'Basho\Riak\Command\DataType\Set\Fetch':
+            case 'Basho\Riak\Command\DataType\Map\Fetch':
+            case 'Basho\Riak\Command\DataType\Hll\Fetch':
+                $this->path = sprintf('/types/%s/buckets/%s/datatypes/%s', $bucket->getType(), $bucket->getName(), $key);
+                break;
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'Basho\Riak\Command\Search\Index\Store':
+                $this->headers[static::CONTENT_TYPE_KEY] = static::CONTENT_TYPE_JSON;
+            case 'Basho\Riak\Command\Search\Index\Fetch':
+            case 'Basho\Riak\Command\Search\Index\Delete':
+                $this->path = sprintf('/search/index/%s', $this->command);
+                break;
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'Basho\Riak\Command\Search\Schema\Store':
+                $this->headers[static::CONTENT_TYPE_KEY] = static::CONTENT_TYPE_XML;
+            case 'Basho\Riak\Command\Search\Schema\Fetch':
+                $this->path = sprintf('/search/schema/%s', $this->command);
+                break;
+            case 'Basho\Riak\Command\Search\Fetch':
+                $this->path = sprintf('/search/query/%s', $this->command);
+                break;
+            case 'Basho\Riak\Command\MapReduce\Fetch':
+                $this->headers[static::CONTENT_TYPE_KEY] = static::CONTENT_TYPE_JSON;
+                $this->path = sprintf('/%s', $this->config['mapred_prefix']);
+                break;
+            case 'Basho\Riak\Command\Indexes\Query':
+                $this->path = $this->createIndexQueryPath($bucket);
+                break;
+            case 'Basho\Riak\Command\Ping':
+                $this->path = '/ping';
+                break;
+            case 'Basho\Riak\Command\Stats':
+                $this->path = '/stats';
+                break;
+            case 'Basho\Riak\Command\KVObject\FetchPreflist':
+                $this->path = sprintf('/types/%s/buckets/%s/keys/%s/preflist', $bucket->getType(), $bucket->getName(), $key);
+                break;
+            case 'Basho\Riak\Command\TimeSeries\Fetch':
+            case 'Basho\Riak\Command\TimeSeries\Delete':
+                /** @var $command Command\TimeSeries\Fetch */
+                $command = $this->command;
+                $this->path = sprintf('%s/tables/%s/keys/%s', static::TS_API_PREFIX, $command->getTable(), implode("/", $command->getData()));
+                break;
+            case 'Basho\Riak\Command\TimeSeries\Store':
+                /** @var $command Command\TimeSeries\Store */
+                $command = $this->command;
+                $this->path = sprintf('%s/tables/%s/keys', static::TS_API_PREFIX, $command->getTable());
+                break;
+            case 'Basho\Riak\Command\TimeSeries\Query\Fetch':
+                $this->path = sprintf('%s/query', static::TS_API_PREFIX);
+                break;
+            default:
+                $this->path = '';
+        }
+
+        return $this;
+    }
+
+    /**
+     * Generates the URL path for a 2i Query
+     *
+     * @param Bucket $bucket
+     * @return string
+     * @throws Api\Exception if 2i query is invalid.
+     */
+    private function createIndexQueryPath(Bucket $bucket)
+    {
+        /**  @var Command\Indexes\Query $command */
+        $command = $this->command;
+
+        if($command->isMatchQuery()) {
+            $path =  sprintf('/types/%s/buckets/%s/index/%s/%s', $bucket->getType(),
+                        $bucket->getName(),
+                        $command->getIndexName(),
+                        $command->getMatchValue());
+        }
+        elseif($command->isRangeQuery()) {
+            $path =  sprintf('/types/%s/buckets/%s/index/%s/%s/%s', $bucket->getType(),
+                        $bucket->getName(),
+                        $command->getIndexName(),
+                        $command->getLowerBound(),
+                        $command->getUpperBound());
+        }
+        else
+        {
+            throw new Api\Exception("Invalid Secondary Index Query.");
+        }
+
+        return $path;
+    }
+
+    /**
+     * Prepare Connection
+     *
+     * Sets general connection options that are used with every request
+     *
+     * @return $this
+     * @throws Api\Exception
+     */
+    protected function prepareConnection()
+    {
+        // record outgoing headers
+        $this->options[CURLINFO_HEADER_OUT] = 1;
+
+        if ($this->command->getConnectionTimeout()) {
+            $this->options[CURLOPT_TIMEOUT] = $this->command->getConnectionTimeout();
+        }
+
+        if ($this->node->useTls()) {
+            // CA File
+            if ($this->node->getCaFile()) {
+                $this->options[CURLOPT_CAINFO] = $this->node->getCaFile();
+            } elseif ($this->node->getCaDirectory()) {
+                $this->options[CURLOPT_CAPATH] = $this->node->getCaDirectory();
+            } else {
+                throw new Api\Exception('A Certificate Authority file is required for secure connections.');
+            }
+
+            // verify CA file
+            $this->options[CURLOPT_SSL_VERIFYPEER] = true;
+
+            // verify host common name
+            $this->options[CURLOPT_SSL_VERIFYHOST] = 0;
+
+            if ($this->node->getUserName()) {
+                $this->options[CURLOPT_USERPWD] = sprintf('%s:%s', $this->node->getUserName(),
+                    $this->node->getPassword());
+            } elseif ($this->node->getCertificate()) {
+                /*
+                 * NOT CURRENTLY SUPPORTED ON HTTP
+                 *
+                $this->options[CURLOPT_SSLCERT] = $this->node->getCertificate();
+                $this->options[CURLOPT_SSLCERTTYPE] = 'P12';
+                if ($this->node->getCertificatePassword()) {
+                    $this->options[CURLOPT_SSLCERTPASSWD] = $this->node->getCertificatePassword();
+                }
+                if ($this->node->getPrivateKey()) {
+                    $this->options[CURLOPT_SSLKEY] = $this->node->getPrivateKey();
+                    if ($this->node->getPrivateKeyPassword()) {
+                        $this->options[CURLOPT_SSLKEYPASSWD] = $this->node->getPrivateKeyPassword();
+                    }
+                }
+                */
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Prepare request
+     *
+     * Sets connection options that are specific to this request
+     *
+     * @return $this
+     */
+    protected function prepareRequest()
+    {
+        return $this->prepareRequestMethod()
+            ->prepareRequestHeaders()
+            ->prepareRequestParameters()
+            ->prepareRequestUrl()
+            ->prepareRequestData();
+    }
+
+    /**
+     * Prepare request data
+     *
+     * @return $this
+     */
+    protected function prepareRequestData()
+    {
+        // if POST or PUT, add parameters to post data, else add to uri
+        if (in_array($this->command->getMethod(), ['POST', 'PUT'])) {
+            $this->requestBody = $this->command->getEncodedData();
+            $this->options[CURLOPT_POSTFIELDS] = $this->requestBody;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Prepares the complete request URL
+     *
+     * @return $this
+     */
+    protected function prepareRequestUrl()
+    {
+        $protocol = $this->node->useTls() ? 'https' : 'http';
+        $this->requestURL = sprintf('%s://%s%s?%s', $protocol, $this->node->getUri(), $this->path, $this->query);
+
+        // set the built request URL on the connection
+        $this->options[CURLOPT_URL] = $this->requestURL;
+
+        return $this;
+    }
+
+    /**
+     * Prepare request parameters
+     *
+     * @return $this
+     */
+    protected function prepareRequestParameters()
+    {
+        if ($this->command->hasParameters()) {
+            // build query using RFC 3986 (spaces become %20 instead of '+')
+            $this->query = http_build_query($this->command->getParameters(), '', '&', PHP_QUERY_RFC3986);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Prepares the request headers
+     *
+     * @return $this
+     */
+    protected function prepareRequestHeaders()
+    {
+        $curl_headers = [];
+
+        foreach ($this->headers as $key => $value) {
+            $curl_headers[] = sprintf('%s: %s', $key, $value);
+        }
+
+        // if we have an object, set appropriate object headers
+        $object = $this->command->getObject();
+        if ($object) {
+            if ($object->getVclock()) {
+                $curl_headers[] = sprintf('%s: %s', static::VCLOCK_KEY, $object->getVclock());
+            }
+
+            if ($object->getContentType()) {
+                $charset = '';
+                if ($object->getCharset()) {
+                    $charset = sprintf('; charset=%s', $object->getCharset());
+                }
+                $curl_headers[] = sprintf('%s: %s', static::CONTENT_TYPE_KEY, $object->getContentType(), $charset);
+            }
+
+            // setup index headers
+            $translator = new Api\Http\Translator\SecondaryIndex();
+            $indexHeaders = $translator->createHeadersFromIndexes($object->getIndexes());
+            foreach ($indexHeaders as $value) {
+                $curl_headers[] = sprintf('%s: %s', $value[0], $value[1]);
+            }
+
+            // setup metadata headers
+            foreach($object->getMetaData() as $key => $value) {
+                $curl_headers[] = sprintf('%s%s: %s', static::METADATA_PREFIX, $key, $value);
+            }
+        }
+
+        // set the request headers on the connection
+        $this->options[CURLOPT_HTTPHEADER] = $curl_headers;
+
+        // dump local headers to start fresh
+        $this->headers = [];
+
+        return $this;
+    }
+
+    /**
+     * Prepare the request method
+     *
+     * @return $this
+     */
+    protected function prepareRequestMethod()
+    {
+        switch ($this->command->getMethod()) {
+            case "POST":
+                $this->options[CURLOPT_POST] = 1;
+                break;
+            case "PUT":
+                $this->options[CURLOPT_CUSTOMREQUEST] = 'PUT';
+                break;
+            case "DELETE":
+                $this->options[CURLOPT_CUSTOMREQUEST] = 'DELETE';
+                break;
+            case "HEAD":
+                $this->options[CURLOPT_NOBODY] = 1;
+                break;
+            default:
+                // reset http method to get in case its changed
+                $this->options[CURLOPT_HTTPGET] = 1;
+        }
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * @return string
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+
+    /**
+     * @return bool
+     */
+    public function send()
+    {
+        // set the response header and body callback functions
+        $this->options[CURLOPT_HEADERFUNCTION] = [$this, 'responseHeaderCallback'];
+        $this->options[CURLOPT_WRITEFUNCTION] = [$this, 'responseBodyCallback'];
+        if ($this->command->isVerbose()) {
+            // set curls output to be the output buffer stream
+            $this->options[CURLOPT_STDERR] = fopen('php://stdout', 'w+');
+            $this->options[CURLOPT_VERBOSE] = 1;
+
+            // there is a bug when verbose is enabled, header out causes no output
+            // @see https://bugs.php.net/bug.php?id=65348
+            unset($this->options[CURLINFO_HEADER_OUT]);
+
+            echo "cURL Command:\n\tcurl -X{$this->command->getMethod()} {$this->requestURL} --data \"{$this->requestBody}\"\n";
+        }
+
+        // set all options on the resource
+        curl_setopt_array($this->getConnection(), $this->options);
+
+        // execute the request
+        $this->success = curl_exec($this->getConnection());
+        if ($this->success === false) {
+            $this->error = curl_error($this->getConnection());
+        } elseif ($this->success === true) {
+            $this->error = '';
+        }
+
+        $this->request = curl_getinfo($this->getConnection(), CURLINFO_HEADER_OUT);
+
+        // set the response http code
+        $this->statusCode = curl_getinfo($this->getConnection(), CURLINFO_HTTP_CODE);
+
+        $this->parseResponse();
+
+        return $this->success;
+    }
+
+    /**
+     * Add a custom header to the request
+     *
+     * @param $key
+     * @param $value
+     */
+    public function addHeader($key, $value)
+    {
+        $this->headers[$key] = $value;
+    }
+
+    /**
+     * @return resource
+     */
+    public function getConnection()
+    {
+        if (!$this->connection) {
+            $this->openConnection();
+        }
+
+        return $this->connection;
+    }
+
+    public function openConnection()
+    {
+        $this->connection = curl_init();
+
+        return $this;
+    }
+
+    /**
+     * Response header callback
+     *
+     * Handles callback from curl when the response is received, it parses the headers into an array sets them as
+     * member of the class.
+     *
+     * Has to be public for curl to be able to access it.
+     *
+     * @param $ch
+     * @param $header
+     *
+     * @return int
+     */
+    public function responseHeaderCallback($ch, $header)
+    {
+        if (strpos($header, ':')) {
+            list ($key, $value) = explode(':', $header, 2);
+
+            $value = trim($value);
+
+            if (!empty($value)) {
+                if (!isset($this->responseHeaders[$key])) {
+                    $this->responseHeaders[$key] = $value;
+                } elseif (is_array($this->responseHeaders[$key])) {
+                    $this->responseHeaders[$key] = array_merge($this->responseHeaders[$key], [$value]);
+                } else {
+                    $this->responseHeaders[$key] = array_merge([$this->responseHeaders[$key]], [$value]);
+                }
+            }
+        }
+
+        return strlen($header);
+    }
+
+    /**
+     * Response body callback
+     *
+     * Handles callback from curl when the response is received, it sets the response body as a member of the class.
+     *
+     * Has to be public for curl to be able to access it.
+     *
+     * @param $ch
+     * @param $body
+     *
+     * @return int
+     */
+    public function responseBodyCallback($ch, $body)
+    {
+        $this->responseBody .= $body;
+        return strlen($body);
+    }
+
+    protected function parseResponse()
+    {
+        // trim leading / trailing whitespace
+        $body = $this->responseBody;
+        $location = null;
+        if ($this->getResponseHeader('Location')) {
+            $location = Location::fromString($this->getResponseHeader('Location'));
+        }
+
+        if ($this->statusCode == 500) {
+            $this->success = false;
+            $this->error = $body;
+        }
+
+        switch (get_class($this->command)) {
+            case 'Basho\Riak\Command\Bucket\Store':
+            case 'Basho\Riak\Command\Bucket\Fetch':
+                $bucket = null;
+                $modified = $this->getResponseHeader(static::LAST_MODIFIED_KEY, '');
+                $properties = json_decode($body, true);
+                if (isset($properties['props']) && $this->command->getBucket()) {
+                    $bucket = new Bucket($this->command->getBucket()->getName(), $this->command->getBucket()->getType(), $properties['props']);
+                }
+                $response = new Command\Bucket\Response($this->success, $this->statusCode, $this->error, $bucket, $modified);
+                break;
+
+            case 'Basho\Riak\Command\KVObject\Fetch':
+            case 'Basho\Riak\Command\KVObject\Store':
+                /** @var Command\KVObject $command */
+                $command = $this->command;
+                $objects = (new Api\Http\Translator\ObjectResponse($command, $this->statusCode))
+                    ->parseResponse($body, $this->responseHeaders);
+                $response = new Command\KVObject\Response($this->success, $this->statusCode, $this->error, $location, $objects);
+                break;
+
+            case 'Basho\Riak\Command\KVObject\FetchPreflist':
+                $response = new Command\KVObject\Response($this->success, $this->statusCode, $this->error, $location, [new DataObject(json_decode($body))]);
+                break;
+
+            case 'Basho\Riak\Command\KVObject\Keys\Fetch':
+                $data = json_decode($body);
+                $keys = [];
+                if ($data && isset($data->keys)) {
+                    foreach ($data->keys as $key) {
+                        $keys[] = new Location($key, $this->command->getBucket());
+                    }
+                }
+                $response = new Command\KVObject\Keys\Response($this->success, $this->statusCode, $this->error, $keys);
+                break;
+
+            case 'Basho\Riak\Command\DataType\Counter\Store':
+            case 'Basho\Riak\Command\DataType\Counter\Fetch':
+                $counter = null;
+                $json_object = json_decode($body);
+                if ($json_object && isset($json_object->value)) {
+                    $counter = new Counter($json_object->value);
+                }
+                $response = new Command\DataType\Counter\Response(
+                    $this->success, $this->statusCode, $this->error, $location, $counter, $this->getResponseHeader('Date')
+                );
+                break;
+
+            case 'Basho\Riak\Command\DataType\GSet\Store':
+            case 'Basho\Riak\Command\DataType\Set\Store':
+            case 'Basho\Riak\Command\DataType\Set\Fetch':
+                $set = null;
+                $json_object = json_decode($body);
+                if ($json_object && isset($json_object->value)) {
+                    $context = '';
+                    if (isset($json_object->context)) {
+                        $context = $json_object->context;
+                    }
+                    $set = new Set($json_object->value, $context);
+                }
+                $response = new Command\DataType\Set\Response(
+                    $this->success, $this->statusCode, $this->error, $location, $set, $this->getResponseHeader('Date')
+                );
+                break;
+
+            case 'Basho\Riak\Command\DataType\Map\Store':
+            case 'Basho\Riak\Command\DataType\Map\Fetch':
+                $map = null;
+                $json_object = json_decode($body, true);
+                if ($json_object && isset($json_object['value'])) {
+                    $map = new Map($json_object['value'], $json_object['context']);
+                }
+                $response = new Command\DataType\Map\Response(
+                    $this->success, $this->statusCode, $this->error, $location, $map, $this->getResponseHeader('Date')
+                );
+                break;
+
+            case 'Basho\Riak\Command\DataType\Hll\Store':
+            case 'Basho\Riak\Command\DataType\Hll\Fetch':
+                $hll = null;
+                $json_object = json_decode($body);
+                if ($json_object && isset($json_object->value)) {
+                    $hll = new Hll($json_object->value);
+                }
+                $response = new Command\DataType\Hll\Response(
+                    $this->success, $this->statusCode, $this->error, $location, $hll, $this->getResponseHeader('Date')
+                );
+                break;
+
+            case 'Basho\Riak\Command\Search\Fetch':
+                $results = in_array($this->statusCode, [200,204]) ? json_decode($body) : null;
+                $docs = [];
+                if (!empty($results->response->docs)) {
+                    foreach ($results->response->docs as $doc) {
+                        $docs[] = new Doc($doc);
+                    }
+                }
+                $numFound = !empty($results->response->numFound) ? $results->response->numFound : 0;
+
+                $response = new Command\Search\Response($this->success, $this->statusCode, $this->error, $numFound, $docs);
+                break;
+            case 'Basho\Riak\Command\Search\Index\Store':
+            case 'Basho\Riak\Command\Search\Index\Fetch':
+                $index = json_decode($body);
+                $response = new Command\Search\Index\Response($this->success, $this->statusCode, $this->error, $index);
+                break;
+
+            case 'Basho\Riak\Command\Search\Schema\Store':
+            case 'Basho\Riak\Command\Search\Schema\Fetch':
+                $response = new Command\Search\Schema\Response(
+                    $this->success, $this->statusCode, $this->error, $body, $this->getResponseHeader(static::CONTENT_TYPE_KEY)
+                );
+                break;
+
+            case 'Basho\Riak\Command\MapReduce\Fetch':
+                $results = in_array($this->statusCode, [200,204]) ? json_decode($body) : null;
+                $response = new Command\MapReduce\Response($this->success, $this->statusCode, $this->error, $results);
+                break;
+            case 'Basho\Riak\Command\Indexes\Query':
+                $json_object = in_array($this->statusCode, [200,204]) ? json_decode($body, true) : null;
+                $results = [];
+                $termsReturned = false;
+                $continuation = null;
+                $done = true;
+
+                if (isset($json_object['keys'])) {
+                    $results = $json_object['keys'];
+                }
+
+                if (isset($json_object['results'])) {
+                    $results = $json_object['results'];
+                    $termsReturned = true;
+                }
+
+                if (isset($json_object['continuation'])) {
+                    $continuation = $json_object['continuation'];
+                    $done = false;
+                }
+
+                $response = new Command\Indexes\Response(
+                    $this->success, $this->statusCode, $this->error, $results, $termsReturned, $continuation, $done, $this->getResponseHeader('Date')
+                );
+                break;
+            case 'Basho\Riak\Command\Stats':
+                $response = new Command\Stats\Response($this->success, $this->statusCode, $this->error, json_decode($body, true));
+                break;
+            case 'Basho\Riak\Command\TimeSeries\Fetch':
+                $row = in_array($this->statusCode, ['200','201','204']) ? json_decode($body, true) : [];
+                $response = new Command\TimeSeries\Response($this->success, $this->statusCode, $this->error, [$row]);
+                break;
+            case 'Basho\Riak\Command\TimeSeries\Query\Fetch':
+                $results = in_array($this->statusCode, ['200','204']) ? json_decode($body) : [];
+                $rows = [];
+                if (isset($results->rows)) {
+                    foreach ($results->rows as $row) {
+                        $cells = [];
+                        foreach ($results->columns as $index => $column) {
+                            $cells[$column] = $row[$index];
+                        }
+                        $rows[] = $cells;
+                    }
+                }
+                $response = new Command\TimeSeries\Query\Response($this->success, $this->statusCode, $this->error, $rows);
+                break;
+            case 'Basho\Riak\Command\TimeSeries\Store':
+            case 'Basho\Riak\Command\TimeSeries\Delete':
+            case 'Basho\Riak\Command\KVObject\Delete':
+            case 'Basho\Riak\Command\Bucket\Delete':
+            case 'Basho\Riak\Command\Search\Index\Delete':
+            case 'Basho\Riak\Command\Ping':
+            default:
+                $response = new Command\Response($this->success, $this->statusCode, $this->error);
+                break;
+        }
+
+        $this->response = $response;
+    }
+
+    protected function getResponseHeader($key, $default = '')
+    {
+        if (!empty($this->responseHeaders[$key])) {
+            return $this->responseHeaders[$key];
+        } else {
+            return $default;
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/ObjectResponse.php b/vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/ObjectResponse.php
new file mode 100644
index 0000000000..640c8a6b18
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/ObjectResponse.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace Basho\Riak\Api\Http\Translator;
+
+use Basho\Riak\Api\Http;
+use Basho\Riak\Command;
+use Basho\Riak\DataObject as RObject;
+
+class ObjectResponse
+{
+    /**
+     * @var Command\KVObject
+     */
+    protected $command;
+
+    protected $code;
+
+    public function __construct(Command\KVObject $command, $code)
+    {
+        $this->command = $command;
+        $this->code = $code;
+    }
+
+    /**
+     * @param $response
+     * @param array $headers
+     * @return \Basho\Riak\DataObject[]
+     */
+    public function parseResponse($response, $headers = [])
+    {
+        $objects = [];
+
+        if ($this->code == '300') {
+            $position = strpos($headers[Http::CONTENT_TYPE_KEY], 'boundary=');
+            $boundary = '--' . substr($headers[Http::CONTENT_TYPE_KEY], $position + 9);
+            $objects = $this->parseSiblings($response, $boundary, $headers[Http::VCLOCK_KEY]);
+        } elseif (in_array($this->code, ['200','201','204'])) {
+            $objects[] = $this->parseObject($response, $headers);
+        }
+
+        return $objects;
+    }
+
+    public function parseSiblings($response, $boundary, $vclock = '')
+    {
+        $siblings = [];
+        $parts = explode($boundary, $response);
+        foreach ($parts as $part) {
+            $headers = [Http::VCLOCK_KEY => $vclock];
+            $slice_point = 0;
+            $empties = 0;
+
+            $lines = preg_split('/\n\r|\n|\r/', trim($part));
+            foreach ($lines as $key => $line) {
+                if (strpos($line, ':')) {
+                    $empties = 0;
+                    list ($key, $value) = explode(':', $line);
+
+                    $value = trim($value);
+
+                    if (!empty($value)) {
+                        if (!isset($headers[$key])) {
+                            $headers[$key] = $value;
+                        } elseif (is_array($headers[$key])) {
+                            $headers[$key] = array_merge($headers[$key], [$value]);
+                        } else {
+                            $headers[$key] = array_merge([$headers[$key]], [$value]);
+                        }
+                    }
+                } elseif ($line == '') {
+                    // if we have two line breaks in a row, then we have finished headers
+                    if ($empties) {
+                        $slice_point = $key + 1;
+                        break;
+                    } else {
+                        $empties++;
+                    }
+                }
+            }
+
+            $data = implode(PHP_EOL, array_slice($lines, $slice_point));
+            $siblings[] = $this->parseObject($data, $headers);
+        }
+
+        return $siblings;
+    }
+
+    public function parseObject($response, $headers = [])
+    {
+        $contentType = !empty($headers[Http::CONTENT_TYPE_KEY]) ? $headers[Http::CONTENT_TYPE_KEY] : '';
+        $data = $this->command->getDecodedData($response, $contentType);
+
+        return (new RObject($data, $headers))->setRawData($response);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/SecondaryIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/SecondaryIndex.php
new file mode 100644
index 0000000000..90c7282f90
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Api/Http/Translator/SecondaryIndex.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Basho\Riak\Api\Http\Translator;
+
+/**
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+class SecondaryIndex
+{
+    const INT_INDEX_SUFFIX = '_int';
+    const STR_IDX_SUFFIX = '_bin';
+    const IDX_SUFFIX_LEN = 4;
+    const IDX_HEADER_PREFIX = "x-riak-index-";
+    const IDX_HEADER_PREFIX_LEN = 13;
+
+    public static function isIntIndex($headerKey)
+    {
+        return static::indexNameContainsTypeSuffix($headerKey, self::INT_INDEX_SUFFIX);
+    }
+
+    public function extractIndexesFromHeaders(&$headers)
+    {
+        $indexes = [];
+
+        foreach ($headers as $key => $value) {
+
+            if (!$this->isIndexHeader($key)) {
+                continue;
+            }
+
+            $this->parseIndexHeader($indexes, $key, $value);
+            unset($headers[$key]);
+        }
+
+        return $indexes;
+    }
+
+    public static function isIndexHeader($headerKey)
+    {
+        if (strlen($headerKey) <= self::IDX_HEADER_PREFIX_LEN) {
+            return false;
+        }
+
+        return substr_compare($headerKey, self::IDX_HEADER_PREFIX, 0, self::IDX_HEADER_PREFIX_LEN) == 0;
+    }
+
+    private function parseIndexHeader(&$indexes, $key, $rawValue)
+    {
+        $indexName = $this->getIndexNameWithType($key);
+        $value = $this->getIndexValue($indexName, $rawValue);
+
+        $indexes[$indexName] = $value;
+    }
+
+    private function getIndexNameWithType($key)
+    {
+        return substr($key, self::IDX_HEADER_PREFIX_LEN);
+    }
+
+    private function getIndexValue($indexName, $value)
+    {
+        $values = explode(", ", $value);
+
+        if ($this->isStringIndex($indexName)) {
+            return $values;
+        } else {
+            return array_map("intval", $values);
+        }
+    }
+
+    public static function isStringIndex($headerKey)
+    {
+        return static::indexNameContainsTypeSuffix($headerKey, self::STR_IDX_SUFFIX);
+    }
+
+    private static function indexNameContainsTypeSuffix($indexName, $typeSuffix)
+    {
+        $nameLen = strlen($indexName) - self::IDX_SUFFIX_LEN;
+
+        return substr_compare($indexName, $typeSuffix, $nameLen) == 0;
+    }
+
+    public function createHeadersFromIndexes($indexes)
+    {
+        $headers = [];
+
+        foreach ($indexes as $indexName => $values) {
+            $this->createIndexHeader($headers, $indexName, $values);
+        }
+
+        return $headers;
+    }
+
+    private function createIndexHeader(&$headers, $indexName, $values)
+    {
+        $headerKey = self::IDX_HEADER_PREFIX. $indexName;
+        foreach ($values as $indexName => $value) {
+            $headers[] = [$headerKey, $value];
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/ApiInterface.php b/vendor/phpfastcache/riak-client/src/Riak/ApiInterface.php
new file mode 100644
index 0000000000..61265ab38e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/ApiInterface.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Interface ApiInterface
+ *
+ * Forces object structure for API bridge classes
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+interface ApiInterface
+{
+    /**
+     * Prepares the API bridge for the command to be sent
+     *
+     * @param Command $command
+     * @param Node    $node
+     */
+    public function prepare(Command $command, Node $node);
+
+    /**
+     * Sends the command over the wire to Riak
+     */
+    public function send();
+
+    /**
+     * Gets the complete request string
+     *
+     * @return string
+     */
+    public function getRequest();
+
+    /**
+     * @return Command\Response|null
+     */
+    public function getResponse();
+
+    /**
+     * Closes the connection to the Riak Interface
+     *
+     * @return null
+     */
+    public function closeConnection();
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Bucket.php b/vendor/phpfastcache/riak-client/src/Riak/Bucket.php
new file mode 100644
index 0000000000..bf93c976ee
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Bucket.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Core data structure for a Riak Bucket.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Bucket
+{
+    /**
+     * The default bucket type in Riak.
+     */
+    const DEFAULT_TYPE = "default";
+
+    /**
+     * Bucket properties
+     *
+     * @var array
+     */
+    protected $properties = [];
+
+    /**
+     * Name of bucket
+     */
+    protected $name = '';
+
+    /**
+     * Buckets are grouped by type, inheriting the properties defined on the type
+     */
+    protected $type = '';
+
+    /**
+     * @param        $name
+     * @param string $type
+     * @param array $properties
+     */
+    public function __construct($name, $type = self::DEFAULT_TYPE, array $properties = [])
+    {
+        $this->name = $name;
+        $this->type = $type;
+        $this->properties = $properties;
+    }
+
+    public function __toString()
+    {
+        return $this->getNamespace();
+    }
+
+    /**
+     * Bucket namespace
+     *
+     * This is a human readable namespace for the bucket.
+     *
+     * @return string
+     */
+    public function getNamespace()
+    {
+        return "/{$this->type}/{$this->name}/";
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * @param $key
+     *
+     * @return string
+     */
+    public function getProperty($key)
+    {
+        $properties = $this->getProperties();
+        if (isset($properties[$key])) {
+            return $properties[$key];
+        }
+
+        return '';
+    }
+
+    /**
+     * @return array
+     */
+    public function getProperties()
+    {
+        return $this->properties;
+    }
+
+    /**
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command.php b/vendor/phpfastcache/riak-client/src/Riak/Command.php
new file mode 100644
index 0000000000..0057f76ca2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command.php
@@ -0,0 +1,158 @@
+<?php
+
+namespace Basho\Riak;
+
+use Basho\Riak\Command\Builder;
+
+/**
+ * The command class is used to build a read or write command to be executed against a Riak node.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+abstract class Command
+{
+    /**
+     * Request method
+     *
+     * This can be GET, POST, PUT, or DELETE
+     *
+     * @see http://docs.basho.com/riak/latest/dev/references/http/
+     *
+     * @var string
+     */
+    protected $method = 'GET';
+
+    /**
+     * Command parameters
+     *
+     * @var array
+     */
+    protected $parameters = [];
+
+    /**
+     * @var Bucket|null
+     */
+    protected $bucket = null;
+
+    /**
+     * @var Command\Response|null
+     */
+    protected $response = null;
+
+    /**
+     * @var \Basho\Riak|null
+     */
+    protected $riak = null;
+
+    protected $verbose = false;
+
+    protected $connectionTimeout = 0;
+
+    public function __construct(Builder $builder)
+    {
+        $this->riak = $builder->getConnection();
+        $this->parameters = $builder->getParameters();
+        $this->verbose = $builder->getVerbose();
+        $this->connectionTimeout = $builder->getConnectionTimeout();
+    }
+
+    public function isVerbose()
+    {
+        return $this->verbose;
+    }
+
+    /**
+     * Executes the command against the API
+     *
+     * @return Command\Response
+     */
+    public function execute()
+    {
+        return $this->riak->execute($this);
+    }
+
+    /**
+     * Gets the request that was issued to the API by this Command.
+     *
+     * @return string
+     */
+    public function getRequest()
+    {
+        return $this->riak->getLastRequest();
+    }
+
+    public function getBucket()
+    {
+        return $this->bucket;
+    }
+
+    /**
+     * @param $key string
+     *
+     * @return null|string
+     */
+    public function getParameter($key)
+    {
+        if (isset($this->parameters[$key])) {
+            return $this->parameters[$key];
+        }
+
+        return null;
+    }
+
+    /**
+     * @return array
+     */
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+    /**
+     * Command has parameters?
+     *
+     * @return bool
+     */
+    public function hasParameters()
+    {
+        return (bool)count($this->parameters);
+    }
+
+    public function getMethod()
+    {
+        return $this->method;
+    }
+
+    public function getResponse()
+    {
+        return $this->response;
+    }
+
+    /**
+     * @return Location|null
+     */
+    public function getLocation()
+    {
+        return null;
+    }
+
+    /**
+     * @return Object|null
+     */
+    public function getObject()
+    {
+        return null;
+    }
+
+    /**
+     * @return int
+     */
+    public function getConnectionTimeout()
+    {
+        return $this->connectionTimeout;
+    }
+
+    abstract public function getData();
+
+    abstract public function getEncodedData();
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Delete.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Delete.php
new file mode 100644
index 0000000000..d7fde7e243
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Delete.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Basho\Riak\Command\Bucket;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to remove a bucket property from a Riak bucket
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Delete extends Command\KVObject implements CommandInterface
+{
+    protected $method = 'DELETE';
+
+    public function __construct(Command\Builder\DeleteObject $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Fetch.php
new file mode 100644
index 0000000000..7ab836d849
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Fetch.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Basho\Riak\Command\Bucket;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Fetches properties for a Riak Bucket
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\Bucket\Response|null
+     */
+    protected $response = null;
+
+    public function __construct(Command\Builder\FetchBucketProperties $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\Bucket\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Response.php
new file mode 100644
index 0000000000..8ac86c1a8f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Response.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Basho\Riak\Command\Bucket;
+
+use Basho\Riak\Bucket;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * Bucket from the command re-instantiated with its fetched properties
+     *
+     * @var Bucket|null
+     */
+    protected $bucket = null;
+
+    protected $modified = '';
+
+    public function __construct($success = true, $code = 0, $message = '', Bucket $bucket = null, $modified = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->bucket = $bucket;
+        $this->modified = $modified;
+    }
+
+    /**
+     * getBucket
+     *
+     * @return Bucket
+     */
+    public function getBucket()
+    {
+        return $this->bucket;
+    }
+
+    /**
+     * Retrieves the last modified time of the object
+     *
+     * @return string
+     */
+    public function getLastModified()
+    {
+        return $this->modified;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Store.php
new file mode 100644
index 0000000000..d49d6eb115
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Bucket/Store.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Riak\Command\Bucket;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to set a bucket property on a bucket
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'PUT';
+
+    protected $properties = [];
+
+    /**
+     * @var Command\Bucket\Response|null
+     */
+    protected $response = null;
+
+    public function __construct(Command\Builder\SetBucketProperties $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->properties = $builder->getProperties();
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['props' => $this->properties];
+    }
+
+    /**
+     * @return Command\Bucket\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder.php
new file mode 100644
index 0000000000..1e7cf14559
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder.php
@@ -0,0 +1,151 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+use Basho\Riak\DataType;
+
+/**
+ * This class follows the Builder design pattern and is the preferred method for creating Basho\Riak\Command
+ * objects for interacting with your Riak data cluster.
+ *
+ * <code>
+ * use Basho\Riak\Command;
+ * use Basho\Riak\Bucket;
+ * use Basho\Riak\Location;
+ *
+ * $bucket = new Bucket('users');
+ *
+ * $command = (new Command\Builder(Command::STORE_OBJECT))
+ *      ->withObject(new Object('test_data'))
+ *      ->atLocation(new Location('test_key', $bucket))
+ *      ->build();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+abstract class Builder
+{
+    /**
+     * @var Riak|null
+     */
+    protected $riak = null;
+
+    /**
+     * Command parameters
+     *
+     * @var array
+     */
+    protected $parameters = [];
+
+    /**
+     * Command request headers
+     *
+     * @var array
+     */
+    protected $headers = [];
+
+    protected $verbose = false;
+
+    protected $connectionTimeout = 0;
+
+    public function __construct(Riak $riak)
+    {
+        $this->riak = $riak;
+    }
+
+    /**
+     * Command build
+     *
+     * Validates then returns the built command object.
+     */
+    abstract public function build();
+
+    public function withParameter($key, $value = true)
+    {
+        $this->parameters[$key] = $value;
+
+        return $this;
+    }
+
+    public function withParameters($parameters = [])
+    {
+        $this->parameters = $parameters;
+
+        return $this;
+    }
+
+    public function withVerboseMode($verbose = true)
+    {
+        $this->verbose = $verbose;
+
+        return $this;
+    }
+
+    public function withConnectionTimeout($seconds = 60)
+    {
+        $this->connectionTimeout = $seconds;
+
+        return $this;
+    }
+
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+    public function getConnection()
+    {
+        return $this->riak;
+    }
+
+    public function getVerbose()
+    {
+        return $this->verbose;
+    }
+
+    /**
+     * @return int
+     */
+    public function getConnectionTimeout()
+    {
+        return $this->connectionTimeout;
+    }
+
+    /**
+     * Validate command
+     *
+     * Method validates if the builder has the parameters / objects required to successfully execute the command
+     *
+     * @return bool
+     * @throws Builder\Exception
+     */
+    protected function validate()
+    {
+        throw new Command\Builder\Exception('Invalid builder.');
+    }
+
+    /**
+     * Used to verify a property within the builder is not null and is instantiated
+     *
+     * @param $objectName
+     *
+     * @throws Builder\Exception
+     */
+    protected function required($objectName)
+    {
+        $method = "get{$objectName}";
+        $class = "Basho\\Riak\\{$objectName}";
+        $value = $this->$method();
+        if (is_null($value)) {
+            throw new Builder\Exception("Expected non-empty value for {$objectName}");
+        }
+        if (is_object($value) && $value instanceof $class === false) {
+            throw new Builder\Exception("Expected instance of {$class}, received instance of " . get_class($value));
+        }
+        if (is_array($value) && count($value) == 0) {
+            throw new Builder\Exception("Expected non-empty array value for {$objectName}");
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/BucketTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/BucketTrait.php
new file mode 100644
index 0000000000..0e56c9e12e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/BucketTrait.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Bucket;
+
+/**
+ * Allows easy code sharing for Bucket getters / setters within the Command Builders
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait BucketTrait
+{
+    /**
+     * Stores the Bucket object
+     *
+     * @var Bucket|null
+     */
+    protected $bucket = NULL;
+
+    /**
+     * Gets the Bucket object
+     *
+     * @return Bucket|null
+     */
+    public function getBucket()
+    {
+        return $this->bucket;
+    }
+
+    /**
+     * Build a Bucket object to be added to the Command
+     *
+     * @param $name
+     * @param string $type
+     *
+     * @return $this
+     */
+    public function buildBucket($name, $type = 'default')
+    {
+        $this->bucket = new Bucket($name, $type);
+
+        return $this;
+    }
+
+    /**
+     * Attach the provided Bucket to the Command
+     *
+     * @param Bucket $bucket
+     *
+     * @return $this
+     */
+    public function inBucket(Bucket $bucket)
+    {
+        $this->bucket = $bucket;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/DeleteObject.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/DeleteObject.php
new file mode 100644
index 0000000000..7546b0e609
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/DeleteObject.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to delete a KV object from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\DeleteObject($riak))
+ * ->buildLocation('username', 'users')
+ * ->build();
+ *
+ * $response = $command->execute();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DeleteObject extends Command\Builder implements Command\BuilderInterface
+{
+    use ObjectTrait;
+    use LocationTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\KVObject\Delete;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\KVObject\Delete($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Exception.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Exception.php
new file mode 100644
index 0000000000..e362331431
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Exception.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+/**
+ * Exception thrown when there is an error within the validation of a built command.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Exception extends \Basho\Riak\Exception
+{
+
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchBucketProperties.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchBucketProperties.php
new file mode 100644
index 0000000000..c8d5fcadb7
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchBucketProperties.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch map objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchMap($riak))
+ *   ->buildLocation($order_id, 'online_orders', 'sales_maps')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $map = $response->getMap();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchBucketProperties extends Command\Builder implements Command\BuilderInterface
+{
+    use BucketTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Bucket\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Bucket\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchCounter.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchCounter.php
new file mode 100644
index 0000000000..a75f4fcc90
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchCounter.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch counter objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchCounter($riak))
+ *   ->buildLocation($user_name, 'user_visit_count', 'visit_counters')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $counter = $response->getCounter();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchCounter extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Counter\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Counter\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchHll.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchHll.php
new file mode 100644
index 0000000000..4275e2492f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchHll.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch hll objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchHll($riak))
+ *   ->buildLocation($user_id, 'email_subscriptions', 'user_preferences')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $set = $response->getHll();
+ * </code>
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class FetchHll extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Hll\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Hll\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchMap.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchMap.php
new file mode 100644
index 0000000000..6a1d37dd16
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchMap.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch map objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchMap($riak))
+ *   ->buildLocation($order_id, 'online_orders', 'sales_maps')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $map = $response->getMap();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchMap extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Map\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Map\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchObject.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchObject.php
new file mode 100644
index 0000000000..bdd24393df
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchObject.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch KV objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchObject($riak))
+ *   ->buildLocation($user_id, 'users', 'default')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $user = $response->getObject();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchObject extends Command\Builder implements Command\BuilderInterface
+{
+    use ObjectTrait;
+    use LocationTrait;
+
+    /**
+     * @var bool
+     */
+    protected $decodeAsAssociative = false;
+
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\KVObject\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\KVObject\Fetch($this);
+    }
+
+    /**
+     * Tells the client to decode the data as an associative array instead of a PHP stdClass object.
+     * Only works if the fetched object type is JSON.
+     *
+     * @return $this
+     */
+    public function withDecodeAsAssociative()
+    {
+        $this->decodeAsAssociative = true;
+        return $this;
+    }
+
+    /**
+     * Fetch the setting for decodeAsAssociative.
+     *
+     * @return bool
+     */
+    public function getDecodeAsAssociative()
+    {
+        return $this->decodeAsAssociative;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchPreflist.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchPreflist.php
new file mode 100644
index 0000000000..5bb8270ec9
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchPreflist.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch map objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchPreflist($riak))
+ *   ->buildLocation($order_id, 'online_orders', 'sales')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchPreflist extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\KVObject\FetchPreflist;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\KVObject\FetchPreflist($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchSet.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchSet.php
new file mode 100644
index 0000000000..376e4cd37a
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchSet.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch set objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchSet($riak))
+ *   ->buildLocation($user_id, 'email_subscriptions', 'user_preferences')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $set = $response->getSet();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchSet extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Set\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Set\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Location');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchStats.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchStats.php
new file mode 100644
index 0000000000..006078d6a2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/FetchStats.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Riak real time stats
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchStats extends Command\Builder implements Command\BuilderInterface
+{
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Stats;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Stats($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IncrementCounter.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IncrementCounter.php
new file mode 100644
index 0000000000..76b62df702
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IncrementCounter.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Used to increment counter objects in Riak by the provided positive / negative integer
+ *
+ * <code>
+ * $command = (new Command\Builder\IncrementCounter($riak))
+ *   ->buildLocation($user_name, 'user_visit_count', 'visit_counters')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $counter = $response->getCounter();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class IncrementCounter extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * @var int|null
+     */
+    protected $increment = NULL;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Counter\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Counter\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+        $this->required('Increment');
+    }
+
+    /**
+     * @param int $increment
+     *
+     * @return $this
+     */
+    public function withIncrement($increment = 1)
+    {
+        $this->increment = $increment;
+
+        return $this;
+    }
+
+    /**
+     * @return int|null
+     */
+    public function getIncrement()
+    {
+        return $this->increment;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IndexTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IndexTrait.php
new file mode 100644
index 0000000000..6c31e7792e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/IndexTrait.php
@@ -0,0 +1,303 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+/**
+ * Allows easy code sharing for Bucket getters / setters within the Command Builders
+ *
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+trait IndexTrait
+{
+    /**
+     * The name of the index to query.
+     *
+     * @var string|null
+     */
+    protected $indexName = NULL;
+
+    /**
+     * The index match value for scalar queries.
+     *
+     * @var string|integer|null
+     */
+    protected $match = NULL;
+
+    /**
+     * The index lower bound value for range queries.
+     *
+     * @var string|integer|null
+     */
+    protected $lowerBound = NULL;
+
+    /**
+     * The index upper bound value for range queries.
+     *
+     * @var string|integer|null
+     */
+    protected $upperBound = NULL;
+
+    /**
+     * The continuation string for this query.
+     * Used to page results when combined with MaxResults.
+     *
+     * @var string|null
+     */
+    protected $continuation = NULL; //Binary
+
+    /**
+     * The maximum number of results returned by the query.
+     *
+     * @var integer|null
+     */
+    protected $maxResults; // Int
+
+    /**
+     * The option to return the index keys with the Riak object keys.
+     *
+     * @var boolean|null
+     */
+    protected $returnTerms; // Bool
+
+    /**
+     * The option to sort, or not sort, the results of a non-paginated secondary index query.
+     * If MaxResults is set, this property is ignored.
+     * By default results are sorted first by index value, then by key value.
+     *
+     * @var boolean|null
+     */
+    protected $paginationSort; // Bool
+
+    /**
+     * The option to filter result terms with a Regex.
+     *
+     * @var string|null
+     */
+    protected $termFilter; // string
+    /**
+     *
+     * @var integer|null
+     */
+    protected $timeout; // timeout
+
+    /**
+     * Gets the index name
+     *
+     * @return string|null
+     */
+    public function getIndexName()
+    {
+        return $this->indexName;
+    }
+
+    /**
+     * @return string|integer|null
+     */
+    public function getMatchValue()
+    {
+        return $this->match;
+    }
+
+    /**
+     * @return string|integer|null
+     */
+    public function getLowerBound()
+    {
+        return $this->lowerBound;
+    }
+
+    /**
+     * @return string|integer|null
+     */
+    public function getUpperBound()
+    {
+        return $this->upperBound;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function isMatchQuery()
+    {
+        return isset($this->match);
+    }
+
+    /**
+     * @return boolean
+     */
+    public function isRangeQuery()
+    {
+        return isset($this->lowerBound) && isset($this->upperBound);
+    }
+
+    /**
+     * @return null|string
+     */
+    public function getContinuation()
+    {
+        return $this->continuation;
+    }
+
+    /**
+     * @return int|null
+     */
+    public function getMaxResults()
+    {
+        return $this->maxResults;
+    }
+
+    /**
+     * @return bool|null
+     */
+    public function getReturnTerms()
+    {
+        return $this->returnTerms;
+    }
+
+    /**
+     * @return bool|null
+     */
+    public function getPaginationSort()
+    {
+        return $this->paginationSort;
+    }
+
+    /**
+     * @return null|string
+     */
+    public function getTermFilter()
+    {
+        return $this->termFilter;
+    }
+
+    /**
+     * @return int|null
+     */
+    public function getTimeout()
+    {
+        return $this->timeout;
+    }
+
+
+    /**
+     * @param $param
+     * @return bool
+     */
+    public function isParamSet($param)
+    {
+        return !empty($this->$param);
+    }
+
+    /**
+     * Adds the index name information to the Command
+     *
+     * @param $indexName
+     *
+     * @return $this
+     */
+    public function withIndexName($indexName)
+    {
+        $this->indexName = $indexName;
+        return $this;
+    }
+
+
+    /**
+     * Adds the scalar index query information to the Command
+     *
+     * @param $value
+     *
+     * @return $this
+     */
+    public function withScalarValue($value)
+    {
+        $this->match = $value;
+        $this->lowerBound = null;
+        $this->upperBound = null;
+        return $this;
+    }
+
+
+    /**
+     * Adds the range index query information to the Command
+     *
+     * @param $lowerBound
+     * @param $upperBound
+     *
+     * @return $this
+     */
+    public function withRangeValue($lowerBound, $upperBound)
+    {
+        $this->lowerBound = $lowerBound;
+        $this->upperBound = $upperBound;
+        $this->match = null;
+
+        return $this;
+    }
+
+    /**
+     * @param null|string $continuation
+     *
+     * @return $this
+     */
+    public function withContinuation($continuation)
+    {
+        $this->continuation = $continuation;
+        return $this;
+    }
+
+    /**
+     * @param int|null $maxResults
+     *
+     * @return $this
+     */
+    public function withMaxResults($maxResults)
+    {
+        $this->maxResults = $maxResults;
+        return $this;
+    }
+
+    /**
+     * @param bool|null $returnTerms
+     *
+     * @return $this
+     */
+    public function withReturnTerms($returnTerms = true)
+    {
+        $this->returnTerms = $returnTerms;
+        return $this;
+    }
+
+    /**
+     * @param bool|null $paginationSort
+     *
+     * @return $this
+     */
+    public function withPaginationSort($paginationSort)
+    {
+        $this->paginationSort = $paginationSort;
+        return $this;
+    }
+
+    /**
+     * @param null|string $termFilter
+     *
+     * @return $this
+     */
+    public function withTermFilter($termFilter)
+    {
+        $this->termFilter = $termFilter;
+        return $this;
+    }
+
+    /**
+     * @param int|null $timeout
+     *
+     * @return $this
+     */
+    public function withTimeout($timeout)
+    {
+        $this->timeout = $timeout;
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ListObjects.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ListObjects.php
new file mode 100644
index 0000000000..90637d0412
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ListObjects.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Used to list KV objects in Riak
+ *
+ * Not recommended for production use.
+ * This command traverses all the keys stored in the cluster and should not be used in production.
+ *
+ * <code>
+ * $command = (new Command\Builder\ListObjects($riak))
+ *   ->buildBucket('users', 'default')
+ *   ->acknowledgeRisk(true)
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $data = $response->getKeys();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class ListObjects extends Command\Builder implements Command\BuilderInterface
+{
+    use BucketTrait;
+    use ObjectTrait;
+
+    /**
+     * @var bool
+     */
+    protected $decodeAsAssociative = false;
+    protected $acknowledgedRisk = null;
+
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\KVObject\Keys\Fetch
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\KVObject\Keys\Fetch($this);
+    }
+
+    /**
+     * ListKeys operations are dangerous in production environments and are highly discouraged.
+     * This method is required in order to complete the operation.
+     *
+     * @return $this
+     */
+    public function acknowledgeRisk($acknowledgedRisk = false)
+    {
+        if ($acknowledgedRisk) {
+            $this->acknowledgedRisk = $acknowledgedRisk;
+        }
+        return $this;
+    }
+
+    /**
+     * Tells the client to decode the data as an associative array instead of a PHP stdClass object.
+     * Only works if the fetched object type is JSON.
+     *
+     * @return $this
+     */
+    public function withDecodeAsAssociative()
+    {
+        $this->decodeAsAssociative = true;
+        return $this;
+    }
+
+    /**
+     * Fetch the setting for decodeAsAssociative.
+     *
+     * @return bool
+     */
+    public function getDecodeAsAssociative()
+    {
+        return $this->decodeAsAssociative;
+    }
+
+    /**
+     * Fetch the setting for acknowledgedRisk.
+     *
+     * @return bool
+     */
+    public function getAcknowledgedRisk()
+    {
+        return $this->acknowledgedRisk;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+        $this->required('AcknowledgedRisk');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/LocationTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/LocationTrait.php
new file mode 100644
index 0000000000..e69574fc10
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/LocationTrait.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Bucket;
+use Basho\Riak\Location;
+
+/**
+ * Allows easy code sharing for Location getters / setters within the Command Builders
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait LocationTrait
+{
+    // location depends on bucket
+    use BucketTrait;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    /**
+     * @return Location|null
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @param $key
+     * @param $name
+     * @param string $type
+     *
+     * @return $this
+     */
+    public function buildLocation($key, $name, $type = 'default')
+    {
+        $this->bucket = new Bucket($name, $type);
+        $this->location = new Location($key, $this->bucket);
+
+        return $this;
+    }
+
+    /**
+     * @param Location $location
+     *
+     * @return $this
+     */
+    public function atLocation(Location $location)
+    {
+        $this->bucket = $location->getBucket();
+        $this->location = $location;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/MapReduce/FetchObjects.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/MapReduce/FetchObjects.php
new file mode 100644
index 0000000000..006ca8a5dc
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/MapReduce/FetchObjects.php
@@ -0,0 +1,283 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\MapReduce;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Builds the command to fetch a collection of objects from Riak using Yokozuna search
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchObjects extends Command\Builder implements Command\BuilderInterface
+{
+    /**
+     * MR inputs used by query phase
+     *
+     * @var array|string
+     */
+    protected $inputs = [];
+
+    /**
+     * MR Query phases
+     *  - options include map, reduce or link
+     *
+     * @var array
+     */
+    protected $query = [];
+
+    /**
+     * Timeout for MR query
+     *
+     * @var int
+     */
+    protected $timeout = 0;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\MapReduce\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        if (is_array($this->inputs) && count($this->inputs) == 1) {
+            $this->inputs = $this->inputs[0];
+        }
+
+        return new Command\MapReduce\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Inputs');
+        $this->required('Query');
+    }
+
+    /**
+     * addBucketInput
+     *
+     * @param Riak\Bucket $bucket
+     *
+     * @return $this
+     */
+    public function addBucketInput(Riak\Bucket $bucket)
+    {
+        // default bucket type cannot be passed to the MR api due to a bug
+        if ($bucket->getType() == 'default') {
+            $input = $bucket->getName();
+        } else {
+            $input = [$bucket->getType(), $bucket->getName()];
+        }
+
+        $this->inputs[] = $input;
+
+        return $this;
+    }
+
+    /**
+     * addLocationInput
+     *
+     * @param Riak\Location $location
+     *
+     * @return $this
+     */
+    public function addLocationInput(Riak\Location $location)
+    {
+        // default bucket type cannot be passed to the MR api due to a bug
+        if ($location->getBucket()->getType() == 'default') {
+            $input = [$location->getBucket()->getName(), $location->getKey()];
+        } else {
+            $input = [$location->getBucket()->getName(), $location->getKey(), '', $location->getBucket()->getType()];
+        }
+
+        $this->inputs[] = $input;
+
+        return $this;
+    }
+
+    /**
+     * withInput
+     *
+     * Sets a single input value as a string. Can be:
+     *  - a bucket with the default bucket type
+     *  - a 2i index name
+     *  - a Search/Yokozuna index name
+     *
+     * @param $input
+     *
+     * @return $this
+     */
+    public function withInput($input)
+    {
+        $this->inputs = $input;
+
+        return $this;
+    }
+
+    /**
+     * withInputs
+     *
+     * Sets an array of inputs for the MR request
+     *
+     * @param array $inputs
+     *
+     * @return $this
+     */
+    public function withInputs(array $inputs)
+    {
+        $this->inputs = $inputs;
+
+        return $this;
+    }
+
+    public function getInputs()
+    {
+        return $this->inputs;
+    }
+
+    /**
+     * @return string
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+
+    /**
+     * buildMapPhase
+     *
+     * Allows you to define the Map Query Phase by using parameters
+     *
+     * @param string $bucket
+     * @param string $key
+     * @param string $source
+     * @param string $language
+     * @param bool $keep
+     *
+     * @return $this
+     */
+    public function buildMapPhase($bucket = '', $key = '', $source = '', $language = 'javascript', $keep = false)
+    {
+        $this->setPhase('map', $this->assemblePhaseData($bucket, $key, $source, $language), $keep);
+
+        return $this;
+    }
+
+    /**
+     * setPhase
+     *
+     * @param $type
+     * @param $data
+     * @param bool $keep
+     */
+    protected function setPhase($type, $data, $keep = false)
+    {
+        $data['keep'] = $keep;
+        $object = new \StdClass();
+        $object->{$type} = $data;
+        $this->query[] = $object;
+    }
+
+    /**
+     * assemblePhaseData
+     *
+     * Assembles the parameters into a data structure to define a Query Phase
+     *
+     * @param string $bucket
+     * @param string $key
+     * @param string $source
+     * @param string $language
+     * @param string $tag
+     *
+     * @return array
+     */
+    protected function assemblePhaseData($bucket = '', $key = '', $source = '', $language = '', $tag = '')
+    {
+        $data = [];
+
+        if ($language) {
+            $data['language'] = $language;
+        }
+
+        if ($bucket) {
+            $data['bucket'] = $bucket;
+        }
+
+        if ($key) {
+            $data['key'] = $key;
+        }
+
+        if ($source) {
+            $data['source'] = $source;
+        }
+
+        if ($tag) {
+            $data['tag'] = $tag;
+        }
+
+        return $data;
+    }
+
+    /**
+     * buildReducePhase
+     *
+     * Allows you to define the Reduce Query Phase by using parameters
+     *
+     * @param string $bucket
+     * @param string $key
+     * @param string $source
+     * @param string $language
+     * @param bool $keep
+     *
+     * @return $this
+     */
+    public function buildReducePhase($bucket = '', $key = '', $source = '', $language = 'javascript', $keep = true)
+    {
+        $this->setPhase('reduce', $this->assemblePhaseData($bucket, $key, $source, $language), $keep);
+
+        return $this;
+    }
+
+    /**
+     * buildReducePhase
+     *
+     * Allows you to define the Reduce Query Phase by using parameters
+     *
+     * @param string $bucket
+     * @param string $tag
+     * @param bool $keep
+     *
+     * @internal param string $key
+     * @internal param string $source
+     * @internal param string $language
+     * @return $this
+     */
+    public function buildLinkPhase($bucket = '', $tag = '', $keep = false)
+    {
+        $this->setPhase('link', $this->assemblePhaseData($bucket, '', '', '', $tag), $keep);
+
+        return $this;
+    }
+
+    /**
+     * withQuery
+     *
+     * Sets the Query Phase/s for the MR request. This value gets converted directly into a JSON array and passed to Riak
+     *
+     * @param array $query
+     *
+     * @return $this
+     */
+    public function withQuery(array $query)
+    {
+        $this->query = $query;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ObjectTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ObjectTrait.php
new file mode 100644
index 0000000000..edef54392f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/ObjectTrait.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Api\Http;
+use Basho\Riak\DataObject;
+
+/**
+ * Allows easy code sharing for Object getters / setters within the Command Builders
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait ObjectTrait
+{
+    /**
+     * @var \Basho\Riak\DataObject|null
+     */
+    protected $dataObject = NULL;
+
+    /**
+     * @return \Basho\Riak\DataObject|null
+     */
+    public function getDataObject()
+    {
+        return $this->dataObject;
+    }
+
+    /**
+     * Mint a new Object instance with supplied params and attach it to the Command
+     *
+     * @param string $data
+     * @param array $headers
+     *
+     * @return $this
+     */
+    public function buildObject($data = NULL, $headers = NULL)
+    {
+        $this->dataObject = new DataObject($data, $headers);
+
+        return $this;
+    }
+
+    /**
+     * Attach an already instantiated Object to the Command
+     *
+     * @param \Basho\Riak\DataObject $object
+     *
+     * @return $this
+     */
+    public function withObject(DataObject $object)
+    {
+        $this->dataObject = $object;
+
+        return $this;
+    }
+
+    /**
+     * Mint a new Object instance with a json encoded string
+     *
+     * @param mixed $data
+     *
+     * @return $this
+     */
+    public function buildJsonObject($data)
+    {
+        $this->dataObject = new DataObject();
+        $this->dataObject->setData($data);
+        $this->dataObject->setContentType(Http::CONTENT_TYPE_JSON);
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Ping.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Ping.php
new file mode 100644
index 0000000000..0d6cf1c1e2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Ping.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Used to fetch KV objects from Riak
+ *
+ * <code>
+ * $command = (new Command\Builder\FetchObject($riak))
+ *   ->buildLocation($user_id, 'users', 'default')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $user = $response->getObject();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Ping extends Command\Builder implements Command\BuilderInterface
+{
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Ping;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Ping($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/QueryIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/QueryIndex.php
new file mode 100644
index 0000000000..3a82e37612
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/QueryIndex.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to query a secondary index in Riak.
+ *
+ * <code>
+ * $command = (new Command\Builder\QueryIndex($riak))
+ *   ->buildBucket('users')
+ *   ->withIndex('users_name', 'Knuth')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $index_results = $response->getIndexResults();
+ * </code>
+ *
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+class QueryIndex extends Command\Builder implements Command\BuilderInterface
+{
+    use BucketTrait;
+    use IndexTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Indexes\Query
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Indexes\Query($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+        $this->required('IndexName');
+
+        if($this->isMatchQuery()) {
+            $this->required('MatchValue');
+        }
+        else {
+            $this->required('LowerBound');
+            $this->required('UpperBound');
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/AssociateIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/AssociateIndex.php
new file mode 100644
index 0000000000..a5291f2279
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/AssociateIndex.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak\Command;
+
+/**
+ * Used to increment counter objects in Riak by the provided positive / negative integer
+ *
+ * <code>
+ * $command = (new Command\Builder\StoreObject($riak))
+ *   ->buildObject('{"firstName":"John","lastName":"Doe","email":"johndoe@gmail.com"}')
+ *   ->buildBucket('users')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $user_location = $response->getLocation();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class AssociateIndex extends Command\Builder\SetBucketProperties implements Command\BuilderInterface
+{
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function withName($name)
+    {
+        $this->set('search_index', $name);
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DeleteIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DeleteIndex.php
new file mode 100644
index 0000000000..b17e68b6b0
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DeleteIndex.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DeleteIndex extends Command\Builder implements Command\BuilderInterface
+{
+    /**
+     * Name of index to create
+     *
+     * @var string
+     */
+    protected $name = '';
+
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+    }
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function withName($name)
+    {
+        $this->name = $name;
+
+        return $this;
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Search\Index\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Search\Index\Delete($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Name');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DissociateIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DissociateIndex.php
new file mode 100644
index 0000000000..9e4cf00c0f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/DissociateIndex.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Used to increment counter objects in Riak by the provided positive / negative integer
+ *
+ * <code>
+ * $command = (new Command\Builder\StoreObject($riak))
+ *   ->buildObject('{"firstName":"John","lastName":"Doe","email":"johndoe@gmail.com"}')
+ *   ->buildBucket('users')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $user_location = $response->getLocation();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DissociateIndex extends Command\Builder\SetBucketProperties implements Command\BuilderInterface
+{
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+
+        $this->set('search_index', '_dont_index_');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchIndex.php
new file mode 100644
index 0000000000..ea1bd8a545
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchIndex.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchIndex extends Command\Builder implements Command\BuilderInterface
+{
+    protected $index_name = '';
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Search\Index\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Search\Index\Fetch($this);
+    }
+
+    public function validate()
+    {
+        return;
+    }
+
+    public function withName($name)
+    {
+        $this->index_name = $name;
+
+        return $this;
+    }
+
+    public function getIndexName()
+    {
+        return $this->index_name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchObjects.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchObjects.php
new file mode 100644
index 0000000000..76ffa194c4
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchObjects.php
@@ -0,0 +1,184 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Builds the command to fetch a collection of objects from Riak using Yokozuna search
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchObjects extends Command\Builder implements Command\BuilderInterface
+{
+    protected $default_field = '';
+
+    protected $default_operation = '';
+
+    protected $index_name = '';
+
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+
+        $this->parameters['wt'] = 'json';
+        $this->parameters['rows'] = 10;
+        $this->parameters['start'] = 0;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Search\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Search\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('IndexName');
+        $this->required('Query');
+        $this->required('MaxRows');
+        $this->required('StartRow');
+    }
+
+    public function withIndexName($name)
+    {
+        $this->index_name = $name;
+
+        return $this;
+    }
+
+    public function getIndexName()
+    {
+        return $this->index_name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getQuery()
+    {
+        return $this->parameters['q'];
+    }
+
+    /**
+     * @return int
+     */
+    public function getMaxRows()
+    {
+        return $this->parameters['rows'];
+    }
+
+    /**
+     * @return int
+     */
+    public function getStartRow()
+    {
+        return $this->parameters['start'];
+    }
+
+    /**
+     * @return string
+     */
+    public function getFilterQuery()
+    {
+        return $this->parameters['fq'];
+    }
+
+    /**
+     * @return string
+     */
+    public function getSortField()
+    {
+        return $this->parameters['sort'];
+    }
+
+    /**
+     * @return string
+     */
+    public function getDefaultField()
+    {
+        return $this->default_field;
+    }
+
+    /**
+     * @return string
+     */
+    public function getDefaultOperation()
+    {
+        return $this->default_operation;
+    }
+
+    /**
+     * @return string
+     */
+    public function getReturnFields()
+    {
+        return $this->parameters['fl'];
+    }
+
+    public function withQuery($query)
+    {
+        $this->parameters['q'] = $query;
+
+        return $this;
+    }
+
+    public function withMaxRows($rows)
+    {
+        $this->parameters['rows'] = $rows;
+
+        return $this;
+    }
+
+    public function withStartRow($row_num)
+    {
+        $this->parameters['start'] = $row_num;
+
+        return $this;
+    }
+
+    public function withSortField($field_name)
+    {
+        $this->parameters['sort'] = $field_name;
+
+        return $this;
+    }
+
+    public function withFilterQuery($filter_query)
+    {
+        $this->parameters['fq'] = $filter_query;
+
+        return $this;
+    }
+
+    public function withDefaultField($default_field)
+    {
+        $this->parameters['df'] = $default_field;
+
+        return $this;
+    }
+
+    public function withDefaultOperation($default_operation)
+    {
+        $this->parameters['op'] = $default_operation;
+
+        return $this;
+    }
+
+    public function withReturnFields($return_fields)
+    {
+        $this->parameters['fl'] = $return_fields;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchSchema.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchSchema.php
new file mode 100644
index 0000000000..44c5bab54f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/FetchSchema.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchSchema extends Command\Builder implements Command\BuilderInterface
+{
+    protected $schema_name = '';
+
+    /**
+     * @return string
+     */
+    public function getSchemaName()
+    {
+        return $this->schema_name;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Search\Schema\Fetch;
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Search\Schema\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('SchemaName');
+    }
+
+    public function withName($name)
+    {
+        $this->schema_name = $name;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreIndex.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreIndex.php
new file mode 100644
index 0000000000..a5e37be3bc
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreIndex.php
@@ -0,0 +1,81 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class StoreIndex extends Command\Builder implements Command\BuilderInterface
+{
+    /**
+     * Name of index to create
+     *
+     * @var string
+     */
+    protected $name = '';
+
+    /**
+     * Solr schema to use for Searching your Riak data
+     *
+     * @var string
+     */
+    protected $schema = '_yz_default';
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function withName($name)
+    {
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @param $schema
+     *
+     * @return $this
+     */
+    public function usingSchema($schema)
+    {
+        $this->schema = $schema;
+
+        return $this;
+    }
+
+    public function getSchema()
+    {
+        return $this->schema;
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Search\Index\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Search\Index\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Name');
+        $this->required('Schema');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreSchema.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreSchema.php
new file mode 100644
index 0000000000..a5a7e99707
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/Search/StoreSchema.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\Search;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class StoreSchema extends Command\Builder implements Command\BuilderInterface
+{
+    /**
+     * Name of index to create
+     *
+     * @var string
+     */
+    protected $name = '';
+
+    protected $schema = '';
+
+    public function withSchemaFile($schema_file)
+    {
+        $this->schema = file_get_contents($schema_file);
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getSchema()
+    {
+        return $this->schema;
+    }
+
+    public function withSchemaString($schema)
+    {
+        $this->schema = $schema;
+
+        return $this;
+    }
+
+    public function withName($name)
+    {
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Search\Schema\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Search\Schema\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Name');
+        $this->required('Schema');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/SetBucketProperties.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/SetBucketProperties.php
new file mode 100644
index 0000000000..f08cf3b29a
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/SetBucketProperties.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class SetBucketProperties extends Command\Builder implements Command\BuilderInterface
+{
+    use BucketTrait;
+
+    /**
+     * @var array
+     */
+    protected $properties = [];
+
+    /**
+     * @param $key
+     * @param $value
+     *
+     * @return $this
+     */
+    public function set($key, $value)
+    {
+        $this->properties[$key] = $value;
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getProperties()
+    {
+        return $this->properties;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\Bucket\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\Bucket\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+
+        if (count($this->properties) < 1) {
+            throw new Exception('At least one element to add or remove needs to be defined.');
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/StoreObject.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/StoreObject.php
new file mode 100644
index 0000000000..f883fd6717
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/StoreObject.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Used to increment counter objects in Riak by the provided positive / negative integer
+ *
+ * <code>
+ * $command = (new Command\Builder\StoreObject($riak))
+ *   ->buildObject('{"firstName":"John","lastName":"Doe","email":"johndoe@gmail.com"}')
+ *   ->buildBucket('users')
+ *   ->build();
+ *
+ * $response = $command->execute();
+ *
+ * $user_location = $response->getLocation();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class StoreObject extends Command\Builder implements Command\BuilderInterface
+{
+    use ObjectTrait;
+    use LocationTrait;
+
+    /**
+     * @var bool
+     */
+    protected $decodeAsAssociative = false;
+
+    /**
+     * Tells the client to decode the data as an associative array instead of a PHP stdClass object.
+     * Only works if the fetched object type is JSON.
+     *
+     * @return $this
+     */
+    public function withDecodeAsAssociative()
+    {
+        $this->decodeAsAssociative = true;
+        return $this;
+    }
+
+    /**
+     * Fetch the setting for decodeAsAssociative.
+     *
+     * @return bool
+     */
+    public function getDecodeAsAssociative()
+    {
+        return $this->decodeAsAssociative;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\KVObject\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\KVObject\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+        $this->required('DataObject');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DeleteRow.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DeleteRow.php
new file mode 100644
index 0000000000..80e0f37955
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DeleteRow.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DeleteRow extends Command\Builder implements Command\BuilderInterface
+{
+    use TableTrait;
+    use KeyTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\TimeSeries\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\TimeSeries\Delete($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Key');
+        $this->required('Table');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DescribeTable.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DescribeTable.php
new file mode 100644
index 0000000000..7710affc7a
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/DescribeTable.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DescribeTable extends Command\Builder\TimeSeries\Query implements Command\BuilderInterface
+{
+    /**
+     * Which table do you want to describe?
+     *
+     * @param $table
+     *
+     * @return $this
+     */
+    public function withTable($table)
+    {
+        if ($table) {
+            $this->query = "DESCRIBE {$table}";
+        }
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/FetchRow.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/FetchRow.php
new file mode 100644
index 0000000000..96e9d721cb
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/FetchRow.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchRow extends Command\Builder implements Command\BuilderInterface
+{
+    use TableTrait;
+    use KeyTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\TimeSeries\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\TimeSeries\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Key');
+        $this->required('Table');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/KeyTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/KeyTrait.php
new file mode 100644
index 0000000000..87016565b6
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/KeyTrait.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait KeyTrait
+{
+    /**
+     * Stores the key
+     *
+     * @var \Basho\Riak\TimeSeries\Cell[]
+     */
+    protected $key = [];
+
+    /**
+     * Gets the key
+     *
+     * @return \Basho\Riak\TimeSeries\Cell[]
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * Attach the provided key to the Command Builder
+     *
+     * @param \Basho\Riak\TimeSeries\Cell[] $key
+     *
+     * @return $this
+     */
+    public function atKey(array $key)
+    {
+        $this->key = $key;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/Query.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/Query.php
new file mode 100644
index 0000000000..5df2b2f3dd
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/Query.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Query extends Command\Builder implements Command\BuilderInterface
+{
+    protected $query = '';
+    protected $interps = [];
+
+    public function __construct(Riak $riak)
+    {
+        parent::__construct($riak);
+    }
+
+    /**
+     * TimeSeries SQL'ish query
+     *
+     * @param $query
+     *
+     * @return $this
+     */
+    public function withQuery($query)
+    {
+        $this->query = $query;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getQuery()
+    {
+        return $this->query;
+    }
+
+    /**
+     * @return array
+     */
+    public function getInterps()
+    {
+        return $this->interps;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\TimeSeries\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\TimeSeries\Query\Fetch($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Query');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/RowsTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/RowsTrait.php
new file mode 100644
index 0000000000..e49e205a22
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/RowsTrait.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait RowsTrait
+{
+    /**
+     * Stores the rows
+     *
+     * @var array $rows
+     */
+    protected $rows = [];
+
+    /**
+     * @return array $rows
+     */
+    public function getRows()
+    {
+        return $this->rows;
+    }
+
+    /**
+     * Attach the provided rows to the Command
+     *
+     * @param array $rows
+     *
+     * @return $this
+     */
+    public function withRows($rows)
+    {
+        $this->rows = $rows;
+
+        return $this;
+    }
+
+    /**
+     * @param \Basho\Riak\TimeSeries\Cell[] $row
+     */
+    public function withRow(array $row)
+    {
+        $this->rows[] = $row;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/StoreRows.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/StoreRows.php
new file mode 100644
index 0000000000..cd79264386
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/StoreRows.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class StoreRows extends Command\Builder implements Command\BuilderInterface
+{
+    use TableTrait;
+    use RowsTrait;
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\TimeSeries\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\TimeSeries\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Rows');
+        $this->required('Table');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/TableTrait.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/TableTrait.php
new file mode 100644
index 0000000000..bfb8621039
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/TimeSeries/TableTrait.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Basho\Riak\Command\Builder\TimeSeries;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait TableTrait
+{
+    /**
+     * Stores the table name
+     *
+     * @var string|null
+     */
+    protected $table = NULL;
+
+    /**
+     * Gets the table name
+     *
+     * @return string|null
+     */
+    public function getTable()
+    {
+        return $this->table;
+    }
+
+    /**
+     * Attach the provided table name to the Command
+     *
+     * @param string $table
+     *
+     * @return $this
+     */
+    public function inTable($table)
+    {
+        $this->table = $table;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateGSet.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateGSet.php
new file mode 100644
index 0000000000..9a5c8c9f7c
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateGSet.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class UpdateGSet extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * @var array
+     */
+    protected $add_all = [];
+
+    /**
+     * @param mixed $element
+     *
+     * @return $this
+     */
+    public function add($element)
+    {
+        settype($element, 'string');
+        $this->add_all[] = $element;
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getAddAll()
+    {
+        return $this->add_all;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\GSet\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\GSet\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+
+        $count_add = count($this->add_all);
+
+        if ($count_add < 1) {
+            throw new Exception('At least one element to add needs to be defined.');
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateHll.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateHll.php
new file mode 100644
index 0000000000..72d0f121ae
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateHll.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class UpdateHll extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * @var array
+     */
+    protected $add_all = [];
+
+    /**
+     * Similar to Vector Clocks, the context allows us to determine the state of a CRDT Hll
+     *
+     * @var string
+     */
+    protected $context = '';
+
+    /**
+     * @param mixed $element
+     *
+     * @return $this
+     */
+    public function add($element)
+    {
+        settype($element, 'string');
+        $this->add_all[] = $element;
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getAddAll()
+    {
+        return $this->add_all;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Hll\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Hll\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+
+        $count_add = count($this->add_all);
+        if ($count_add < 1) {
+            throw new Exception('At least one element to add must be defined.');
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateMap.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateMap.php
new file mode 100644
index 0000000000..1bfbda2a1f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateMap.php
@@ -0,0 +1,280 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class UpdateMap extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    protected $remove = [];
+
+    /**
+     * @var array
+     */
+    protected $registers = [];
+
+    /**
+     * @var array
+     */
+    protected $flags = [];
+
+    /**
+     * @var IncrementCounter[]
+     */
+    protected $counters = [];
+
+    /**
+     * @var UpdateSet[]
+     */
+    protected $sets = [];
+
+    /**
+     * @var UpdateMap[]
+     */
+    protected $maps = [];
+
+    /**
+     * Similar to Vector Clocks, the context allows us to determine the state of a CRDT Set
+     *
+     * @var string
+     */
+    protected $context = '';
+
+    public function removeRegister($key)
+    {
+        $this->remove($key, Riak\DataType\Map::REGISTER);
+
+        return $this;
+    }
+
+    protected function remove($key, $type)
+    {
+        $this->remove[] = sprintf('%s_%s', $key, $type);
+    }
+
+    public function removeFlag($key)
+    {
+        $this->remove($key, Riak\DataType\Map::FLAG);
+
+        return $this;
+    }
+
+    public function removeCounter($key)
+    {
+        $this->remove($key, Riak\DataType\Counter::TYPE);
+
+        return $this;
+    }
+
+    public function removeSet($key)
+    {
+        $this->remove($key, Riak\DataType\Set::TYPE);
+
+        return $this;
+    }
+
+    public function removeMap($key)
+    {
+        $this->remove($key, Riak\DataType\Map::TYPE);
+
+        return $this;
+    }
+
+    /**
+     * @param $key
+     * @param $value
+     *
+     * @return $this
+     */
+    public function updateRegister($key, $value)
+    {
+        $this->update($key, Riak\DataType\Map::REGISTER, $value);
+
+        return $this;
+    }
+
+    protected function update($key, $type, $value)
+    {
+        $property = "{$type}s";
+        $this->{$property}[sprintf('%s_%s', $key, $type)] = $value;
+    }
+
+    /**
+     * @param $key
+     * @param bool $state
+     *
+     * @return $this
+     */
+    public function updateFlag($key, $state = TRUE)
+    {
+        $this->update($key, Riak\DataType\Map::FLAG, $state);
+
+        return $this;
+    }
+
+    /**
+     * @param $key
+     * @param IncrementCounter $builder
+     *
+     * @return $this
+     */
+    public function updateCounter($key, IncrementCounter $builder)
+    {
+        $this->update($key, Riak\DataType\Counter::TYPE, $builder);
+
+        return $this;
+    }
+
+    /**
+     * @param $key
+     * @param UpdateSet $builder
+     *
+     * @return $this
+     */
+    public function updateSet($key, UpdateSet $builder)
+    {
+        $this->update($key, Riak\DataType\Set::TYPE, $builder);
+
+        return $this;
+    }
+
+    /**
+     * @param $key
+     * @param UpdateMap $builder
+     *
+     * @return $this
+     */
+    public function updateMap($key, UpdateMap $builder)
+    {
+        $this->update($key, Riak\DataType\Map::TYPE, $builder);
+
+        return $this;
+    }
+
+    /**
+     * @param $context
+     *
+     * @return $this
+     */
+    public function withContext($context)
+    {
+        $this->context = $context;
+
+        return $this;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Map\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Map\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+
+        $count_remove = count($this->remove);
+        $count_registers = count($this->registers);
+        $count_flags = count($this->flags);
+        $count_counters = count($this->counters);
+        $count_sets = count($this->sets);
+        $count_maps = count($this->maps);
+
+        if ($count_remove + $count_registers + $count_flags + $count_counters + $count_sets + $count_maps < 1) {
+            throw new Exception('At least one add, remove, or update operation needs to be defined.');
+        }
+
+        if ($count_remove) {
+            $this->required('Location');
+            $this->required('Context');
+        }
+
+        // if we are performing a remove on a nested set, Location and context are required
+        if ($count_sets) {
+            foreach ($this->sets as $set) {
+                if (count($set->getRemoveAll())) {
+                    $this->required('Location');
+                    $this->required('Context');
+                    break;
+                }
+            }
+        }
+
+
+        // if we are performing a remove, Location and context are required
+        if ($count_remove) {
+            $this->required('Location');
+            $this->required('Context');
+        }
+    }
+
+    public function getRemove()
+    {
+        return $this->remove;
+    }
+
+    /**
+     * @return array
+     */
+    public function getRegisters()
+    {
+        return $this->registers;
+    }
+
+    /**
+     * @return array
+     */
+    public function getFlags()
+    {
+        return $this->flags;
+    }
+
+    /**
+     * @return IncrementCounter[]
+     */
+    public function getCounters()
+    {
+        return $this->counters;
+    }
+
+    /**
+     * @return UpdateSet[]
+     */
+    public function getSets()
+    {
+        return $this->sets;
+    }
+
+    /**
+     * @return UpdateMap[]
+     */
+    public function getMaps()
+    {
+        return $this->maps;
+    }
+
+    /**
+     * getContext
+     *
+     * @return string
+     */
+    public function getContext()
+    {
+        return $this->context;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateSet.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateSet.php
new file mode 100644
index 0000000000..06017f2b66
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Builder/UpdateSet.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Basho\Riak\Command\Builder;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class UpdateSet extends Command\Builder implements Command\BuilderInterface
+{
+    use LocationTrait;
+
+    /**
+     * @var array
+     */
+    protected $add_all = [];
+
+    /**
+     * @var array
+     */
+    protected $remove_all = [];
+
+    /**
+     * Similar to Vector Clocks, the context allows us to determine the state of a CRDT Set
+     *
+     * @var string
+     */
+    protected $context = '';
+
+    /**
+     * @param mixed $element
+     *
+     * @return $this
+     */
+    public function add($element)
+    {
+        settype($element, 'string');
+        $this->add_all[] = $element;
+
+        return $this;
+    }
+
+    /**
+     * @param mixed $element
+     *
+     * @return $this
+     */
+    public function remove($element)
+    {
+        settype($element, 'string');
+        $this->remove_all[] = $element;
+
+        return $this;
+    }
+
+    /**
+     * @param $context
+     *
+     * @return $this
+     */
+    public function withContext($context)
+    {
+        $this->context = $context;
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getAddAll()
+    {
+        return $this->add_all;
+    }
+
+    /**
+     * @return array
+     */
+    public function getRemoveAll()
+    {
+        return $this->remove_all;
+    }
+
+    /**
+     * getContext
+     *
+     * @return string
+     */
+    public function getContext()
+    {
+        return $this->context;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return Command\DataType\Set\Store
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Command\DataType\Set\Store($this);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function validate()
+    {
+        $this->required('Bucket');
+
+        $count_add = count($this->add_all);
+        $count_remove = count($this->remove_all);
+
+        if ($count_add + $count_remove < 1) {
+            throw new Exception('At least one element to add or remove needs to be defined.');
+        }
+
+        // if we are performing a remove, Location and context are required
+        if ($count_remove) {
+            $this->required('Location');
+            $this->required('Context');
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/BuilderInterface.php b/vendor/phpfastcache/riak-client/src/Riak/Command/BuilderInterface.php
new file mode 100644
index 0000000000..9aae7247ee
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/BuilderInterface.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+/**
+ * BuilderInterface
+ *
+ * [summary]
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+interface BuilderInterface
+{
+    const COMMAND = '';
+
+    public function build();
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Fetch.php
new file mode 100644
index 0000000000..5a7c4a2d06
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Fetch.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Counter;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Used to fetch a counter
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\DataType\Counter\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\FetchCounter $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\DataType\Counter\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Response.php
new file mode 100644
index 0000000000..aaeafa9d42
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Response.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Counter;
+
+use Basho\Riak\DataType\Counter;
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \Basho\Riak\DataType\Counter|null
+     */
+    protected $counter = null;
+
+    /**
+     * @var Location
+     */
+    protected $location = null;
+
+    /**
+     * @var string
+     */
+    protected $date = '';
+
+    public function __construct($success = true, $code = 0, $message = '', $location = null, $counter = null, $date = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->counter = $counter;
+        $this->location = $location;
+        $this->date = $date;
+    }
+
+    /**
+     * Retrieves the Location value from the response headers
+     *
+     * @return Location
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @return Counter|null
+     */
+    public function getCounter()
+    {
+        return $this->counter;
+    }
+
+    /**
+     * Retrieves the date of the counter's retrieval
+     *
+     * @return string
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Store.php
new file mode 100644
index 0000000000..2d6b98298d
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Counter/Store.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Counter;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+
+/**
+ * Stores a write operation to a CRDT counter
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * @var int
+     */
+    protected $increment = 0;
+
+    /**
+     * @var Command\DataType\Counter\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\IncrementCounter $builder)
+    {
+        parent::__construct($builder);
+
+        $this->increment = $builder->getIncrement();
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['increment' => $this->increment];
+    }
+
+    /**
+     * @return Command\DataType\Counter\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/GSet/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/GSet/Store.php
new file mode 100644
index 0000000000..c9573e29ff
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/GSet/Store.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\GSet;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Stores a write update to a gset
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * @var array
+     */
+    protected $add_all = [];
+
+    /**
+     * @var Command\DataType\Set\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\UpdateGSet $builder)
+    {
+        parent::__construct($builder);
+
+        $this->add_all = $builder->getAddAll();
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['add_all' => $this->add_all];
+    }
+
+    /**
+     * @return Command\DataType\Set\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Fetch.php
new file mode 100644
index 0000000000..d360018449
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Fetch.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Hll;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Fetches an Hll data type from Riak
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\DataType\Hll\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\FetchHll $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\DataType\Hll\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Response.php
new file mode 100644
index 0000000000..ce7c9e6e5c
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Response.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Hll;
+
+use Basho\Riak\DataType\Hll;
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on an hll data type
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \Basho\Riak\DataType\Hll|null
+     */
+    protected $hll = null;
+
+    public function __construct($success = true, $code = 0, $message = '', $location = null, $hll = null, $date = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->hll = $hll;
+        $this->location = $location;
+        $this->date = $date;
+    }
+
+    /**
+     * Retrieves the Location value from the response headers
+     *
+     * @return Location
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @return Hll|null
+     */
+    public function getHll()
+    {
+        return $this->hll;
+    }
+
+    /**
+     * Retrieves the date of the hll's retrieval
+     *
+     * @return string
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Store.php
new file mode 100644
index 0000000000..892b30d3b6
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Hll/Store.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Hll;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Stores an update to an hll
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * @var array
+     */
+    protected $add_all = [];
+
+    /**
+     * @var Command\DataType\Hll\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\UpdateHll $builder)
+    {
+        parent::__construct($builder);
+
+        $this->add_all = $builder->getAddAll();
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['add_all' => $this->add_all];
+    }
+
+    /**
+     * @return Command\DataType\Hll\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Fetch.php
new file mode 100644
index 0000000000..16a192eded
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Fetch.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Map;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Fetches a map data type from Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\DataType\Map\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\FetchMap $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\DataType\Map\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Response.php
new file mode 100644
index 0000000000..91be14bc0a
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Response.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Map;
+
+use Basho\Riak\DataType\Map;
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \Basho\Riak\DataType\Map|null
+     */
+    protected $map = null;
+
+    /**
+     * @var Location
+     */
+    protected $location = null;
+
+    /**
+     * @var string
+     */
+    protected $date = '';
+
+    public function __construct($success = true, $code = 0, $message = '', $location = null, $map = null, $date = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->map = $map;
+        $this->location = $location;
+        $this->date = $date;
+    }
+
+    /**
+     * Retrieves the Location value from the response headers
+     *
+     * @return Location
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @return Map|null
+     */
+    public function getMap()
+    {
+        return $this->map;
+    }
+
+    /**
+     * Retrieves the date of the counter's retrieval
+     *
+     * @return string
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Store.php
new file mode 100644
index 0000000000..fd4d300a44
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Map/Store.php
@@ -0,0 +1,133 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Map;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Stores a write to a map
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * @var Command\DataType\Map\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    /**
+     * Elements to remove from the map
+     *
+     * @var array
+     */
+    protected $remove = [];
+
+    /**
+     * @var array
+     */
+    protected $registers = [];
+
+    /**
+     * @var array
+     */
+    protected $flags = [];
+
+    /**
+     * @var Command\Builder\IncrementCounter[]
+     */
+    protected $counters = [];
+
+    /**
+     * @var Command\Builder\UpdateSet[]
+     */
+    protected $sets = [];
+
+    /***
+     * @var Command\Builder\UpdateMap[]
+     */
+    protected $maps = [];
+
+    public function __construct(Command\Builder\UpdateMap $builder)
+    {
+        parent::__construct($builder);
+
+        $this->remove = $builder->getRemove();
+        $this->registers = $builder->getRegisters();
+        $this->flags = $builder->getFlags();
+        $this->counters = $builder->getCounters();
+        $this->sets = $builder->getSets();
+        $this->maps = $builder->getMaps();
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        $data = [];
+
+        if (count($this->remove)) {
+            $data['remove'] = $this->remove;
+        }
+
+        if (count($this->registers) || count($this->flags) || count($this->counters) || count($this->sets) || count($this->maps)) {
+            $data['update'] = [];
+        }
+
+        foreach ($this->registers as $key => $item) {
+            $data['update'][$key] = $item;
+        }
+
+        foreach ($this->flags as $key => $item) {
+            $data['update'][$key] = ($item === TRUE ? 'enable' : 'disable');
+        }
+
+        foreach ($this->counters as $key => $item) {
+            $data['update'][$key] = $item->getIncrement();
+        }
+
+        foreach ($this->sets as $key => $item) {
+            $data['update'][$key] = [];
+            $data['update'][$key]['add_all'] = $item->getAddAll();
+
+            $remove = $item->getRemoveAll();
+            if (count($remove)) {
+                $data['update'][$key]['remove_all'] = $remove;
+            }
+        }
+
+        foreach ($this->maps as $key => $item) {
+            $mapCommand = $item->atLocation($this->getLocation())->build();
+            $data['update'][$key] = $mapCommand->getData();
+        }
+
+        return $data;
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @return Command\DataType\Map\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Fetch.php
new file mode 100644
index 0000000000..6e4af4fd54
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Fetch.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Set;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Fetches a Set data type from Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\DataType\Set\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\FetchSet $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\DataType\Set\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Response.php
new file mode 100644
index 0000000000..779dbbb5b4
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Response.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Set;
+
+use Basho\Riak\DataType\Set;
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on a set data type
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \Basho\Riak\DataType\Set|null
+     */
+    protected $set = null;
+
+    public function __construct($success = true, $code = 0, $message = '', $location = null, $set = null, $date = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->set = $set;
+        $this->location = $location;
+        $this->date = $date;
+    }
+
+    /**
+     * Retrieves the Location value from the response headers
+     *
+     * @return Location
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @return Set|null
+     */
+    public function getSet()
+    {
+        return $this->set;
+    }
+
+    /**
+     * Retrieves the date of the counter's retrieval
+     *
+     * @return string
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Store.php
new file mode 100644
index 0000000000..944fc07e15
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/DataType/Set/Store.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Basho\Riak\Command\DataType\Set;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+use Basho\Riak\Location;
+
+/**
+ * Stores a write update to a set
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * @var array
+     */
+    protected $add_all = [];
+
+    /**
+     * @var array
+     */
+    protected $remove_all = [];
+
+    /**
+     * @var Command\DataType\Set\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    public function __construct(Command\Builder\UpdateSet $builder)
+    {
+        parent::__construct($builder);
+
+        $this->add_all = $builder->getAddAll();
+        $this->remove_all = $builder->getRemoveAll();
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['add_all' => $this->add_all, 'remove_all' => $this->remove_all];
+    }
+
+    /**
+     * @return Command\DataType\Set\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Exception.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Exception.php
new file mode 100644
index 0000000000..87fcaac57e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Exception.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+/**
+ * Exception thrown when there is an error within the execution of a Command object.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Exception extends \Basho\Riak\Exception
+{
+
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Query.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Query.php
new file mode 100644
index 0000000000..1fed873792
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Query.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Basho\Riak\Command\Indexes;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Riak 2i query information.
+ *
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+class Query extends Command implements CommandInterface
+{
+    /**
+     * @var string
+     */
+    protected $indexName = NULL;
+
+    protected $match = NULL;
+    protected $lowerBound = NULL;
+    protected $upperBound = NULL;
+
+    protected $isMatchQuery = false;
+    protected $isRangeQuery = false;
+
+    /**
+     * @var Command\Indexes\Response|null
+     */
+    protected $response = NULL;
+
+    public function __construct(Command\Builder\QueryIndex $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->indexName = $builder->getIndexName();
+
+        if($builder->isRangeQuery()) {
+            $this->lowerBound = $builder->getLowerBound();
+            $this->upperBound = $builder->getUpperBound();
+            $this->isRangeQuery = true;
+        }
+        else {
+            $this->match = $builder->getMatchValue();
+            $this->isMatchQuery = true;
+        }
+
+        $continuation = $builder->getContinuation();
+        if(!empty($continuation)) {
+            $this->parameters['continuation'] = $continuation;
+        }
+
+        $maxResults = $builder->getMaxResults();
+        if(!empty($maxResults)) {
+            $this->parameters['max_results'] = $maxResults;
+        }
+
+        $returnTerms = $builder->getReturnTerms();
+        if(!empty($returnTerms)) {
+            $this->parameters['return_terms'] = ($returnTerms) ? 'true' : 'false';
+        }
+
+        $paginationSort = $builder->getPaginationSort();
+        if(!empty($paginationSort)) {
+            $this->parameters['pagination_sort'] = ($paginationSort) ? 'true' : 'false';
+        }
+
+        $termRegex = $builder->getTermFilter();
+        if(!empty($termRegex)) {
+            $this->parameters['term_regex'] = $termRegex;
+        }
+
+        $timeout = $builder->getTimeout();
+        if(!empty($timeout)) {
+            $this->parameters['timeout'] = $timeout;
+        }
+    }
+
+    public function getIndexName() {
+        return $this->indexName;
+    }
+
+    public function getMatchValue() {
+        return $this->match;
+    }
+
+    public function getLowerBound() {
+        return $this->lowerBound;
+    }
+
+    public function getUpperBound() {
+        return $this->upperBound;
+    }
+
+    public function isMatchQuery()
+    {
+        return $this->isMatchQuery;
+    }
+
+    public function isRangeQuery()
+    {
+        return $this->isRangeQuery;
+    }
+
+    public function hasParameters()
+    {
+        return true;
+    }
+
+    /**
+     * @return Command\Indexes\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Response.php
new file mode 100644
index 0000000000..df4e26ab40
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Indexes/Response.php
@@ -0,0 +1,93 @@
+<?php
+
+namespace Basho\Riak\Command\Indexes;
+
+
+/**
+ * Container for a response related to an index query
+ *
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var array
+     */
+    protected $results = [];
+
+    /**
+     * @var bool
+     */
+    protected $termsReturned = false;
+
+    protected $done = false;
+
+    /**
+     * @var string|null
+     */
+    protected $continuation = null;
+
+    protected $date = '';
+
+    public function __construct($success = true, $code = 0, $message = '', $results = [], $termsReturned = false, $continuation = null, $done = true, $date = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->results = $results;
+        $this->termsReturned = $termsReturned;
+        $this->continuation = $continuation;
+        $this->done = $done;
+        $this->date = $date;
+
+        // when timeout is used, cURL returns success for some reason
+        if (in_array($code, ['501', '503'])) {
+            $this->success = false;
+        }
+    }
+
+    /**
+     * Get the array of keys that match the query
+     *
+     * @return array
+     */
+    public function getResults()
+    {
+        return $this->results;
+    }
+
+    /**
+     * Indicates whether the terms are included in the results array.
+     *
+     * @return bool
+     */
+    public function hasReturnTerms()
+    {
+        return $this->termsReturned;
+    }
+
+    /**
+     * Get the continuation string for paged queries.
+     *
+     * @return null|string
+     */
+    public function getContinuation()
+    {
+        return $this->continuation;
+    }
+
+    /**
+     * Retrieves the date of the counter's retrieval
+     *
+     * @return string
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getDate()
+    {
+        return $this->date;
+    }
+
+    public function isDone()
+    {
+        return $this->done;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject.php
new file mode 100644
index 0000000000..946f79e07f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+use Basho\Riak\Command;
+use Basho\Riak\Location;
+
+/**
+ * Base class for Commands performing operations on Kv Objects
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+abstract class KVObject extends Command
+{
+    /**
+     * @var KVObject\Response|null
+     */
+    protected $response = NULL;
+
+    /**
+     * @var \Basho\Riak\DataObject|null
+     */
+    protected $object = NULL;
+
+    /**
+     * @var Location|null
+     */
+    protected $location = NULL;
+
+    protected $decodeAsAssociative = false;
+
+    public function getObject()
+    {
+        return $this->object;
+    }
+
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    public function getEncodedData()
+    {
+        $data = $this->getData();
+
+        if (in_array($this->object->getContentType(), ['application/json', 'text/json'])) {
+            return json_encode($data);
+        } elseif (in_array($this->object->getContentEncoding(), ['base64'])) {
+            return base64_encode($data);
+        } elseif (in_array($this->object->getContentEncoding(), ['binary','none'])) {
+            return $data;
+        }
+
+        return rawurlencode($data);
+    }
+
+    public function getDecodedData($data, $contentType)
+    {
+        return static::decodeData($data, $contentType, $this->decodeAsAssociative);
+    }
+
+    public static function decodeData($data, $contentType = '', $decodeAsAssociative = false)
+    {
+        if (in_array($contentType, ['application/json', 'text/json'])) {
+            return json_decode($data, $decodeAsAssociative);
+        }
+
+        return rawurldecode($data);
+    }
+
+    public function getData()
+    {
+        return $this->object->getData();
+    }
+
+    /**
+     * @return Command\KVObject\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Delete.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Delete.php
new file mode 100644
index 0000000000..c06ebbb549
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Delete.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to remove an object from Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Delete extends Command\KVObject implements CommandInterface
+{
+    protected $method = 'DELETE';
+
+    public function __construct(Command\Builder\DeleteObject $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Fetch.php
new file mode 100644
index 0000000000..b91ac6d099
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Fetch.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Fetches a Riak Kv Object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command\KVObject implements CommandInterface
+{
+    public function __construct(Command\Builder\FetchObject $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+        $this->decodeAsAssociative = $builder->getDecodeAsAssociative();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/FetchPreflist.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/FetchPreflist.php
new file mode 100644
index 0000000000..a7bc06f187
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/FetchPreflist.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject;
+
+use Basho\Riak\Command;
+
+use Basho\Riak\CommandInterface;
+
+/**
+ * Fetches the Preflist for a Riak Kv Object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchPreflist extends Command\KVObject implements CommandInterface
+{
+    public function __construct(Command\Builder\FetchPreflist $builder)
+    {
+        parent::__construct($builder);
+
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Fetch.php
new file mode 100644
index 0000000000..fcf6eac8a1
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Fetch.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject\Keys;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Lists Riak Kv Object keys
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command\KVObject implements CommandInterface
+{
+    public function __construct(Command\Builder\ListObjects $builder)
+    {
+        parent::__construct($builder);
+
+        $this->parameters['keys'] = 'true';
+        $this->bucket = $builder->getBucket();
+        $this->decodeAsAssociative = $builder->getDecodeAsAssociative();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Response.php
new file mode 100644
index 0000000000..ab8be9389f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Keys/Response.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject\Keys;
+
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \Basho\Riak\Location[]
+     */
+    protected $keys = [];
+
+    public function __construct($success = true, $code = 0, $message = '', $keys = [])
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->keys = $keys;
+    }
+
+    /**
+     * Fetches the keys from the response
+     *
+     * @return \Basho\Riak\Location[]
+     */
+    public function getKeys()
+    {
+        return $this->keys;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Response.php
new file mode 100644
index 0000000000..a69c5137a4
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Response.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject;
+
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \Basho\Riak\DataObject[]
+     */
+    protected $objects = [];
+
+    protected $location = null;
+
+    public function __construct($success = true, $code = 0, $message = '', $location = null, $objects = [])
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->objects = $objects;
+        $this->location = $location;
+    }
+
+    /**
+     * @return bool
+     */
+    public function hasSiblings()
+    {
+        return count($this->objects) > 1;
+    }
+
+    /**
+     * Retrieves the Location value from the response headers
+     *
+     * @return Location
+     * @throws \Basho\Riak\Command\Exception
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+
+    /**
+     * @return \Basho\Riak\DataObject|null
+     */
+    public function getObject()
+    {
+        return !empty($this->objects[0]) ? $this->objects[0] : null;
+    }
+
+    /**
+     * Fetches the sibling tags from the response
+     *
+     * @return array
+     */
+    public function getSiblings()
+    {
+        return $this->objects;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Store.php
new file mode 100644
index 0000000000..48c90c35b1
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/KVObject/Store.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Basho\Riak\Command\KVObject;
+
+use Basho\Riak\Api\Http\Translators\SecondaryIndexHeaderTranslator;
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Riak key value object store
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command\KVObject implements CommandInterface
+{
+    /**
+     * Type of operation
+     *
+     * @var string
+     */
+    protected $method = 'POST';
+
+    public function __construct(Command\Builder\StoreObject $builder)
+    {
+        parent::__construct($builder);
+
+        $this->object = $builder->getDataObject();
+        $this->bucket = $builder->getBucket();
+        $this->location = $builder->getLocation();
+        $this->decodeAsAssociative = $builder->getDecodeAsAssociative();
+
+        if ($this->location) {
+            $this->method = 'PUT';
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Fetch.php
new file mode 100644
index 0000000000..ba3edc3fcb
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Fetch.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Basho\Riak\Command\MapReduce;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to fetch a result set from Riak using MapReduce
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * @var Command\MapReduce\Response|null
+     */
+    protected $response = null;
+
+    protected $inputs;
+
+    protected $query;
+
+    public function __construct(Command\Builder\MapReduce\FetchObjects $builder)
+    {
+        parent::__construct($builder);
+
+        $this->inputs = $builder->getInputs();
+        // query needs to be a list
+        $this->query = $builder->getQuery();
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['inputs' => $this->inputs, 'query' => $this->query];
+    }
+
+    /**
+     * @return Command\MapReduce\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Response.php
new file mode 100644
index 0000000000..348c35f27d
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/MapReduce/Response.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Basho\Riak\Command\MapReduce;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    protected $results = '';
+
+    public function __construct($success = true, $code = 0, $message = '', $results = null)
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->results = $results;
+    }
+
+    public function getResults()
+    {
+        return $this->results;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Ping.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Ping.php
new file mode 100644
index 0000000000..65e05f6fe1
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Ping.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Pings Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Ping extends Command implements CommandInterface
+{
+    public function __construct(Command\Builder\Ping $builder)
+    {
+        parent::__construct($builder);
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Response.php
new file mode 100644
index 0000000000..e34cd759c8
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Response.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+/**
+ * Data structure for handling Command responses from Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response
+{
+    protected $success = false;
+
+    protected $code = '';
+
+    protected $message = '';
+
+    public function __construct($success = true, $code = 0, $message = '')
+    {
+        $this->success = $success;
+        $this->code = $code;
+        $this->message = $message;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isSuccess()
+    {
+        return $this->success;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isNotFound()
+    {
+        return $this->code == '404' ? true : false;
+    }
+
+    public function isUnauthorized()
+    {
+        return $this->code == '401' ? true : false;
+    }
+
+    /**
+     * @return string
+     */
+    public function getCode()
+    {
+        return $this->code;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMessage()
+    {
+        return $this->message;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Fetch.php
new file mode 100644
index 0000000000..77ab2b2ffd
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Fetch.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Basho\Riak\Command\Search;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to fetch a search results from Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\Search\Response|null
+     */
+    protected $response = null;
+
+    protected $index_name;
+
+    public function __construct(Command\Builder\Search\FetchObjects $builder)
+    {
+        parent::__construct($builder);
+
+        $this->index_name = $builder->getIndexName();
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\Search\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function __toString()
+    {
+        return $this->index_name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Delete.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Delete.php
new file mode 100644
index 0000000000..b3faef9f34
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Delete.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Index;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to delete a Search Index from Riak Yokozuna
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Delete extends Command implements CommandInterface
+{
+    protected $method = 'DELETE';
+
+    /**
+     * @var string
+     */
+    protected $name = '';
+
+    /**
+     * @var Command\Response|null
+     */
+    protected $response = null;
+
+    public function __construct(Command\Builder\Search\DeleteIndex $builder)
+    {
+        parent::__construct($builder);
+
+        $this->name = $builder->getName();
+    }
+
+    public function getEncodedData()
+    {
+        return $this->getData();
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function __toString()
+    {
+        return $this->name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Fetch.php
new file mode 100644
index 0000000000..66b2eab4a7
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Fetch.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Index;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to fetch a search index from Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\Search\Index\Response|null
+     */
+    protected $response = null;
+
+    protected $name;
+
+    public function __construct(Command\Builder\Search\FetchIndex $builder)
+    {
+        parent::__construct($builder);
+
+        $this->name = $builder->getIndexName();
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\Search\Index\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function __toString()
+    {
+        return $this->name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Response.php
new file mode 100644
index 0000000000..eb1a468dd5
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Response.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Index;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var \stdClass|null
+     */
+    protected $index = null;
+
+    public function __construct($success = true, $code = 0, $message = '', $index = null)
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->index = $index;
+    }
+
+    public function getIndex()
+    {
+        return $this->index;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Store.php
new file mode 100644
index 0000000000..5ea5d40033
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Index/Store.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Index;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Riak Yokozuna Search Index Store
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'PUT';
+
+    /**
+     * @var string
+     */
+    protected $name = '';
+
+    /**
+     * @var string
+     */
+    protected $schema = '';
+
+    /**
+     * @var Command\Response|null
+     */
+    protected $response = null;
+
+    public function __construct(Command\Builder\Search\StoreIndex $builder)
+    {
+        parent::__construct($builder);
+
+        $this->name = $builder->getName();
+        $this->schema = $builder->getSchema();
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function getData()
+    {
+        return ['schema' => $this->schema];
+    }
+
+    /**
+     * @return Command\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function __toString()
+    {
+        return $this->name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Response.php
new file mode 100644
index 0000000000..f17fbab4ad
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Response.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Basho\Riak\Command\Search;
+
+use Basho\Riak\Search\Doc;
+
+/**
+ * Container for a response for receiving data back from a Search request on Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    /**
+     * @var int
+     */
+    protected $numFound = 0;
+
+    /**
+     * @var Doc[]
+     */
+    protected $docs = [];
+
+    /**
+     * Response constructor.
+     * @param bool|true $success
+     * @param int $code
+     * @param string $message
+     * @param int $numFound
+     * @param \Basho\Riak\Search\Doc[] $docs
+     */
+    public function __construct($success = true, $code = 0, $message = '', $numFound = 0, $docs = [])
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->numFound = $numFound;
+        $this->docs = $docs;
+    }
+
+    /**
+     * @return int
+     */
+    public function getNumFound()
+    {
+        return $this->numFound;
+    }
+
+    /**
+     * @return \Basho\Riak\Search\Doc[]
+     */
+    public function getDocs()
+    {
+        return $this->docs;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Fetch.php
new file mode 100644
index 0000000000..5a5c6b69e0
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Fetch.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Schema;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Class Fetch
+ *
+ * Used to fetch a counter
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * @var Command\Search\Schema\Response|null
+     */
+    protected $response = null;
+
+    protected $name;
+
+    public function __construct(Command\Builder\Search\FetchSchema $builder)
+    {
+        parent::__construct($builder);
+
+        $this->name = $builder->getSchemaName();
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+
+    /**
+     * @return Command\Search\Schema\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function __toString()
+    {
+        return $this->name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Response.php
new file mode 100644
index 0000000000..1f9a379aee
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Response.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Schema;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    protected $schema = '';
+    protected $contentType = '';
+
+    public function __construct($success = true, $code = 0, $message = '', $schema = null, $contentType = '')
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->schema = $schema;
+        $this->contentType = $contentType;
+    }
+
+    public function getSchema()
+    {
+        return $this->schema;
+    }
+
+    /**
+     * @return string
+     */
+    public function getContentType()
+    {
+        return $this->contentType;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Store.php
new file mode 100644
index 0000000000..65384716eb
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Search/Schema/Store.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Basho\Riak\Command\Search\Schema;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Class Store
+ *
+ * Riak Yokozuna Search Schema Store
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'PUT';
+
+    /**
+     * @var string
+     */
+    protected $name = '';
+
+    /**
+     * @var string
+     */
+    protected $schema = '';
+
+    /**
+     * @var Command\Response|null
+     */
+    protected $response = null;
+
+    public function __construct(Command\Builder\Search\StoreSchema $builder)
+    {
+        parent::__construct($builder);
+
+        $this->name = $builder->getName();
+        $this->schema = $builder->getSchema();
+    }
+
+    public function getEncodedData()
+    {
+        return $this->getData();
+    }
+
+    public function getData()
+    {
+        return $this->schema;
+    }
+
+    /**
+     * @return Command\Response
+     */
+    public function execute()
+    {
+        return parent::execute();
+    }
+
+    public function __toString()
+    {
+        return $this->name;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Stats.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Stats.php
new file mode 100644
index 0000000000..8014af3bcc
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Stats.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Basho\Riak\Command;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Riak real time stats
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Stats extends Command implements CommandInterface
+{
+    public function __construct(Command\Builder\FetchStats $builder)
+    {
+        parent::__construct($builder);
+    }
+
+    public function getData()
+    {
+        return '';
+    }
+
+    public function getEncodedData()
+    {
+        return '';
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/Stats/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/Stats/Response.php
new file mode 100644
index 0000000000..10d56315aa
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/Stats/Response.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Basho\Riak\Command\Stats;
+
+use Basho\Riak\Location;
+
+/**
+ * Container for a response related to an operation on an object
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends \Basho\Riak\Command\Response
+{
+    protected $stats = [];
+
+    public function __construct($success = true, $code = 0, $message = '', $data = [])
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->stats = $data;
+    }
+
+    public function __get($name) {
+        if (isset($this->stats[$name])) {
+            return $this->stats[$name];
+        }
+
+        return null;
+    }
+
+    public function getAllStats() {
+        return $this->stats;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Delete.php b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Delete.php
new file mode 100644
index 0000000000..7f164ae669
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Delete.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Basho\Riak\Command\TimeSeries;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to fetch data within a TS table
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Delete extends Command implements CommandInterface
+{
+    /**
+     * Stores the table name
+     *
+     * @var string|null
+     */
+    protected $table = NULL;
+
+    /**
+     * Stores the key
+     *
+     * @var \Basho\Riak\TimeSeries\Cell[]
+     */
+    protected $key = [];
+
+    public function getTable()
+    {
+        return $this->table;
+    }
+
+    public function getData()
+    {
+        return $this->key;
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function __construct(Command\Builder\TimeSeries\DeleteRow $builder)
+    {
+        parent::__construct($builder);
+
+        $this->table = $builder->getTable();
+        $this->key = $builder->getKey();
+    }
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Fetch.php
new file mode 100644
index 0000000000..3a87bfe465
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Fetch.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Basho\Riak\Command\TimeSeries;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to fetch data within a TS table
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    /**
+     * Stores the table name
+     *
+     * @var string|null
+     */
+    protected $table = NULL;
+
+    /**
+     * Stores the key
+     *
+     * @var \Basho\Riak\TimeSeries\Cell[]
+     */
+    protected $key = [];
+
+    public function getTable()
+    {
+        return $this->table;
+    }
+
+    public function getData()
+    {
+        return $this->key;
+    }
+
+    public function getEncodedData()
+    {
+        return json_encode($this->getData());
+    }
+
+    public function __construct(Command\Builder\TimeSeries\FetchRow $builder)
+    {
+        parent::__construct($builder);
+
+        $this->table = $builder->getTable();
+        $this->key = $builder->getKey();
+    }
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Fetch.php b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Fetch.php
new file mode 100644
index 0000000000..16851ab6a8
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Fetch.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Riak\Command\TimeSeries\Query;
+
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to store data within a TS table
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Fetch extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * Stores the table name
+     *
+     * @var string|null
+     */
+    protected $query = NULL;
+
+    /**
+     * Interpolations in the form of key => value of the query string
+     *
+     * @var array
+     */
+    protected $interps = [];
+
+    public function getData()
+    {
+        return ['query' => $this->query, 'interpolations' => $this->interps];
+    }
+
+    public function getEncodedData()
+    {
+        // plain text string
+        return $this->query;
+    }
+
+    public function __construct(Command\Builder\TimeSeries\Query $builder)
+    {
+        parent::__construct($builder);
+
+        $this->query = $builder->getQuery();
+        $this->interps = $builder->getInterps();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Response.php
new file mode 100644
index 0000000000..448a2dd9d1
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Query/Response.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Basho\Riak\Command\TimeSeries\Query;
+
+use Basho\Riak\Command;
+
+/**
+ * Response object for TS Fetch, Store, Delete
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends Command\Response
+{
+    protected $results = [];
+
+    public function __construct($success = true, $code = 0, $message = '', $results = [])
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->results = $results;
+    }
+
+    /**
+     * @return \Basho\Riak\TimeSeries\Cell[]|null
+     */
+    public function getResult()
+    {
+        return !empty($this->results[0]) ? $this->results[0] : null;
+    }
+
+    /**
+     * @return array
+     */
+    public function getResults()
+    {
+        return $this->results;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Response.php b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Response.php
new file mode 100644
index 0000000000..3ab37d05df
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Response.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Basho\Riak\Command\TimeSeries;
+
+use Basho\Riak\Command;
+
+/**
+ * Response object for TS Fetch, Store, Delete
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Response extends Command\Response
+{
+    protected $rows = [];
+
+    public function __construct($success = true, $code = 0, $message = '', $rows = [])
+    {
+        parent::__construct($success, $code, $message);
+
+        $this->rows = $rows;
+    }
+
+    /**
+     * @return \Basho\Riak\TimeSeries\Cell[]|null
+     */
+    public function getRow()
+    {
+        return !empty($this->rows[0]) ? $this->rows[0] : null;
+    }
+
+    /**
+     * @return array
+     */
+    public function getRows()
+    {
+        return $this->rows;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Store.php b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Store.php
new file mode 100644
index 0000000000..d673c17623
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Command/TimeSeries/Store.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Basho\Riak\Command\TimeSeries;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+use Basho\Riak\CommandInterface;
+
+/**
+ * Used to store data within a TS table
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Store extends Command implements CommandInterface
+{
+    protected $method = 'POST';
+
+    /**
+     * Stores the table name
+     *
+     * @var string|null
+     */
+    protected $table = NULL;
+
+    /**
+     * Stores the rows
+     *
+     * @var array $rows
+     */
+    protected $rows = [];
+
+    public function getTable()
+    {
+        return $this->table;
+    }
+
+    public function getData()
+    {
+        return $this->rows;
+    }
+
+    public function getEncodedData()
+    {
+        $rows = [];
+        foreach ($this->getData() as $row) {
+            $cells = [];
+            foreach ($row as $cell) {
+                /** @var $cell Riak\TimeSeries\Cell */
+                if ($cell->getType() == Riak\TimeSeries\Cell::BLOB_TYPE) {
+                    $cells[$cell->getName()] = base64_encode($cell->getValue());
+                } else {
+                    $cells[$cell->getName()] = $cell->getValue();
+                }
+            }
+            $rows[] = $cells;
+        }
+        return json_encode($rows);
+    }
+
+    public function __construct(Command\Builder\TimeSeries\StoreRows $builder)
+    {
+        parent::__construct($builder);
+
+        $this->table = $builder->getTable();
+        $this->rows = $builder->getRows();
+    }
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/CommandInterface.php b/vendor/phpfastcache/riak-client/src/Riak/CommandInterface.php
new file mode 100644
index 0000000000..c0f708f7d2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/CommandInterface.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * CommandInterface
+ *
+ * The interface for implementing a new Riak Command class.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+interface CommandInterface
+{
+    public function getMethod();
+
+    public function hasParameters();
+
+    public function getParameters();
+
+    public function getData();
+
+    public function getEncodedData();
+
+    public function getBucket();
+
+    public function execute();
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataObject.php b/vendor/phpfastcache/riak-client/src/Riak/DataObject.php
new file mode 100644
index 0000000000..2de3d370ec
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataObject.php
@@ -0,0 +1,281 @@
+<?php
+
+namespace Basho\Riak;
+
+use Basho\Riak;
+use Basho\Riak\Api\Http\Translator\SecondaryIndex;
+
+/**
+ * Main class for data objects in Riak
+ *
+ * When working with base64 encoded or binary data over HTTP, you need to make use of the setContentEncoding() to
+ * bypass rawurlencode when storing data and getRawData() to bypass
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DataObject
+{
+    /**
+     * Stored data or object
+     *
+     * @var mixed|null
+     */
+    protected $data = null;
+
+    /**
+     * Stores raw non-decoded response data
+     *
+     * @var mixed|null
+     */
+    protected $raw_data = null;
+
+    protected $indexes = [];
+
+    protected $vclock = '';
+
+    protected $content_type = 'text/plain';
+
+    protected $content_encoding = 'utf-8';
+
+    protected $charset = 'utf-8';
+
+    protected $metadata = [];
+
+    /**
+     * @param mixed|null $data
+     * @param array|null $headers DEPRECATED
+     */
+    public function __construct($data = null, $headers = [])
+    {
+        $this->data = $data;
+
+        if (empty($headers) || !is_array($headers)) {
+            return;
+        }
+
+        $this->indexes = (new SecondaryIndex)->extractIndexesFromHeaders($headers);
+
+        // to prevent breaking the interface, parse $headers and place important stuff in new home
+        if (!empty($headers[Riak\Api\Http::CONTENT_TYPE_KEY])) {
+            // if charset is defined within the Content-Type header
+            if (strpos($headers[Riak\Api\Http::CONTENT_TYPE_KEY], 'charset')) {
+                $parts = explode(';', trim($headers[Riak\Api\Http::CONTENT_TYPE_KEY]));
+                $this->content_type = $parts[0];
+                $this->charset = trim(strrpos($parts[1], '='));
+            } else {
+                $this->content_type = $headers[Riak\Api\Http::CONTENT_TYPE_KEY];
+            }
+        }
+
+        if (!empty($headers[Riak\Api\Http::VCLOCK_KEY])) {
+            $this->vclock = $headers[Riak\Api\Http::VCLOCK_KEY];
+        }
+
+        // pull out metadata headers
+        foreach($headers as $key => $value) {
+            if (strpos($key, Riak\Api\Http::METADATA_PREFIX) !== false) {
+                $this->metadata[substr($key, strlen(Riak\Api\Http::METADATA_PREFIX))] = $value;
+            }
+        }
+    }
+
+    public function getData()
+    {
+        return $this->data;
+    }
+
+    public function setData($data)
+    {
+        $this->data = $data;
+
+        return $this;
+    }
+
+    public function getContentType()
+    {
+        return $this->content_type;
+    }
+
+    /**
+     * Used to identify the mime-type of the object data
+     *
+     * If set to `application/json` or `text/json` the object data will automatically be json_encoded upon transfer to
+     * Riak.
+     *
+     * @param string $content_type
+     * @return $this
+     */
+    public function setContentType($content_type)
+    {
+        $this->content_type = $content_type;
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getContentEncoding()
+    {
+        return $this->content_encoding;
+    }
+
+    /**
+     * Used to identify the encoding of the object data
+     *
+     * If set to `base64`, object data will be automatically encoded to base64 upon transfer to Riak.
+     * If set to `binary` or `none`, object data will NOT be rawurlencoded upon transfer to Riak.
+     *
+     * @param string $content_encoding
+     * @return $this
+     */
+    public function setContentEncoding($content_encoding)
+    {
+        $this->content_encoding = $content_encoding;
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getCharset()
+    {
+        return $this->charset;
+    }
+
+    /**
+     * @param string $charset
+     * @return $this
+     */
+    public function setCharset($charset)
+    {
+        $this->charset = $charset;
+        return $this;
+    }
+
+    public function getVclock()
+    {
+        return $this->vclock;
+    }
+
+    /**
+     * @param string $vclock
+     * @return $this
+     */
+    public function setVclock($vclock)
+    {
+        $this->vclock = $vclock;
+        return $this;
+    }
+
+    public function getIndexes()
+    {
+        return $this->indexes;
+    }
+
+    public function getIndex($indexName)
+    {
+        return isset($this->indexes[$indexName]) ? $this->indexes[$indexName] : null;
+    }
+
+    public function addValueToIndex($indexName, $value)
+    {
+        $this->validateIndexNameAndValue($indexName, $value);
+
+        if (!isset($this->indexes[$indexName])) {
+            $this->indexes[$indexName] = [];
+        }
+
+        $this->indexes[$indexName][] = $value;
+
+        return $this;
+    }
+
+    private function validateIndexNameAndValue($indexName, $value)
+    {
+        if (!is_scalar($value)) {
+            throw new \InvalidArgumentException("Invalid index type for '" . $indexName .
+                "'index. Expecting '*_int' for an integer index, or '*_bin' for a string index.");
+        }
+
+        $isIntIndex = SecondaryIndex::isIntIndex($indexName);
+        $isStringIndex = SecondaryIndex::isStringIndex($indexName);
+
+        if (!$isIntIndex && !$isStringIndex) {
+            throw new \InvalidArgumentException("Invalid index type for '" . $indexName .
+                "'index. Expecting '*_int' for an integer index, or '*_bin' for a string index.");
+        }
+
+        if ($isIntIndex && !is_int($value)) {
+            throw new \InvalidArgumentException("Invalid type for '" . $indexName .
+                "'index. Expecting 'integer', value was '" . gettype($value) . "''");
+        }
+
+        if ($isStringIndex && !is_string($value)) {
+            throw new \InvalidArgumentException("Invalid type for '" . $indexName .
+                "'index. Expecting 'string', value was '" . gettype($value) . "''");
+        }
+    }
+
+    public function removeValueFromIndex($indexName, $value)
+    {
+        if (!isset($this->indexes[$indexName])) {
+            return $this;
+        }
+
+        $valuePos = array_search($value, $this->indexes[$indexName]);
+
+        if ($valuePos !== false) {
+            array_splice($this->indexes[$indexName], $valuePos, 1);
+        }
+
+        if (count($this->indexes[$indexName]) == 0) {
+            unset($this->indexes[$indexName]);
+        }
+
+        return $this;
+    }
+
+    public function setMetaDataValue($key, $value = '')
+    {
+        $this->metadata[$key] = $value;
+        return $this;
+    }
+
+    public function getMetaDataValue($key)
+    {
+        return $this->metadata[$key];
+    }
+
+    public function removeMetaDataValue($key)
+    {
+        unset($this->metadata[$key]);
+        return $this;
+    }
+
+    public function getMetaData()
+    {
+        return $this->metadata;
+    }
+
+    /**
+     * Getter for raw non-decoded response data [HTTP ONLY]
+     *
+     * @return mixed|null
+     */
+    public function getRawData()
+    {
+        return $this->raw_data;
+    }
+
+    /**
+     *
+     * @param mixed|null $raw_data
+     * @return $this
+     */
+    public function setRawData($raw_data)
+    {
+        $this->raw_data = $raw_data;
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataType.php b/vendor/phpfastcache/riak-client/src/Riak/DataType.php
new file mode 100644
index 0000000000..015b959e18
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataType.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Abstraction for Conflict-free Replicated Data Types
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+abstract class DataType
+{
+    /**
+     * DataType::TYPE
+     *
+     * Defines the key to be used to identify the data type. Used within a Maps composite key.
+     *
+     * @var string
+     */
+    const TYPE = '';
+
+    /**
+     * Storage member for DataType's current value
+     *
+     * @var mixed
+     */
+    protected $data;
+
+    /**
+     * @return string
+     */
+    public function getType()
+    {
+        return static::TYPE;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataType/Counter.php b/vendor/phpfastcache/riak-client/src/Riak/DataType/Counter.php
new file mode 100644
index 0000000000..aaa2b06187
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataType/Counter.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+Copyright 2014 Basho Technologies, Inc.
+
+Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations under the License.
+*/
+
+namespace Basho\Riak\DataType;
+
+use Basho\Riak\DataType;
+
+/**
+ * Class Counter
+ *
+ * Data structure for counter crdt
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Counter extends DataType
+{
+    /**
+     * {@inheritdoc}
+     */
+    const TYPE = 'counter';
+
+    /**
+     * @param int $data
+     */
+    public function __construct($data)
+    {
+        $this->data = $data;
+    }
+
+    /**
+     * @return int
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataType/Exception.php b/vendor/phpfastcache/riak-client/src/Riak/DataType/Exception.php
new file mode 100644
index 0000000000..ea05221d27
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataType/Exception.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+Copyright 2014 Basho Technologies, Inc.
+
+Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations under the License.
+*/
+
+namespace Basho\Riak\DataType;
+
+/**
+ * Exception
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Exception extends \Basho\Riak\Exception
+{
+
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataType/Hll.php b/vendor/phpfastcache/riak-client/src/Riak/DataType/Hll.php
new file mode 100644
index 0000000000..7dff11f97e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataType/Hll.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Basho\Riak\DataType;
+
+use Basho\Riak\DataType;
+
+/**
+ * Class Hll
+ *
+ * Data structure for HyperLogLog CRDT
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class Hll extends DataType
+{
+    /**
+     * {@inheritdoc}
+     */
+    const TYPE = 'hll';
+
+    /**
+     * @param integer $data
+     */
+    public function __construct($data)
+    {
+        $this->data = $data;
+    }
+
+    /**
+     * @return integer
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataType/Map.php b/vendor/phpfastcache/riak-client/src/Riak/DataType/Map.php
new file mode 100644
index 0000000000..52b5a86250
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataType/Map.php
@@ -0,0 +1,140 @@
+<?php
+
+/*
+Copyright 2014 Basho Technologies, Inc.
+
+Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations under the License.
+*/
+
+namespace Basho\Riak\DataType;
+
+use Basho\Riak\DataType;
+
+/**
+ * Data structure for map crdt
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Map extends DataType
+{
+    /**
+     * {@inheritdoc}
+     */
+    const TYPE = 'map';
+
+    /**
+     * Used within a composite key to identify a flag (bool) element
+     *
+     * @var string
+     */
+    const FLAG = 'flag';
+
+    /**
+     * Used within a composite key to identify a register (string) element
+     *
+     * @var string
+     */
+    const REGISTER = 'register';
+
+    /**
+     * @var string
+     */
+    private $context;
+
+    /**
+     * @param array $data
+     * @param $context
+     */
+    public function __construct(array $data, $context)
+    {
+        $this->data = $data;
+        $this->context = $context;
+    }
+
+    /**
+     * @param $key
+     *
+     * @return string
+     */
+    public function getRegister($key)
+    {
+        return $this->getDataByKey($key, static::REGISTER);
+    }
+
+    protected function getDataByKey($key, $type)
+    {
+        $compKey = $this->getCompKey($key, $type);
+        if (!isset($this->data[$compKey])) {
+            throw new Exception("{$type} {$key} not found within Map.");
+        }
+
+        return $this->data[$compKey];
+    }
+
+    /**
+     * Fetches the composite key used with
+     *
+     * @param $key
+     * @param $type
+     *
+     * @return string
+     */
+    protected function getCompKey($key, $type)
+    {
+        return sprintf('%s_%s', $key, $type);
+    }
+
+    /**
+     * @param $key
+     *
+     * @return bool
+     */
+    public function getFlag($key)
+    {
+        return $this->getDataByKey($key, static::FLAG) == 'enabled' ? TRUE : FALSE;
+    }
+
+    /**
+     * @param $key
+     *
+     * @return Counter
+     */
+    public function getCounter($key)
+    {
+        return new Counter($this->getDataByKey($key, Counter::TYPE));
+    }
+
+    /**
+     * @param $key
+     *
+     * @return Set
+     */
+    public function getSet($key)
+    {
+        return new Set($this->getDataByKey($key, Set::TYPE), $this->context);
+    }
+
+    /**
+     * @param $key
+     *
+     * @return Map
+     */
+    public function getMap($key)
+    {
+        return new Map($this->getDataByKey($key, Map::TYPE), $this->context);
+    }
+
+    public function getContext()
+    {
+        return $this->context;
+    }
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/DataType/Set.php b/vendor/phpfastcache/riak-client/src/Riak/DataType/Set.php
new file mode 100644
index 0000000000..e990f46d01
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/DataType/Set.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+Copyright 2014 Basho Technologies, Inc.
+
+Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations under the License.
+*/
+
+namespace Basho\Riak\DataType;
+
+use Basho\Riak\DataType;
+
+/**
+ * Class Set
+ *
+ * Data structure for set crdt
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Set extends DataType
+{
+    /**
+     * {@inheritdoc}
+     */
+    const TYPE = 'set';
+
+    /**
+     * @var string
+     */
+    private $context;
+
+    /**
+     * @param array $data
+     * @param $context
+     */
+    public function __construct(array $data, $context)
+    {
+        $this->data = $data;
+        $this->context = $context;
+    }
+
+    /**
+     * @return array
+     */
+    public function getData()
+    {
+        return $this->data;
+    }
+
+    public function getContext()
+    {
+        return $this->context;
+    }
+}
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Exception.php b/vendor/phpfastcache/riak-client/src/Riak/Exception.php
new file mode 100644
index 0000000000..e6cf9b74b2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Exception.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Exception
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Exception extends \Exception
+{
+
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/HeadersTrait.php b/vendor/phpfastcache/riak-client/src/Riak/HeadersTrait.php
new file mode 100644
index 0000000000..63eb129db4
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/HeadersTrait.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Trait HeadersTrait
+ *
+ * Offers code reuse between kv objects & crdts since they share several common needs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+trait HeadersTrait
+{
+    /**
+     * Request / response headers for the object
+     *
+     * Content type, last modified, etc
+     *
+     * @var array
+     */
+    protected $headers = [];
+
+    /**
+     * @return array
+     */
+    public function getHeaders()
+    {
+        return $this->headers;
+    }
+
+    /**
+     * Retrieve the value for a header, null if not set
+     *
+     * @param $key
+     *
+     * @return string|null
+     */
+    protected function getHeader($key)
+    {
+        return isset($this->headers[$key]) ? $this->headers[$key] : NULL;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Location.php b/vendor/phpfastcache/riak-client/src/Riak/Location.php
new file mode 100644
index 0000000000..6ecd539002
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Location.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Basho\Riak;
+
+/**
+ * Immutable data structure storing the location of an Object or DataType
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Location
+{
+    /**
+     * Kv Object / CRDT key
+     *
+     * @var string
+     */
+    protected $key = '';
+
+    /**
+     * @var Bucket|null
+     */
+    protected $bucket = NULL;
+
+    /**
+     * @param $key
+     * @param Bucket $bucket
+     */
+    public function __construct($key, Bucket $bucket)
+    {
+        $this->key = $key;
+        $this->bucket = $bucket;
+    }
+
+    /**
+     * Generate an instance of the Location object using the Location header string value returned from Riak
+     *
+     * @param $location_string
+     *
+     * @return Location
+     */
+    public static function fromString($location_string)
+    {
+        preg_match('/^\/types\/([^\/]+)\/buckets\/([^\/]+)\/keys\/([^\/]+)$/', $location_string, $matches);
+
+        return new self($matches[3], new Bucket($matches[2], $matches[1]));
+    }
+
+    public function __toString()
+    {
+        return $this->bucket . $this->key;
+    }
+
+    /**
+     * @return Bucket|null
+     */
+    public function getBucket()
+    {
+        return $this->bucket;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Node.php b/vendor/phpfastcache/riak-client/src/Riak/Node.php
new file mode 100644
index 0000000000..e16dab951a
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Node.php
@@ -0,0 +1,222 @@
+<?php
+
+namespace Basho\Riak;
+
+use Basho\Riak\Node\Config;
+use Basho\Riak\Node\Response;
+
+/**
+ * Contains the connection configuration to connect to a Riak node.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Node
+{
+    /**
+     * Configuration
+     *
+     * Contains configuration needed to connect to a Riak node.
+     *
+     * @var Config|null
+     */
+    protected $config = null;
+
+    /**
+     * Inactive node
+     *
+     * This is only set to true if the node has been marked as unreachable.
+     *
+     * @var bool
+     */
+    protected $inactive = false;
+
+    /**
+     * Node signature
+     *
+     * This property is used to store a stateless unique identifier for this node.
+     *
+     * @var string
+     */
+    protected $signature = '';
+
+    public function __construct(Config $config)
+    {
+        $this->config = $config;
+        $this->setSignature();
+    }
+
+    /**
+     * This should NEVER be invoked outside of this object.
+     */
+    private function setSignature()
+    {
+        $this->signature = md5(json_encode($this->config));
+    }
+
+    /**
+     * @return boolean
+     */
+    public function isInactive()
+    {
+        return $this->inactive;
+    }
+
+    /**
+     * @param boolean $inactive
+     */
+    public function setInactive($inactive)
+    {
+        $this->inactive = $inactive;
+    }
+
+    /**
+     * @return string
+     */
+    public function getSignature()
+    {
+        return $this->signature;
+    }
+
+    /**
+     * @return string
+     */
+    public function getHost()
+    {
+        return $this->config->getHost();
+    }
+
+    /**
+     * @return Config|null
+     */
+    public function getConfig()
+    {
+        return $this->config;
+    }
+
+    /**
+     * @return int
+     */
+    public function getPort()
+    {
+        return $this->config->getPort();
+    }
+
+    /**
+     * Returns host:port for Node
+     *
+     * @return string
+     */
+    public function getUri()
+    {
+        return sprintf('%s:%s', $this->config->getHost(), $this->config->getPort());
+    }
+
+    /**
+     * useTls
+     *
+     * @return bool
+     */
+    public function useTls()
+    {
+        return $this->config->isAuth();
+    }
+
+    /**
+     * getUserName
+     *
+     * @return string
+     */
+    public function getUserName()
+    {
+        return $this->config->getUser();
+    }
+
+    /**
+     * getPassword
+     *
+     * @return string
+     */
+    public function getPassword()
+    {
+        return $this->config->getPass();
+    }
+
+    public function getCaFile()
+    {
+        return $this->config->getCaFile();
+    }
+
+    public function getCaDirectory()
+    {
+        return $this->config->getCaDirectory();
+    }
+
+    /**
+     * getCertificate
+     *
+     * @return string
+     */
+    public function getCertificate()
+    {
+        return $this->config->getCertificate();
+    }
+
+    public function getCertificatePassword()
+    {
+        return $this->config->getCertificatePassword();
+    }
+
+    /**
+     * getPrivateKey
+     *
+     * @return string
+     */
+    public function getPrivateKey()
+    {
+        return $this->config->getPrivateKey();
+    }
+
+    /**
+     * getPrivateKeyPassword
+     *
+     * @return string
+     */
+    public function getPrivateKeyPassword()
+    {
+        return $this->config->getPrivateKeyPassword();
+    }
+
+    /**
+     * @return int
+     */
+    public function getTimeout()
+    {
+        return $this->config->getConnectionTimeout();
+    }
+
+    /**
+     * @return int
+     */
+    public function getStreamTimeout()
+    {
+        // NB: value represents seconds
+        return $this->config->getStreamTimeout();
+    }
+
+    /**
+     * @param Command $command
+     * @param Api $api
+     *
+     * @return Command\Response
+     * @throws Exception
+     */
+    public function execute(Command $command, Api $api)
+    {
+        $success = $api->prepare($command, $this)->send();
+        if ($success === FALSE) {
+            return false;
+        }
+
+        return $api->getResponse();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Node/Builder.php b/vendor/phpfastcache/riak-client/src/Riak/Node/Builder.php
new file mode 100644
index 0000000000..c6692c98a4
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Node/Builder.php
@@ -0,0 +1,331 @@
+<?php
+
+namespace Basho\Riak\Node;
+
+use Basho\Riak\Node;
+
+/**
+ * This class follows the Builder design pattern and is the preferred method for creating Basho\Riak\Node objects for
+ * connecting to your Riak node cluster.
+ *
+ * <code>
+ *  // simple local development / testing cluster
+ *  use Basho\Riak\Node;
+ *
+ *  $nodes = (new Node\Builder)
+ *      ->buildLocalhost([10018, 10028, 10038, 10048, 10058]);
+ * </code>
+ *
+ * <code>
+ *  // password authentication to production cluster
+ *  use Basho\Riak\Node;
+ *
+ *  $nodes = (new Node\Builder)
+ *      ->onPort(8098)
+ *      ->usingPasswordAuthentication('riakuser', 'riakpassword')
+ *      ->withCertificateAuthorityFile(getcwd() . '/path/to/cacert.pem')
+ *      ->buildCluster(['riak1.company.int','riak2.company.int','riak3.company.int']);
+ * </code>
+ *
+ * <code>
+ *  // certificate authentication to production load balanced cluster
+ *  use Basho\Riak\Node;
+ *
+ *  $node = (new Node\Builder)
+ *      ->atHost('riak.company.int')
+ *      ->onPort(8098)
+ *      ->usingCertificateAuthentication(getcwd() . '/path/to/client.crt')
+ *      ->withCertificateAuthorityFile(getcwd() . '/path/to/cacert.pem')
+ *      ->build();
+ * </code>
+ *
+ * <code>
+ *  // pam authentication to production load balanced cluster
+ *  use Basho\Riak\Node;
+ *
+ *  $node = (new Node\Builder)
+ *      ->atHost('riak.company.int')
+ *      ->onPort(8098)
+ *      ->usingPamAuthentication('riakuser')
+ *      ->withCertificateAuthorityFile(getcwd() . '/path/to/cacert.pem')
+ *      ->build();
+ * </code>
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Builder
+{
+    /**
+     * Internal storage
+     *
+     * @var Config|null
+     */
+    protected $config = null;
+
+    public function __construct()
+    {
+        $this->config = new Config();
+    }
+
+    /**
+     * usingTrustAuthentication
+     *
+     * Build nodes with trust authentication
+     *
+     * User authentication and access rules are only available in Riak versions 2 and above. To use this feature, TSL
+     * is required to communicate with your Riak nodes.
+     *
+     * @param string $user
+     *
+     * @return $this
+     */
+    public function usingTrustAuthentication($user = '')
+    {
+        $this->config->setUser($user);
+        $this->config->setAuth(true);
+
+        return $this;
+    }
+
+    /**
+     * usingPasswordAuthentication
+     *
+     * Build nodes with password authentication
+     *
+     * User authentication and access rules are only available in Riak versions 2 and above. To use this feature, TSL
+     * is required to communicate with your Riak nodes.
+     *
+     * @param $user
+     * @param $pass
+     * @return $this
+     */
+    public function usingPasswordAuthentication($user, $pass = '')
+    {
+        $this->config->setUser($user);
+        $this->config->setPass($pass);
+        $this->config->setAuth(true);
+
+        return $this;
+    }
+
+    /**
+     * usingCertificateAuthentication
+     *
+     * Build nodes with certificate authentication
+     *
+     * User authentication and access rules are only available in Riak versions 2 and above. To use this feature, TSL
+     * is required to communicate with your Riak nodes.
+     *
+     * CURRENTLY NOT SUPPORTED OVER THE RIAK HTTP API
+     *
+     * @param $certificate
+     * @param string $password
+     *
+     * @return $this
+     * @throws Builder\Exception
+     */
+    public function usingCertificateAuthentication($certificate, $password = '')
+    {
+        $this->config->setCertificate($certificate);
+        $this->config->setCertificatePassword($password);
+        $this->config->setAuth(true);
+
+        throw new Node\Builder\Exception('Riak over HTTP does not support Certificate Authentication.');
+
+        //return $this;
+    }
+
+    /**
+     * usingPamAuthentication
+     *
+     * Build nodes with PAM authentication
+     *
+     * User authentication and access rules are only available in Riak versions 2 and above. To use this feature, TSL
+     * is required to communicate with your Riak nodes.
+     *
+     * @param $user
+     *
+     * @return $this
+     */
+    public function usingPamAuthentication($user)
+    {
+        $this->config->setUser($user);
+        $this->config->setAuth(true);
+
+        return $this;
+    }
+
+    /**
+     * withCertificateAuthorityDirectory
+     *
+     * Path to CA file. A Certificate Authority file is required for any secure connections to Riak
+     *
+     * @param $ca_file
+     *
+     * @return $this
+     *
+     */
+    public function withCertificateAuthorityFile($ca_file)
+    {
+        $this->config->setCaFile($ca_file);
+
+        return $this;
+    }
+
+    /**
+     * withCertificateAuthorityDirectory
+     *
+     * Directory where the CA file can be found. A Certificate Authority file is required for any secure connections to
+     * Riak
+     *
+     * @param $ca_directory
+     *
+     * @return $this
+     *
+     */
+    public function withCertificateAuthorityDirectory($ca_directory)
+    {
+        $this->config->setCaDirectory($ca_directory);
+
+        return $this;
+    }
+
+    public function withPrivateKey($private_key, $password = '')
+    {
+        $this->config->setPrivateKey($private_key);
+        $this->config->setPrivateKeyPassword($password);
+
+        return $this;
+    }
+
+    /**
+     * Client side connection timeout for requests
+     *
+     * @param $timeout
+     */
+    public function withConnectionTimeout($timeout) {
+        $this->config->setConnectionTimeout($timeout);
+    }
+
+    /**
+     * Client side socket read/write timeout for requests
+     *
+     * @param $timeout
+     */
+    public function withStreamTimeout($timeout) {
+        $this->config->setStreamTimeout($timeout);
+    }
+
+    /**
+     * @return Config|null
+     */
+    public function getConfig()
+    {
+        return $this->config;
+    }
+
+    /**
+     * Build distributed cluster
+     *
+     * Build node objects configured to listen on the same port but different hosts. Commonly used in
+     * staging and production environments where you have multiple Riak nodes on multiple machines / vms.
+     *
+     * @param array $hosts
+     * @return Node[]
+     */
+    public function buildCluster(array $hosts = ['localhost'])
+    {
+        $nodes = [];
+        foreach ($hosts as $host) {
+            $nodes[] = $this->atHost($host)->build();
+        }
+
+        return $nodes;
+    }
+
+    /**
+     * Build node
+     *
+     * Validate configuration for a single node object, then build it
+     *
+     * @return Node
+     */
+    public function build()
+    {
+        $this->validate();
+
+        return new Node(clone $this->config);
+    }
+
+    /**
+     * Builder configuration validation
+     *
+     * Checks the current configuration of the Node Builder for errors. This method should be executed before each Node
+     * is built.
+     *
+     * @throws Builder\Exception
+     */
+    protected function validate()
+    {
+        // verify we have a host address and port
+        if (!$this->config->getHost() || !$this->config->getPort()) {
+            throw new Node\Builder\Exception('Node host address and port number are required.');
+        }
+
+        if ($this->config->getUser() && $this->config->getCertificate()) {
+            throw new Node\Builder\Exception('Connect with password OR certificate authentication, not both.');
+        }
+
+        if ($this->config->isAuth() && !$this->config->getCaDirectory() && !$this->config->getCaFile()) {
+            throw new Node\Builder\Exception('Certificate authority file is required for authentication.');
+        }
+    }
+
+    /**
+     * Build with host address
+     *
+     * Build node objects with configuration to use a specific host address
+     *
+     * @param $host
+     * @return $this
+     */
+    public function atHost($host)
+    {
+        $this->config->setHost($host);
+
+        return $this;
+    }
+
+    /**
+     * Build local node cluster
+     *
+     * Build multiple node objects configured with the same host address but different ports. Commonly used in
+     * development environments where you have multiple Riak nodes on a single machine / vm.
+     *
+     * @param array $ports
+     * @return Node[]
+     */
+    public function buildLocalhost(array $ports = [8087])
+    {
+        $nodes = [];
+        $this->atHost('localhost');
+        foreach ($ports as $port) {
+            $nodes[] = $this->onPort($port)->build();
+        }
+
+        return $nodes;
+    }
+
+    /**
+     * Build node objects with configuration to use a specific port number
+     *
+     * @param $port
+     * @return $this
+     */
+    public function onPort($port)
+    {
+        $this->config->setPort($port);
+
+        return $this;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Node/Builder/Exception.php b/vendor/phpfastcache/riak-client/src/Riak/Node/Builder/Exception.php
new file mode 100644
index 0000000000..732e9ff8dc
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Node/Builder/Exception.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Basho\Riak\Node\Builder;
+
+/**
+ * Exception thrown when there is a validation error within a Builder object.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Exception extends \Basho\Riak\Exception
+{
+
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Node/Config.php b/vendor/phpfastcache/riak-client/src/Riak/Node/Config.php
new file mode 100644
index 0000000000..ffcc73ac93
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Node/Config.php
@@ -0,0 +1,304 @@
+<?php
+
+namespace Basho\Riak\Node;
+
+/**
+ * Configuration data structure object for connecting to a Riak node.
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Config
+{
+    /**
+     * Host address
+     *
+     * @var string
+     */
+    protected $host = '';
+
+    /**
+     * Port number
+     *
+     * @var int
+     */
+    protected $port = 0;
+
+    /**
+     * User name
+     *
+     * @var string
+     */
+    protected $user = '';
+
+    /**
+     * User password
+     *
+     * @var string
+     */
+    protected $pass = '';
+
+    /**
+     * Client / user authentication flag
+     *
+     * If true, client will use HTTPS (TLS1.2) to connect to Riak node
+     *
+     * @var bool
+     */
+    protected $auth = false;
+
+    protected $ca_file = '';
+
+    /**
+     * [short description]
+     *
+     * @var string
+     */
+    protected $ca_directory = '';
+    /**
+     * Certificate to authenticate to Riak with
+     *
+     * @var string
+     */
+    protected $certificate = '';
+    /**
+     * Certificate to authenticate to Riak with
+     *
+     * @var string
+     */
+    protected $certificate_password = '';
+    /**
+     * [short description]
+     *
+     * @var string
+     */
+    protected $private_key = '';
+    /**
+     * [short description]
+     *
+     * @var string
+     */
+    protected $private_key_password = '';
+
+    /**
+     * Client side connection timeout
+     *
+     * @var int
+     */
+    protected $connection_timeout = 10;
+
+    /**
+     * Client side stream (socket read/write) timeout. Default is 60
+     * seconds as that is the default operation timeout in Riak
+     *
+     * @var int
+     */
+    protected $stream_timeout = 60;
+
+    /**
+     * @return int
+     */
+    public function getConnectionTimeout()
+    {
+        return $this->connection_timeout;
+    }
+
+    /**
+     * @param int $connection_timeout
+     */
+    public function setConnectionTimeout($connection_timeout)
+    {
+        $this->connection_timeout = $connection_timeout;
+    }
+
+    /**
+     * @return int
+     */
+    public function getStreamTimeout()
+    {
+        return $this->stream_timeout;
+    }
+
+    /**
+     * @param int $stream_timeout
+     */
+    public function setStreamTimeout($stream_timeout)
+    {
+        $this->stream_timeout = $stream_timeout;
+    }
+
+    /**
+     * @return string
+     */
+    public function getCaFile()
+    {
+        return $this->ca_file;
+    }
+
+    /**
+     * @param string $ca_file
+     */
+    public function setCaFile($ca_file)
+    {
+        $this->ca_file = $ca_file;
+    }
+
+    /**
+     * @return string
+     */
+    public function getCaDirectory()
+    {
+        return $this->ca_directory;
+    }
+
+    /**
+     * @param string $ca_directory
+     */
+    public function setCaDirectory($ca_directory)
+    {
+        $this->ca_directory = $ca_directory;
+    }
+
+    /**
+     * @return string
+     */
+    public function getCertificatePassword()
+    {
+        return $this->certificate_password;
+    }
+
+    /**
+     * @param string $certificate_password
+     */
+    public function setCertificatePassword($certificate_password)
+    {
+        $this->certificate_password = $certificate_password;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrivateKey()
+    {
+        return $this->private_key;
+    }
+
+    /**
+     * @param string $private_key
+     */
+    public function setPrivateKey($private_key)
+    {
+        $this->private_key = $private_key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrivateKeyPassword()
+    {
+        return $this->private_key_password;
+    }
+
+    /**
+     * @param string $private_key_password
+     */
+    public function setPrivateKeyPassword($private_key_password)
+    {
+        $this->private_key_password = $private_key_password;
+    }
+
+    /**
+     * @return string
+     */
+    public function getCertificate()
+    {
+        return $this->certificate;
+    }
+
+    /**
+     * @param string $certificate
+     */
+    public function setCertificate($certificate)
+    {
+        $this->certificate = $certificate;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function isAuth()
+    {
+        return $this->auth;
+    }
+
+    /**
+     * @param boolean $auth
+     */
+    public function setAuth($auth)
+    {
+        $this->auth = $auth;
+    }
+
+    /**
+     * @return string
+     */
+    public function getHost()
+    {
+        return $this->host;
+    }
+
+    /**
+     * @param string $host
+     */
+    public function setHost($host)
+    {
+        $this->host = $host;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPass()
+    {
+        return $this->pass;
+    }
+
+    /**
+     * @param string $pass
+     */
+    public function setPass($pass)
+    {
+        $this->pass = $pass;
+    }
+
+    /**
+     * @return int
+     */
+    public function getPort()
+    {
+        return $this->port;
+    }
+
+    /**
+     * @param int $port
+     */
+    public function setPort($port)
+    {
+        $this->port = $port;
+    }
+
+    /**
+     * @return string
+     */
+    public function getUser()
+    {
+        return $this->user;
+    }
+
+    /**
+     * @param string $user
+     */
+    public function setUser($user)
+    {
+        $this->user = $user;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/Search/Doc.php b/vendor/phpfastcache/riak-client/src/Riak/Search/Doc.php
new file mode 100644
index 0000000000..5c8d8347be
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/Search/Doc.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Basho\Riak\Search;
+
+use Basho\Riak\Bucket;
+use Basho\Riak\Location;
+
+/**
+ * Data structure for document objects returned from Solr
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Doc
+{
+    protected $data = null;
+
+    protected $_yz_id = '';
+    protected $_yz_rk = '';
+    protected $_yz_rt = '';
+    protected $_yz_rb = '';
+
+    public function __construct(\stdClass $data)
+    {
+        if (isset($data->_yz_id)) {
+            $this->_yz_id = $data->_yz_id;
+            unset($data->_yz_id);
+        }
+
+        if (isset($data->_yz_rk)) {
+            $this->_yz_rk = $data->_yz_rk;
+            unset($data->_yz_rk);
+        }
+
+        if (isset($data->_yz_rt)) {
+            $this->_yz_rt = $data->_yz_rt;
+            unset($data->_yz_rt);
+        }
+
+        if (isset($data->_yz_rb)) {
+            $this->_yz_rb = $data->_yz_rb;
+            unset($data->_yz_rb);
+        }
+
+        $this->data = $data;
+    }
+
+    /**
+     * Returns object location
+     *
+     * @return Location
+     */
+    public function getLocation()
+    {
+        return new Location($this->_yz_rk, new Bucket($this->_yz_rb, $this->_yz_rt));
+    }
+
+    /**
+     * Returns a single value from Solr result document
+     *
+     * @param string $name
+     * @return mixed
+     */
+    public function __get($name)
+    {
+        return $this->data->{$name};
+    }
+
+    /**
+     * Returns all values as array from Solr result document
+     *
+     * @return array
+     */
+    public function getData()
+    {
+        return (array)$this->data;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/src/Riak/TimeSeries/Cell.php b/vendor/phpfastcache/riak-client/src/Riak/TimeSeries/Cell.php
new file mode 100644
index 0000000000..e0f93523bf
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/src/Riak/TimeSeries/Cell.php
@@ -0,0 +1,172 @@
+<?php
+
+namespace Basho\Riak\TimeSeries;
+
+/**
+ * Data structure for Cells of a TimeSeries row
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class Cell
+{
+    const STRING_TYPE = 'varchar';
+    const INT_TYPE = 'sint64';
+    const DOUBLE_TYPE = 'double';
+    const BOOL_TYPE = 'boolean';
+    const TIMESTAMP_TYPE = 'timestamp';
+    const BLOB_TYPE = 'blob';
+
+    protected $name;
+    protected $value = null;
+    protected $type = null;
+
+    public function __construct($name)
+    {
+        $this->name = $name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * @return string
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    /**
+     * @param string $value
+     *
+     * @return $this
+     */
+    public function setValue($value = null)
+    {
+        $this->type = Cell::STRING_TYPE;
+        $this->value = $value;
+
+        return $this;
+    }
+
+    /**
+     * @param string $value
+     *
+     * @return $this
+     */
+    public function setBlobValue($value = null)
+    {
+        $this->type = Cell::BLOB_TYPE;
+        $this->value = $value;
+
+        return $this;
+    }
+
+    /**
+     * @param int $value
+     *
+     * @return $this
+     */
+    public function setIntValue($value = null)
+    {
+        if ($value != null && !is_int($value)) {
+            throw new \InvalidArgumentException('Expected an integer value.');
+        }
+
+        $this->type = Cell::INT_TYPE;
+        $this->value = $value;
+
+        return $this;
+    }
+
+    /**
+     * @param int $value
+     *
+     * @return $this
+     */
+    public function setTimestampValue($value = null)
+    {
+        if ($value != null && !is_int($value)) {
+            throw new \InvalidArgumentException('Expected an integer value.');
+        }
+
+        $this->type = Cell::TIMESTAMP_TYPE;
+        $this->value = $value;
+
+        return $this;
+    }
+
+    /**
+     * @param \DateTime $value
+     *
+     * @return $this
+     */
+    public function setDateTimeValue($value = null)
+    {
+        if ($value != null && !$value instanceof \DateTime) {
+            throw new \InvalidArgumentException('Expected a \DateTime object.');
+        }
+
+        $this->type = Cell::TIMESTAMP_TYPE;
+        $this->value = $value->getTimestamp();
+
+        return $this;
+    }
+
+    /**
+     * @param bool $value
+     *
+     * @return $this
+     */
+    public function setBooleanValue($value = null)
+    {
+        if ($value != null && !is_bool($value)) {
+            throw new \InvalidArgumentException('Expected an boolean value.');
+        }
+
+        $this->type = Cell::BOOL_TYPE;
+        $this->value = $value;
+
+        return $this;
+    }
+
+    /**
+     * @param double $value
+     *
+     * @return $this
+     */
+    public function setDoubleValue($value = null)
+    {
+        if ($value != null && !is_double($value)) {
+            throw new \InvalidArgumentException('Expected an double value.');
+        }
+
+        $this->type = Cell::DOUBLE_TYPE;
+        $this->value = $value;
+
+        return $this;
+    }
+
+    /**
+     * Convenience method for inclusion in HTTP api path
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return rawurlencode($this->getName()) . '/' . rawurlencode($this->getValue());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/Basho_Man_Super.png b/vendor/phpfastcache/riak-client/tests/Basho_Man_Super.png
new file mode 100644
index 0000000000..d57651182b
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/Basho_Man_Super.png
@@ -0,0 +1,462 @@
+�PNG
+
+���
IHDR�����������X��� �IDATx��i�c�}����]p�/j_�z��鞞}�HIqH�(�$ɒ��fh�>J|�E�I�r�D^α?�$qN�$��8��m��RE���gi���tUwW׊�n�@�P�
+�BUWU��ӷ\��^����(�����rO�B�8�l��R(�A|ϕ�*=��U�8���w[	�B�JX��E��t?��nB�DV�h�V��p���n}/��v���:��F	�Bq��E8I���!{���Bq_��U�8�l%���e��o%�J`�-PªP<z�n�J���Z�l�N��p[������(�m������6?F�@8�(�1�Z�����~��<�fhyl]���A���FY�
+������Q�r[B4˲‘H$533�c�p��BX�
RJ=�__YY��7n\�V�e!��F��-�,W���V�b�Ӌ��/[I��P�L��3�����S�,t�¤�߸~�����t�u]����n��*���*��n����꺮�r�����_&�|��)�k!�~�\.��ƥK���\.W�"�^X��*�{�{}�
+��#���D����l6w����r�Ny�bl%�m�����l6�T*o:�Si��cmw]��/PªP�?Z����Җ��ݾ���������u]	@�AmF�u��l6;U.�_v���Xڽ�v��C���+���\����e1�B'&&������a����B�W.^��s���Wk��s���U�8�(�U��ts�v�T	�
+�̣G��4::������2�C+uRJPJLJ����V��޶�5��
m�Z�a�Bq�PªP�{�	j������������D�oB�i��"����cCCC����m�^G{qm~-�n+�%�
+Ž�W+���:77�����?�B��RZ��R�!���i��tzض�mۮ�\;��Tq_��U��wlGT7j2���=��r�ܯBخ�*����sp�3B@HJ�6ݞ����D�T��7ǩ�y=�^�ZšF	�Bqo�'�J`rrrbrr��$�� �Q�BԄ�Ap�����J�9����)%B��C�eݨT*�z�Wo"�I8��*���*{�vD��sssO�����P(�E!�֫�W
+��,S΁��5[�u���9�*��-�:���;�J�*c���Q(3JX���K����ǿ022����{�R����5	j��o�#$�����iq�F��*��w���M�?�ԕ\Y��C�V�b�����R%��L&����_�u������g���	�6�L
+H! !A�ΧJ�P,;�8�wm�^Epn��CX���P��U��ڵ'lg�n�\.�����χ��~�s�S�o`���Y�-���:l)eppĵo���b��8�ضm��2%��C�V�b��Ԟ�~�IT	!���������H$��.����N!A�-�Y����5M�T*�.2�Z_�Bq_��U��]z�
�TJ�633s~||��6�zq�J)!�T�w`�n���K�
+���"�g=�{�X,.`�9�]���m�����U��=:�j��_
+@j�����>766�[���{Uє��]�:RB;f뺞�B����m�E��V�}�V�bw�&���Uh�f��ξ866��B�3��Sc`
+u�/�Rʎ��9G$9jYV�\.��N���(qU*��*��QmWa�u�ȑ�����vtN
+�~�{/G�RJ4�q�!`Y�(���������(qU"��*�e���
���������?�}?����5�/���a/�A�p����!M�Fl���Z��;%���V�bpt�Sm������SSS�0>>��=��rR0߇����Q�@ i1J��D"s�eVWW��s���4�*�A�Vq�PªP�m�j$�����R>��M����APJ�C>���9�xk���B��B�R(n��˷[yN���P�[��*;�Q����~mhh�W{�Q����݆�
+	)�q*���#�a�K��7j����$�[	h'��^�=G	�B�s���n�#G��͡����Q匁�޽��v�4�M�4��Z-�)gY�����ۛ��R����A)�U���*;�Q�Z&��RT�M�6w�ݏȠ��jz�{Ä�!�q�ж��D�n���e;K�_�Tb��u��*��k�j=Q)277�˽�*�}p������<��KxԲ,oyy������k�:G�u݄��U�(JX���ʒ�[��0sff���ÿ֫�
+�uBӾ���h��j���Ba��n+��~����[׋�ۊ�bA	�B��mZݿ0Ü����###��ٿ"�Ls E�i���.a)%����߹s�2h-��ѿ�Xv�o��ۺ/%�����U��>��U)�躮=z���|�mi�
+�{ۅ�4[� j.�A���% m�B�R�o��B}��v�h]�.��=�SB��%�
+�����i���{qxx����:��%���?�m�����@HBF���8��H����m�֡P(d޾}�[MVk7��R���N�wz��*���U��ݬՆ�R��������oJ)g���jT��պ�:� ��Q
O�jH�	�m������� ��!dC"��n�$�9��R��@B�V�Rڼ�ͷ	!Dn~3[�����$��q�V��B���y�
+��g6��	!������r��nSj���(�cQ��ȝ����O�8���	�������gW8�>`����� 8g���؀F��0Mcvll�kKKK_�g2�����RJF��i���B}�_�y���R�T	VI��RJ)E��?�d�K�f�߸-�5?]�+�Sԯ-�b{��n6$+�r�����o������ٿ��T
��I��l�@#�2T@k6�o.r���>V*��6ɷ3�L�@�
PM��눆C𹀩k(ێ���
)��uݢ�F�unjFJ�1�*B���⺦1�$��V�T?p]����ի���+w�&���׬�V��$�].�]o�M�}�V��w��V)��9s�W���~������{UR�D ��8�㗟ӑ��D�P�Pq��]��g�Ḻ"�k]��5a![!D��\χ�bPB!!A@ j�b x?z�?Ki<�~�4ٕ\OJ��/jv�2˜���K�o���|aa��f��Uh�#�[	���%�
+E�t��5bz'N��\.�����NBqw웇��
+2�
�3�5��'䢵D�4p�`^���ქ��J(E$�ip=�h��j��� ��n7��N��F������QPJ�	0��9�w4"���\/W�x}}�[���������,�J`=��U��nn`299�����?4M{���3��q��@����5|���*�@�t�·�r�w�d�p]"�
+�p��FA(��f��f����E�J)���X�y���k:���|�P��˗��Ắ����v�ڋE�z��:�!D%/)�њJ����b���U9��z7H���S��S:rQw��n���%�na$K��|J����Ki�ҕLn���v4[�B�<��Bb��=`:��|:�����	%WK���^�r�۶��;��k��6Ӛ�8��W2���_���t��B���������k�v���*���Sj��(>sF�W�Ԑ�wUBjV�^�I���a���a��}��/��)�ɣ٢5��>����EH����ҿ�1?�s�,��?p����*F�u�C��X��Cr���t]��<H������\<?���.��'����L)�`�&xy����K\]X�r�U@�Ԃ��a�:�������l8��(}�0�O�+U��>�q�;�R��݆�r��e��ce��g(aU(v!�L����S"��*8�3)Pt%����KO�I^Q�(�S��e�?������Q��Y⤆�#l�}�����@B״'b��V8�B4���:ߺ1������ll�#�6#;�n�v��8��K
+Eotu�M����r���{������)����G�(�x��)`h�
��n��u�o]�xwI��I���,��`�CH`�J)�3)eҲ���H��d|v8�fBެV*��N�U�T�����|�QªP�F�Vb���d2�i�4�7����A���ρ|��ˏ���	
RޭS�)`���:~�]��r��G�Lp���1������.fB�1�[�u&�}*�Ogҩ�f�Z-�}+�M�k�l]�8(aU(z��~�q�t]����Y�u���D�� 8۳���d~�a��K�V'�iH�9��{~��]���( 8�eh;�PsO�1��
+�'��gc�X>������8.6l�&6m��m�E	�B�;������DbѲ�!��Q�k��l|ꔆ_|�@6�U-p|�o^�������%x부�a#(�Q�N�M�D �V�<�L&?�Ƣ��U���-�Xs�be��g(aU(z�݉�!����I���B��F�� ��aupv��k�8��,�t������m���K3bܿ��AѰ`����z8d=>��<�F!t�\.����H��7m�����V��w�u^j,��p8|3�|�����҅iPH	$B�����g)4]��h���)���(��
+A�
b��:e���r.��$�O���YS׋L�/H1���Ʀ%�
+E�t����q��t:�
��O
+�	 �:5종�E0�Kk�$	޹��_��R/-�u	]�|w�����}�v,��}!�!k�R�>i�n���D�e�u�A	�B�;�2��0� ���Ş1cTH	H��䖝 �L$%��]��?���W��qD�N�{HS����O�ӧ4��r]o�g>G��N����JX���U�	�T*k�e݊�b�B�@0�|w�V	A,�C���_
+�ԝf�J)!�c<(7�>ۼ0�!��w���]��3<������_[ּ��u۶�������K�x[�OQªPl�NVk�}������x2?)�$�X뀅�>��0H=��"P�B}�Tc<O�1��J),�D6�@:�p:���Ʋi�f�ͦ0�M#��#!
�44p.�1���q����ۛ�~AJ	��i2�x1Oh��K���ʨVqmE��D����ѩ�N=��C9233�?���\��!���tRJh�B)̐��ۦ�YJ	�|�8�$��G,$b�b$ca$�Lg`"��T<
+]�64�w]k�2<�Q��XZ+�\u�R*�����bŁ����.JUA��F)(
f��Le)���C7�ׯ\��_.ܺ�]�u�hu�<x�Sct���G�O�B�{t��ҦK133���.��3�F�
 �*��a��
 t[gY	�s�1蚆L"�t<�l*��y�eS����tB���M��]ě�����@$}.P(W��^���5+U,ʸ�����R�F�vQu<x>!�FiMpɡ�n�a�z����\�z�����)q=$�O�B��le�6��p8L�=��t:�k��G���ގ\�uQ�D"�E��ek�cRJ����&�C85=��G�qd|8����b@	W���.kV�����B	�^���u,��R(�⸨�.ʶ���J(4-�n��Z�VWW�v�ڇ��za�R[]�vlS%�����	U(��nVk�[���������B?��.��C����BJ	�4�D�qٳ�2. �@<lard�M��SGpl2�H8
+b�{�B�^֬]�g��Z��[˸zs	�KkX+�Q�z��ʶ�9(!д��=�D����]�|�_�,/�ԼJ\8JX����j ���/����J�1���|��S���Ǣ��IT�����cz4�'����@.o,�^���`un���?B�V,�ڭ%\^X��;X\YG��l;p����knト�k�]�^�z�/-�YT�z�QY�
+E�t�n^��J��7R���AI�ۜϪ�:b�U.����0>r�~��gq���CfЬԴo�/u�5��h,�sp����v��(r�8NL����c8|��$,����r����,郕u,��i����q���b�Z-7�mz�>8/�>A�A���Zj��L �333%������[�s���=�:,+.zk6�8�F)fdž��g�ᩳGAm�|w�fAk���K0v
���d$3�h��o;���M�R���D�4������yi�o.�P��x><ơiA��A9���{��^�Յ��K��1�,���X��ѭ[ΆKƘ�R~�F�P(��� ��X���½�*�A��g>������I�hr��fkTJ	�8cpv�
+�RA�XD�T
+n�6�Z�g,�Ty ��^_�83�j��0騅S�xpv�dBpT�6�ʈd�1�W�����L�ӣ���J�U@nu��r݇(aU(vN;���}��86���d29���Q	t�ZuÀo�h�
.$LCËO=�/|�q�3���:`+�i�@͝���:�V�(�(��pl^-Y�.�RJ"�IZ]����u�n � d��$pvv���  ��ǁ���R���=�}�FO&�����r���[��s��U��9ݬ�M���ju�s>�N�?N)�ؔ%d���F�`�GKU-�G���\@2��=��ʤ�����V7X���sֈ��&)��A�8��k�0�O����qX���kx���!D��$ݝ���@\MC0��<��R�Vp�CS����M(�1JX���-�iS�p�\^���?44��}�ƠN�@$��xO�f��ó��KϞG6��$�ܼv��b��R1�Jk��c�{�zm4� A�m�213���Q�T�J��
�Ur�y��%�!��t��B�4�Ǣ1�y�k�j�Ew�U���JX���K���%���.��9O$>%�$�,Y�0��.���9ǹ����=�������:��J�l�
+�o�J�c���B�4�ba̎e13��z���R5h�_�>$8�҃4�G�k�$	_[�r�X����̓}���}�V�bpt���Z���9��\�,��F�RB#�H�6�RJ$c|�'p��<�"�B8����:*�2|����������?d�Ȧb8>��a꘿���F�k=s9X�/^�B�E�O�����z�
��U�u���U�[��[��<�󼫱Xa�z,d�����	2.��g��#�OC������!��
+J��V�`�� �Cl�EH	 �0�M!�����:*����D ��R�{�F���0��3��]^Z^�����`��JX���IX7%05-��!ĝ�p�a_��툪sc9���y��2p}���	G�\Fq}v�
+��ͻ�IG{�D�d�:F��N�qmq��Ӧ=b�̇.yz~TB ���f"�82�7VVW?��m����(aU(�V�
+llwH�J5m(�>�N�~�q�ugR� >��G���#���8�.�m�P(�.�A��:�
+!%(�NǑM�p�&�J45���{"�����j�X,>�����J��VOۓ�S�E	�B18z�Xi��R���ɓ��	cbf{��$fGs��3#?���o�Z��`	��y(�P.��9Ρ�f����`8�@6Ǎ;k(V�.ݚ�a�B�����T�݇$���t�
+���w�����DB�(aU(�V��ڜ�gҩ�3�N�*ь�x��
���/<z�O��д�;+B �D�TB�P�����7�ڌ����t�\_\�������) E��D(ٳ2���\�F"E¡�o/�y�E��C�\��%�
+���N��H$2=3�d2�5�u�-jV��O<�fFr�Yo�L��(
+���`�w_
+j3R�#�$��6n/�D��m��,b	���ݜ�?�@��D�����BuWw���Q�P.�ué�+K���3��W���-a��Q'�3�%㠔l�}�)��"�VVP)��99��L�Q���9���lP��Rp߃�y}�������i�LM����b�غ�Z��(�U���B��)��I�����
B�#ۯ9
��,:>��ituSJ��>J�*�|������!%��0�pq��y�����9k��W�h6̐q6b��wgie��pZ��k�h����P��5��K�DÓ�S?�D?�ڌIۊ�mpd|���ET	!pl�
+U�*+�#>x��NM�B�d[�6�`��������3xLdf�����h>�֧+v�
S(vN7w[k���f�d�?W��}[��F0���d=�� �IDATK#lA�֝��=\)����
+Ƕ���R"����)�R�c�M��}�z��]�1����g��=u�Mw)A�(aU(O��Kb(�Ώ���5)���`(C,l�JB8�(�(���s]K���pjz������	΂�U|��ޑp}��B��;y��Q�'���)��cԷM��]'7]�e~d�H,�%����k�[��Ǡkt���R
+����(
+��+��6�HD-L�3�G���6mGp0�g�uê#���8�G�����X+V�R�d���O4M���(A�������N���օg�CGR���U���
�4�@׵
U��C��j��i��w|�07���P
+ܸ
����I=�
+��n��<���9"!Ù2�Q��N���Z�Bm�����s���?z�U)%���>���up�PªP�����e�ù�OE�֧+���k6���Q��ְX�Z\[�cۍ�,���\`:?��t�~xkg��gq�R��4�b<���XS�C�%1�Ma(��%�J�3���U+N����w/]���y�7�9��<]	�.��U�ݚC�����t:�ɪ��F�R6Y.��VW��jb����aE�X��L]o���uq%����]�1PJ1�����Ο��CǦ0�f�r!�f)���0�+'��s����_�!���Z�V����JX��iWN��z8	g2�/������[�x��NJ�����*��T�x��
+��ò)�|�6����H��x��>r���D8d��ʶ�u�\��#��g���|���z��/..���9֪��=Be5(�eSlull��x"����k���
+��W��`�R"�"
���f�`�QKh�R�K���!|�����}�?0��x~�u��x����G?��ӄ4���?��P�]@	�B��NP���B!+�D?I)��9�p�PZ/�u��mW�)ۻ_w�Q0߇�y�B���8�����g�#	�q}��K�ba+��?����
Ep��u�QªP�NK���ɉG2��']�l�;!���jUe��"�5��q"9NO���?�.�:�}����1x����ؓ�?~�մV������:�PªPl�nb�8y�N���a���S�Tj�*���">�`���\蚆�Ǧ�3{3#x>�e,�@�
+E>�cO��X,��c�ڕ�(�V�b����8jE���M*
+\�K+k�<g�������z��J�����	C�p��4^z�!��&VWV�(�M	J)N�N�p��̨ti
S(v%�
+E�tlA�P:�R$~�]/�~�w�)V0����D`�PA�q��5;ޞ��Q<rb
+�{�Ad�Qx��Z��\,c����B ���_���J�ժ���%�
+���vBj�p.�!�~�P�*�@]|���.���l�K���Wpci�r��qQ��ȉ)�����&c���T�%T+�ڰݝ��������䲩d���)Ϊ>B��V��?:5���1>6�x,�<`|.U)��B��T�
%���|�!��Z�١�C�)B03:��8�\*�yK!�D�X�m۠;���Z��\*��O���h�j�S��*���DE)��P�IjG�s�E�����T������J�,��]��W޽�g;�z`v,�/}���qx��)�!`��T*�@L^J@���=�'b�866�P���(aU(z��	h�����3�P���yJH�=�gcB��r��T����Z�L����G�E��n�߿���"�t[��A͎d�����X�����ul�J�����[8>9rnbd8�4R��;(A�5vأK���hW�@�.)�rl�ȗ���_�|SljԚ	H�٥�M�17�E�2!��P׊�B�Ѻx�q������?|�"���;X*�@)�� ����X_�X ��z����n�B;.�	:�n�����oTm�E����(���W�B�m;-��⨄�aIr�7
�&����UT]�Dt��9LPB�s���Vp��
+r���R1�@`�K	�\^í�".�\ƕ�%�Y/��4�c��U�MF��?���Lmh��"�R_*A�u�;W)!	p����(������Zw�~���V��7zrOMM��ç|�uxx�H!�ɾqg�S��[RB�(F2	,,�����6\�C�0�Q��/�z��`�>�Z]����~�]�G�r��S���p�"�B\�A�Z�a��K���L��N�]�qk�1��cnW%�D������
|�ԉ��Ñ�<��vb�J)!8��U̸đ�,F3IPJ����C`�8���Kx��E���X+�X/U�V��b�p��둮i;KT�������c� Ѭ��K����f(�6�N=A��k��l�շ�}�R��;xPªPlM���M�
+����|�0�3;��
+�R
+p����ZBN:��H�}g
b���6 X��ѡ$��r�$�X/W��:�`�4�B�t�	`\PJqvn?��C��B��Y���]”R����*���˯��+k��;���5�(W�B�5�U�m�����A�q���
,�������5�m�位��:E��HD-p. j�:���͸�%��>z��O��������P�8�jIM;��"��g<��>�|:�Ŏ=�ض
�RA<�����X�����L݅T����X����b��z�䉟�#?�3w�����t(E������$�|�C�x��M����߻x
Wn/�Xqah�a+�L����-��5u
��8&ri��!f��\���x��J�KX���'�F��g��G�M֚?��B jmC�P߃�	�+d��j�Ջ��_q]���j>J%�D	�B�5���E������a�g���R������<���9�
%�l�>��,S�{7���|�M���W�XX^Ǎ�U��.^��w�`�>LCG:�5��{�����C&�2IL�R82�C6�F)�U���u�3�EH	.<ơ��y�p�>��	��A�4�ㆠ�f�4�,kg�V#���|su�P����*��Pt��۷�� �aP��5��Q�Nr�5a�� 4�b�PF���� ��I��Q,,�'?x��A�Ѓ&Rb�P���"$�X��P"�d4��t�#C��g��$	`\����N{��`\<b᡹q̎a�P�r�����\^ǝ�����1)%–�l"�l*���F2Ϧ24�>��,Վ�`���8G��5���I
+��l��x؊achC�w%�
+��ؤ��2<��T���J�)�7����Yǃ����AV�߼�^�������Ar�0&��\��۫ �`8G.C:�x6�����3��M0.����,��������X+V�^����!9RJ���D�B2F"b�}��yiU7(!�v��D2ٟ�J��l2��E,l��HlW%�@	�B��d���?k�B3;�-���Zmn�Qq� ��]���2
|��kx���p}�4:>�R�j0kB�V�bi�!%c����s)���pV��cL���+��E`1�C�3	�eS�2���F\Hx���q5��Z�F$�+�*�=��C��ޕ��
+E�u/P�:0��*ۧu�
����F~_�U@@�W�Tu�����B��R/_����,����C�h�	��s|p�޽~�����!�g���F�I���Yߥ+�A	!8|ܛD���ypl�x�/��g�<p�LJ��?^+��܁I��PªP�GCX���i���
	! �,ӱ=>�{VC2t�ٛ�pi�N�Kw��� d�!�8~t�޺���L��4fDz8:>���!D-����ӾȌs8��H���*	�d,r!2U�u�QªP�˲t��a�}Y��߸"!X/U�l|!�,�7>���B���BɎ¼u�
X/U��^ƛW0����T'&Fpt2�x؂�88���~�R�r��uX�p_��T<:2�p}�[�Jp�B	�B�;�FmBh>��t#��/)kn�>��i��J	�;�na�XA,��k ��W����G��ܽN�KK�M�д�M��[+����7rxpn��F07�C<���=�8�W�lulV8��Zȥb��-ݭU%�;D	�Bљ-��B3�������%��@��'-m��flFJ�T<�g:�zC�1�*6<��KZ"�P��H8���(�.l�G�vA-��`B]�
�kE|��5���<9>�s�&13�A����{�Lt��O5�<�1h�Nb��L�>6;�?��f�j7���%�
+��i�\i,~�j4ї�J�C�&�z�
+�6�e7�|��8==���cN��a���T��8
+eRJ�m����b����b�r��z�v���Y�R�by����m�7��'O����(��D��aW�<�E8��s=�p��������;W��X��nWv��JX���h�BH�4���T���������q�Z�� ֨kZ���l��!C�;O���?��F)�j=�s�x���d�ŵ"�
+�v{�WֱZ�bq��b5��k�!�U���n,��̵1<~z��h_�����9��8}	�@&?
�b���YL���%�
+��hUN���A\߇��N�5��:���s�\(�P�a��d˃�Oce: kc�j���	~Td�Q%b8wl��/�ᇗ�q��
+n���^�tx�7�x�����"��ƅӘI#	���'��$&�s��hX�"�D"9b�f��K(�V��w6���p=?d���f�	! $�K%pzv�'����1������\��W����kXX^�X����5�k�D.��\��+7�����\���tM�F	LC��s��[�G�o᱓�8{d�CI$�ᠩ������8�D�o��LcZ�5����ve�nՄ_��L����Sm@5����0��������r��O>��>���(���R"
��D��i�\)`�T
�Y:���895�#�Y���x.4l��`l(��'�0��x���\?hȡQ�Rخ���o��|���	��dH��!%(ն���G����vm��<�l�]A	�BљM��[�d2�f���iZ��������~��g��GQ��(K��f���xc�.�\F��t�=���L�%��Q<87�ّl0݇q�>kt��4��u<���ε[p\����u��F3쀾M��`B	"�趼��B��������7n}�@Xe��x�`���B	�B��r}�B�FGGg���BR�6�3�S3c�+?�4����z��UT�Վ'FJb�4M��w�3޶	�� �u�WF��G�����r��*�������Z]��3\������D��@	�^�46
}S�� ��)!0B!�z�=	 	����o�m�C�,����>P1V��O!$��RJ����g�T�{�<<6
����e[�u4<vb������A�̈́�Æ���vC05���O���2������eT>�eJ %J�z�=|��8=3�SS�8>�G���"�N�zX`O�X�!��!
+m�y���
+�f���s�b�;@	�B�!6Ʃ6!����O�������&�[��@$l���ƕ�KX^/����og@	4|���a*�����������=�h���	������}�&�����0;���H��U�&���C���S#;���o�Bp�r�P-���M���8
%�
+Ew:��A���1B���b��ɩQ\8y˄�����3���t=��#�8�{���{o���u=�nP!:NN�qd,��7�����Õ�;p}^��)	Ϙ��z�
+^{�ÚPI��3a<�9��"���{}<�E�I3d��<l�r��!��OIq���㲛����!Qt�q!�ؙ9���ߵP9��=N�B��4<zr
+���aR񰅐���h�����!����~��O�}s��0
�6N6��(%�B��*��L"�#c9�C&�X��Ԓ��﷬��y�R���8ǃǦ�gFs�o8��	%���b7�񞋭���>������(��^;�3��|[+�D*�Gϝ@<b�o�-,!�X���N\ꅆ�J ��ةi|��O���<�|&��i�H=�)	��?��|�j*!�lx>�{,)�k��K}ܞ`꺡k��j�����Mz����������i��N�Ht]#�X���\��d#C)0vWg����P����8|
+��5��E4�P��X�C���A
l&�s�G���w.�o_A���J�$4J�s'q��(�`;���H	�y����8��Z�r���r��Zy�ZJ���$ �<8? JX���N.���N���v��UP7XƵ䥶p!ptb�t|�$D�l������5T�2:�"�����Q��q|��i<<7��{
�y�2��x��cx�c�Z���D����r��[����y�{�&*�d�g�֢��F!���3�F8��cl\�[w�V� �GL;Z��w��w*j߮U��1��:Zַ��/���Pc�C����I���>N�Bأ'��w.�P��Q�h8C����^t�"!�#CJ����8���Χ�X
W�nPo���s7�W/��Z�����*޼ve���x�:n#��������}��W(aU��c�(���N��jG���ro�X��LJ)В� ��h6�D,�)&�]��kF ��C�c9,��\ ���ĥ�:�o�3.@��#!��il@H�+?L�d!���5�f�z�2�
�iR
+@�6��Z���ts	wVK(�.�p�F��!��H&�x�B�bw;���A: (aU�C���������I���Ķ��v�C[ow=v��
+��l~���L��7k�����'&��ѵ[X)�ٞ���E��le�A��z?&	�A �Y�5���g���UVKU���<�SyPz�zm2D��Z�����+E�W���Z���V�eTŪ��@I0���a
+�s��$bX/VоA�b(aUl�^����s����nVh�!�ͷ�	m�}u:�M�RJm��RJ�cQDB�KR�f�EJ	JNL#bX\�X&M���T\w�P�:p=��Reӏ�A��D*F&�BH��!d�Qp.a�t�Ӊ���k^���&��_���%\������^�KO?�l2X�X/�(�(V�e��*��bņ�2؞�g�:>*���`-%0�ZJ)@H�����C>���o_*�m��z/ŶQª�^�U<�]vsӶ6��\�r��e7q݊N��@�J�RJ��z_6C4o�$.�Ld$�T,�l*�KkH�R��0c
��/��j�!%�ߕ.FA2W�4jb)a�:"!B�F	0t
��$�!�D�d�h�D��#v����0����e���[�����C&�E�c�A�
Z1����|���5��&��m��$��� ��P2���,b�n-�-�[�.)�VE'�#���[�}Z�7��<|x�ѓ��a�N&#t��I8a�LZ�k�쁯Va;�,]_�^��;Ko]�_��l�yBZ.ۉk/"�z���j\
+!
+\����0,�D�v��	|r8��>�
��R���Z�Xm7W
+(���*Jw��H@��
+��/,y�FU"M]�A���!j��X!X��d,�ѡf�̎e��`&���p|ܸ�s������
��h�����̎�݄��G�p!�1/�{��9H\�~�S�ڵ��PqՁ��U�J?��v"�����OZ��ʝO[��S$��\��t>����ɰA,],0k�ƀ�0F�Rv.^��o�~��/��[�V��_�d��Rh�zಝТͺ�Jtڹ���
+�yEJ���l��Y��N�F"趤k2�(,��+�PJ`�L]�5Qm��w��\��Xu D��D����MƐMD15����1L�AkIG�B��č�5����� $���H)a�>t�"��afdϟ;�d,!$��JR0lր��!:�(aU�ٮ�v�
b�M�̧��O���=u"~��T�#��qn(J %���Z���]�Z3�(B�`*ENϜ>���0n������ʥ���4�XX�����k��K�+U�阚���e�����J)Q�VWR����]��6�(��A�Q�1�p*����2�Z���Mz6��L;	�v=\�������[x��M<rb
+O��C<�����4����-�� �IDAT�}.��N$B"b���O �N�2
�3	����@����B��E��*z�^�S���D_�0udn4������e>59d>5y�՚�RukU�5� �!Q蚅l�Ӥy��3y��'��h�J��7o|���励t�H�~�-�=�.�M��jѶ�i��vڼH)����8<<\1���M�gp��x$]Ӑ�Z�ƾ�oKv�Rh�:|���o��jRO��C���5�C�Z��Gކ�4mo�UԒ�.���K�=�L"��z�C�����X�Bj��l@(a���6�����L⡹�G��S/=9��T��T6*���=T�)9�`��p�2��-� a����N���>}�ĺ���2���?��fb~��-�T��?�x���zl�٭��%���/�R����{�]�3�gHDðLe۽�����[X)�A;��!�R�C&ʶ�o����8������B�1&$�]}j��,��?��R��*~�i�������^�(�����nIHͷ�Y�����=���ԉ�����}��#�M�Q�}��֢o)9(�
��XZ�BL8L�BK�Cx����ђ�jլ�V���>i}�����5[/,�ҫo\������Q0;���K�RM�EB�Qp�.^J�՗J)���񑇏c(���V|BH���R1\���1�f?c�p}qgfFAk��{�^ޓM��s'𧯿�Bنen]k�?���R<|lӣ��������(�ǟ���fiw��UΖ�$cY���`�����p�q���������`_��$,Gْ-˒���J���N������3=�3��AҮ4���;�=���=��So�� �}�	
+ē�!�0����D:�(빅R�z���U�0$Iv_qú�M��o����-u<�����)����� �k�FA�@��p0������%)T���Z/���F��U'��C����]C	u���?���IIB�
+j�������$׮L�Db	$�ڴ�ٍ����\�
+Z�KНj��&@}uxV/>YB"�!���]�,�0ơ��ݰ
+~/^=r�O�L91H)�\ p��K�­�9+ 9O�:Қn�G��4�Q&�s����E�ڟ����C�[K�5�ݾ����Ud��:�?m�H
+N���!�E�D�'�Bp0a��5P����M��˚�-1͍�Q��.�W;Z�i�/&���OE��%Y	��Zʸ!y�����D�I�nl�嗽��l��B��*�W�y�.a1���E&�є�nE���c��*��h��Y�h��8�"�[܈��H�B/0�" �%R�)�XK�l�^seb=�1��*V5WV�m-���y�����x]���n �>Co��D19�$S�����	�� 8tn��0,%,��{�Z�*N�ȯ�r$����ޡ��菢�`G���0�
+@BM�+*�L�L>��`pd�d!��R�g�e���n���+��K���=�J*��LQ���R���)
�s�u�ƚ0.^т���i
�:]�PSĵ���"�EW顔�gphwd4E�8�2��2���(��;�ɗB����z�ʊ�7^Z���>v3��@l��HӁ=�ޭ(B��&2��s�Yc�}k\�Bl�e��t��f@<��յ�����}y]w����������`�����h,5�9]}ï�ϫ�RJ�m�����{�ãq,�W=�is��0�*�uK���Ɍf=W`��3�Y�;x�X�<���#�?<3
���[u�5K�t�|��_�X%*���Gv�Đ4�4wFw��L�g&��$TJ)�/UoZY����n۰$p�OfH:R� ��L��� �P�D� v��q䒮�h�9�X���.8�fj��F�1,�q���;z�
+����#�#��
���.k���8!��n!]�#���q>�i�sv�����X��;��u�#L��q��XPS1#�k��[`��FDbHif�i�m����VB�̴��@��4��N�j�f[^�ՔIu�07z{�`<B��'$T�`q}�z���E7oj��ž�{d��n 9u����y�/�!�,��t��`��S�
��o46^�P����~���/���tQ�S��N��wa��&T�|03p�t&8S�GmE��lAk���G3B$�Vd��E�8oqܪ��YL������s�m=�[ipJ0�����W���\!VB�;�Ri��T�b�eLeb=;0�o�(_�X㯸hiU�[�>�eu��S�9�|6h��QX�J�\yA 2����9�;�\�nB1��$���-h�vp��������d5E�$�9z��Y��ʠ�X�S�2� X��W����u0�g��B�:3�4�
+o�t
�C3i-��A�6��E
����j��[j�q�RPB�]�������X*G��/��)@�X�6��G�^�.[��}˒�w���]gҳ#����܀��������K�m@~��?�{� �<-Wd���M�+��(\2C<-2sY%Jp�w�=���v�E}_g#��]�d�"�G��V�Y7�B@g�¸q�yX8�
+:����m3����vL�X
�Q���W��qgL��@)AW��s�X"�ߴbM�r��q��u�b"R�(��>�{~���[W���K���p?��͍7�L�g+1
k�@b*�6�s�A�s���RF��E!ӲE�D�X�[��b�ܟE�%��w�[q�%�)���f
+�a��"�k/^��HG;{͹J��\��\`~U��|ִԛ�O�2wf�������?2�I�?Y�å*�hE3�4׃��/!;�x�o`h��6�8�X��L�s�H�$����Rm�����oy���ׇH�"3J�jo��dR�� �ʚ!Q�d��b%�vkmnٱWA�:���!��jE7��8~I�p�g��>���̯
+c��淛uHk:�C�u��նWp����&J(�qPJ�R_��n\�M��`\s�t!����b�R����#f��dr+3n�0\�4[�_�` � �Hc�����t��4�ӴI�LEQ&ֹ��h��Q�Ԅ����h^q��_Z�(_�H��<3@'�N�q^���
+0fX�j��-d�'���I���)�Ւ9[2���K�U�)*|
+:�YN&�p�
+��~�5�媋�*ʬ3��J�SX�Uⶫ.ƒϾ��'��2��=b��8�.+������C}u�\��4tZ!�n��[�ޡ(:��ᢥ�b!ưh~5n�x5�^��$��f�"���%��B���Z��L�sS�R�>���au��_��SW���ӫ�m
+�i�I��	��.�]b��A�@�X��&@)�
+k�Yrs̡���5n�ב�H
��`�����{q���p�*Қv����s]P[�۷n���ūG;O�̀�����5���"����b��ez]0֚�&V-���W4c$�@"5q�!t���*�k.Z���U��_³����w��h"i�W���˘A�[6����8�if!nJ	���>q�y7~�ƅ?Xߤ��%Af��
+���`mr۸��9F��\XK�q������}�.#x��ܺxN}yue��3W�9ؓ�hJ�+`�$����p�2��~s�ϙ�
N3���n��P��g(�dZg����k�������ux���a�Bx\
+���@�R@�4ϫB$��ɾ3j��I��T9�B~l�h%6�^d�'\.7<>o��J(~��m_zv��
�Ȇ�;.����ݹ�2��n�����s#��߫�n�d��{�����|�*|�B���=# �����)8��I�c��<��1�	� 9��I�.�uB�`�C��
+HJ)��$��u�0,�C����{�!EFcM+��!��0K�`<�ߜ	��E�"I���͗��
����� �4�Ukff����0�F���@p{����͕k��>��U�r�R�7K��z�r��^���X���C_>���k	���S�2��NLVK�!T���>X��;/��_]U��eu�j�B��㎽�\!���?�ȐaA��A"OK-�Վ9�G����%�)zG9��c���7�8|��#Q�U��q�[>W�$=J	�>�/���HkF)0�3�L�d�����J!K�a?���7nZ���u���?g�O��]h����@��(t��VnO�����K���uK Q��PJ�����j��	���}z�
G�#��B�z��Y���u�a��T�T���W.<��
�X��>O�@��2�
+(���ާ3��ҁ �$H0@3Y�er��
+�My����S��L ��S���
+n
+�E������-8l%�(EJ���VtD��
+�aEK���g+�€ߣb��,��Ak��vj���n����8�%���A„�.EF�j\��	KkP��­*��Iu6����7o^���5xv�Q��F*�!�a��F\�b!��*�5V)	���q9����c'~�%"��tOeL�2��.�k���B�J�b�Š�ϼ{��l\⽭:�4p�PZF��iKٳ&O�3F��̋d�8�r�p��lsn�oa��#d��yQ����*.��Q����d��q������]�����s	��P���σ5-�h�_���Q��Gk� �u�!�LO��Re,����uX�P��� |.�"A�:B�a��ܪ��K`qC
4��2��]���~bi��Z�X	�i
�i�G�m��W˚�)@�Xg�i����X�dJ��*��7,\�774}s]��|�
+j洏Iq�_���t4e癶�����qY�Z-´4Y�9@���)O2���h�E4ZB�|@U@B���ZW�����X����U�Ƨ�%(�4k�������|n4Ԅq�f�4��8��	�GF�L頔�?�D��1�2���~��
+��@�fp�\x��n0H��*�%$3}�qs�y~`B)E-j*'V�>�;���?4�����k��1M���̣TR-�W�˛**�z��w�qm�C
��R�����В�bү��/�|� ��Fk~i�šC�9I��MZe�B�&]B@���$cs&�LNAA@%�u�&U�﯂�%�*�G�jT}�<�{�p��h���9!�Ol�%p+
+�.���
+A�4��c<�ޯ��֢�B0+�3��s�B������$Ag� {��ž���G�
Z�DzJQ&�3���S��*Q%"n�ش�׷|ޫ]�i��ٷe:�<����֔�,�:tQ@�儥��.���f}y��ea�$���k��10N��J��ek�;��B�)|Y�h �a�a䜃���LB�L���` �@�)T���(j;�l�V��+ �B-�d ���O<�XdtԹ�j�|�Q&�3��Hu<ӯX8/�ck�5�\V����u�H�+���-�
+)X��3Ѡ��P�����e��9���y>Q�t�k�&�B��)�#(
��(�0���FZ�\�
+EUˤZ"�5�Ϟ{Fa����fc��u?s��wHd��bS~�3�2��
+R*D���*�xe���y�W����"�f���4d*8�o����ƜwJ2�e�p��@�@#���aJB�f}�v�<�8QC�ǡV�D@�����%	�$I�d���s�mʘ:̩J��ZܿJ����|�ۑX��V�8M(��G1R���J�7��yÝ7�|���`H�g~�>շu&�-8�9̕f�f`ˬ��$B�h�g�n�	Y�盋�r�sͩ �Ju�zY��I��M�]~��7�,��r��g���e�BPJ��\��ɶg(���K�v�R�4�f�ӊ2��^L��ڟ���7�=�]Ѹ����?�l�{UZ�1��]fJS�����}
+��,ӭ�L�9L�~~�#!r��P4��ll�s4���6�с#�U/������YQ��\��bS}e��B�J\����������O���8^��L����S��ū���-��}�yw��'������8�_Sv$S��Ԛ�'�/��*s�ױLp0�t3���f�W�tr�����l��%��(�e�a���e�3�K�,ߖ��/3~��S$S�$�j��pK�ӏ2��zL�T3�ԫί_}�;�����[�`�a��}#N{���M������Y�:�H��*m��ٓ3�m��j2����_�8���k l��.'��!BH�������0#w�.s�V��a�[�eL�$�AKbԲ��9v�����YsW��&�B��2feb=�(d����*�����?��%�\��D3thll%�*�,�,)��Gf�γf\B��6Șgm��&� ��v|QƔ���.�-g��,P$�=�
������
+�!+
+\n7��ixhe�up��x<���S�
�j?~𱯦ӺS[�Dz�P&�S����X��ݾ�隿����J�!c�-#�np�Ets�-XAJ�Y��ܡUZ^g985]�%�"�.�M�t)`�vh�&	�����	���`z���43�(���Q`{�lK���YD�RS[}�ȉG�{y�a��
de�xAKe�0��zjP�T��sr�^�����n\�ηn���*�d�8�o�t�x���m�s��HL��:Hm���^M��j���m:IӬ�
+h�+p�<l�.!�L�y���x���m��h��s(��׋�hdڿHg-8���p�V)E�P4���=�Uƅ��[QZ:�(�̣�������/\^�������W�����F��q-�Bb�
+�i�mV����?��k��3�����~۬y8�l�.�n;�)cF^�L�ý��hA�z����2\n7b��bO��2���"��q�V)���s���۶���`�})j���0��:sȧ�B�Zh[ϯ_��w��䦥`�ϑ�æJʔ�i]�s(;����jfN�`g����iKF�YB�/��_d��?�*G(b�ND����$WwBQT��$��rtpA��%Y���VC�(E��H���l�@�&�B�V�$zP&֙�dH5�O��$���y|��k�k�|iUZc�ʢt�@��	G;�`��<�o6���� H.�����
+�lօ:�p��'��L�N~��h*ꖃ�/%Y���E2Yb*c,�p�\�x<ce�$�qΟ~e��}z�!af#q��DR��P��I�L��ǔH5�s)uM��w��ׇI]Z�țV��r�7A`C�R��m��
+�$R���-�1�&c��S�-5g[I.����+���	�H7�z�_�Ire�1eS�)PUz9Sy �@u���j�b-��k�գ��`ۻJ%�LU�([�(�̢$R����sM�֏����U>��&}(�8X�8����u������\�$����5Gzd�Ξk�o�sm�)c.��7#s�=Y-���z!nD��X��/��>�#��3��8; ���r�����N�$D)�?����v��@�X�ɿ�9��2��2�N*�*�}~��użTx5���^\�}'$�q0��0B���GR�$@Iv���I2$k�99 ��JM�j)�s�x'G�~d�#sn�5�r���\�HH��׵��Fx�50S;ͤ��x �b���ed@�������V)���������0I��o�`�|��lsҙn�ƤIuYSe�3����/���ϧ
+b��/���v
+��FJ�NSKU�b$���cCH�u�X�eE���%px��E~���Y��Zf��3$'�7'�C��g�\��k�r���"��T� /[�%,	�����e�����@08&��*K������?~���_;�,��j�Z�^�S ���5֩�R��r+VU|���y���=�L�?�>=��阰'h���D	����N@�Y�l�?5c�%Y�,Ɇ*yeJ)���$�m�iB��v�&1k�����:"�'*g�4�?z�䨴ȸ`Ţ��f��j����x�t���Ne�� ���v��*���n�<�����ې���T��oc2�ة�{N�L��C>OLD��.\V]s��V}`���e*fA��,"�	�B`�*�G���}|���t	�����e�U�n���O�[䚑6_l毃p���>[��N�r6��[Q��@�s�t�8��q�G�^W�0��L�$��`H�rU�2�)!�'$,�� �IDAT�v����r�hQB I�<��|�?����P�����ʖ"J�~��N[&��1R�����������-�r1Hu&0Ub.��)!�(�B�����8vD,������`KT�2͍��j�I]��h�����Zvٌ��^�Shr�4�\���-�]��xJ�?���ǖ/�����-Os������E2Q�~s.BB)�^/\.WμUE���7���?<}ߑֶ�e��1�N�"�o2e�
+�7Y�}��a
+�J�iM]�W޷��y?ȭD���#'��>&�KJ�D��4GRc�w"���
 �2�a	A����),��6���0?�ʨ�˨���`(���iGv�u$^��i����r��ǖ�|gS	��Ǟz����{GF��4�4ͫnb�I)�$Q�S�1��8�!����G q�+dYB"��_>�̷���?A^W���|i�bg<q4��:�DX�(ki��H�gQRݸf^�=�]�/�,v��qAfBS�)��^M�e�%L��4Ǿ�8��=�]G#��O@3�v�D��j��x��A�A�ҁ�5.s�ʦ*�`<;���|��
v*T.�H3�L�%B�{N$_8x2��w`h�w`�c���_�q�T�D	!V�:Q���cB@UUB!���oU���yj�_��3�ڹ1���W��O�`����T�=�Q&։1IR6��o�罫��q���2���St#����d�`0�D��PG�^Ɓ��i�Y�^��%LX�)
+n!r58�V���.	�>\�=�LXw]�L3��SC���#2^?�|�Hg�U��8ҧ(�W-�Z�D�룔B�e��ipv��,��~U���������>����Ⱦ������I2-V?��C�ߝ(����R�ش�a�=w���MK\oc�Oݧ:��әj��%�<����qr@���xn�;���X
+�:�R�h�&�N�\0�dTz(��!IE�O=Q�������f�H2D�C��8�
+�����v��j�� 뺡���節�L�\�`�&a	�d25\���9�~?���9�ʂKU�=����ׇ{�E�Lt=~@�d������y�X�z���C9x�8&K���u��������i��F��Ἷ��3�nB�Y��0�"O���j�w2���4t�#��7�3
+��=b�{��b:��u�;j�����u�����P�����@J�p�$x��F��vu�!@a�aי�� 'P�,���*˟�@%	 ��m�$?	3�� =}C�����n�W�n��E�	�Lӱ�� >:j-�wVʢsBȊ��YQ2K�"#O�g�v��~����X"�29�ɔ!�R�� �>N��k�
+&�F�VOϑ��H��5��:kP&�˜,���ΟW���X���,q��`l��T�0�)��	�M����t�q�#�HLCZgHj���&+K�]��\!��2dGR���2N��LMW&ɔ��B�)�
+����<�Y�h�����q�p�D�ٟx�D_|�u��0����}������O~pQK}�2�x&�p ���H�ʉ#�VJ���x�~U�	<����ޟ=��tZ��+2���w9� ��ЦZ�zŚ��5��.ڤHB
�Q�s�y���I|$�ޤ.�_8�ᗺ$�qC��oG"�|8ˌ׾��\�C߱(�TmB5Iu���_����x��{u�e��e��Dd��&u�p�+�X<���O�dJ��c=U�W.�e5W.�j���TT*ф��
+�ٜCJ��&��'���I�So������%��Y,����zbW��BpŪ��*��|�y�}�����p���h'�@Ok臡�e��Y�9�� B�0�$Y*�G����=���n=�9�:f��؀\��#~�ԇ\o����������ʆ	��r�J�<���A	L����Z! �hi.:bFg_�]�t��~����C;w�8B����lC��B"���3�H��1ؤ��-5�{�r�G�vq��ƨ1��\�Y6�H�@�t�p�+��h
+�G<���IZ��:2�kј]�g{�-k]��0ti���)���:��]ËmfV$bk�����G���,plP��7��?��5؃���68�r�ۮ�����p�'��h��'c�L�g	�D��
+�V>`��V�����}?���CGO"w������{�j^�ee��5��y��"�b!`���3΅��p����P�
+�"K0#� ��$k����Gi���{���s���zRӍ�(�s�\˦�,
+I�Bk&U��E5�O�c��]�C�3B��2��^I`�p�����m	t��0�0K2�e=�r�8%�(翱u84P����A��fTr:͐�$x\B�N>�Ф�s`{�p{%ai�Vm�p"�j��d�em�Mrvz��/�	��s&Kw��⑧^p�]����3�*Sf�<^��h4
+�y�\�:���(��9���
+^;������ǯ�?t��A0���~��Wo]�z�y
�
+]�P�th7����h�{i[�f�Ҷ��1 ���KPd2��Ο�a̓`@I����M��:���d���W~�T����D�@'Qs��W&V��)�#��T׶�ݟz����풊O��{56{��tDm)wA���Ǿ�$����08ʐH1H����K��^� �R�s4����h,��8Mh�$הƐJ3x\��8���%�
+���[u0nN{k���#WJ�KPJ0#Ow�_a����0}��L�5�W�l��憿~���S�ŬA(�/���H$�H�9J)�<^of�*
+�i��?|����|��Z6
+�59@�m�����|�}�
+�5u~���:��	dE��vWPRTN�Jk�$m�|
+0.�aa�E6��=�L���9�߼v�+����k������c��=O��F��GX�"��u,��R	�4��wݸ䶛.���B�7m�=�d<-Q�0����H�c@�@TC$����"�]�.E�!�1c�W.�X�~?�_����F�[Ě�Mc0���.cp��"��Y� ��20�A�!8ϑn6����+̄��*v��Do��~2��,��d8M��|H�}�K���e�C�$�a�!�J���	b�y}>�(����;�|�'�^�o�@�_5s��)��M�НW������\-�סif�2U����d�RT����$���975\��ԀW!2�dY�
+��K9ER�i�$|����z��w����H
+{���۽��@��ؖ�sV�����_5��H���v��n����pJ�S�`W�%SSk�3��d�
=#�)YY*Ak*@zc�¥>�����A%�Ѵ��	d��#�u�D�!�(9)
xUಅ�����	Bp���t���Z�S���%������'�)M��b@ڻz��ѯC���-�|G�e���(UT 24�t:]�Z� |~?|�@&��KU����׿��?��s;^v�j1�/�rq�^Uy�5+��)���&�Y}�$��	���Ř��T�}�3���<n�T�в�6�ݐ�Ȁ�����_m�8����tpw���?�������q"R�	X
+zd|���o��7/�V]��j3�T-���	ɜ�y�WǑn
:zF�C�IΒk�3�90���Rܔ5�伂��>���0T�iD̵]�^Ua+�d
+$t��:$�pB0��L��g��C�)�:�����>ҽC�u��f��jm��a��;n���-�}KUdY7B�N�024M���:W |���dYΐꞣ��G}���v�6C����)dr��\�,�څ�?xe�]+�I��p�E�x�$�:�tM�21%�N�2��MB���⯾txx_W�v%���?���O�
��ۘ�e��TM�&X��M/��
�V����H17]�Y1�AZx�SC[���a�����Y�&h��I�`�RꚰhV'�(0�H�;;�Nk�4��36!���,p��l?� �SKpd�E�h� �`8�^ya_�^?ֻ[��|2-�8���h[gO�?|�7�\��
��U�s�ۍ`(���aٖ1��� Y��]��S�������0I�Ѐ��K��]�r��n��Bm�/4�3����"Rj��K���З$��F�FS|��H���^9xr��R� F� �D@(D����ī�$ի�piKPӍ��yb� }������|,��fz�s�Xm�D�7mZp��o^���
+�A�~ؙa��]���")
�ݩ��OG{���QfER�d�<��k�p�%���/�8�m#H2��.�+1��Q�X�	�\/i4��϶��$�3�.�š����u�����z���[���ԩ����1&?������~��_9�=��n���u��JM���x��s�+�U�,���G�"U{��k���~��m/�z�s��9(1�v)���|�'���b��5hg�pJ��|	�,c4)a ���#�#�յ�m@�h$��I"��!�����x"�*�	v��A���ɕ$I2m�,�y.ox�s�ՙQ���7���k����u��2f՚��m�i�5S
�c8�m�H���QEd;��(���Iz��'�-�]q�1�rA��IÆ�81I�4�]��*\*-ꖲ-��*x��1�­P"!��}�:~v�s��㝃/G���16�R�A����7_���w�囍��5����x�H��O��q�a�mM�R3�������������w��*i�m���C2�[Q?p���>y}������qzo��-b�&e���n�W���~�g�
'�@��ѱ�@ߐ)UJ☳n.���囀�5V�P	�\������������
+-�=V����c��Gz�pPj�B���N���Fz%��/4ߵ[�BY�`y��M�	(F
+�3�A��_AEP7��&�ݽ.<rD�>�{���p4���v
���:`����j3����$���u�E>v�-��nY�嚦�`�T
+�H�T�l�
 >��p�,CU$�S~������o�V[GW?���b��ݪB����K���߭�
��T	�Y ��g}�:�xtw��]Qt���:��+)ƾx����\!s�)��_��wj��Y�T��]��ܼ�}+��
+����5,p��c_C_�A"�K�r��LO�
+l�\�er�k7ub�X=��)
+](J����$��S��*��k5i���\�亾.�H������]�v�.�r�4_��'l��M�T�
��m/�O�>q�{n���KߩR
+J��!���@K�L�\&�3;ϳ���
+T�T�����w��<��Ht4
+���~s~4B(�zM��O\_�:?k��S�~BL���hZ�޶�~����wEq|��Ğ�����6S�}�Pf(�D����K�Z�T���H���z��[�Z�(�����/��<T` &p�W�`7G���c	52vo\9�oם�\Ie'W���ו0��H:<^beU2���4G�'�k�����f}A�
+߭�C�}�8��	���D��R�ޱ��h<����|݁����H8�$�Bb�H9����,� B�eJ�ʁ��������x�I�y�ԫ|��X�y}��~�G����5�Ԏ�%H2���'*:�?��Ӈ�_nM��}�1��M����B�:��1�	�\!�RH�:��vѕ7]\����5#�*ccn�����ݔ�8��q�G@7���?�d��ļ:��'<���)��A1����T�!��+��#�b�y脄d��[�yn��������q��0 
+Mz�.��`�}��������m�^���˛�HT�T����aF���e��s���@�>�nUA<��^��~��������󙝰_{_�
+������[��nӍS��J����/����#�m��|��o4a�GF��R�t2�9�se��Bfߢĺ���k�y��_և�pz\�o��J�N=d+��{D`�I���]#�rT�d�r�Rk#%ny�i�;�٨����6q���)����^E�ƫC!4�X3>h�BU&&#S�.��V/�7:��}��!09RJG��X����������P�l��Z��z�$+ ��F9��)������ #@U�����������o8��
G`$���!�����n�sK���S8I-�� 
+��=�������w���C�Ǣq�!7�b>����������b�H[���@6��]�_>�G�k��G*�:b���@<
��^:��p� �YJz㞇�9ٶ��$	
A���B,i�,��u����K�в�.�������l6�� �vI�򑶎�=GZw2.�����ڪp��r�R	�10�ʦ���:�D%x�~�+*����Ͽv�����������b4�H!+s
���i�)���V�;�6���7���_1�3�A,A%'#h��䯾�������_�k����v\�H˄:�vb-�T3�K+����_��ٵUn~�n�@	u�p#T��q��A�=�&��r	�����AN����{���(_J;%J��2�$�Đ~�BM-
+U�)�1'
+B�vI�3L�&�6ֆ�G����>@8�L\��-�c�ݔ��H��{v�
G����ꊆ�`@�$��e�er���TՅ`(���J��n�������g���O��3;^ݍ�T+C�e���X���\�nݺ����H�0g���ץ�wliz��o����g��t��LY�0���?�z俞��m����;�\,65l�~Գ�L�8�|���������|����w[�fBQ4A��=j��d�N$	�%x�8�h�@�b��.0Q�
+�[�����H�r>Ѣ����r��Y�"]Y��1��Hbw���W���GȒ�*���6��$7�)��'
����K���q�7.��n]�~�M���]]�2�d�w|C���O�����K?�܋�<��޷��ƭ���iQ��U�<uA|t�����i@B)<n7���Ĵ������G����O��'��*���UUTT�B��z�j7mڴe͚�or�=���koo�S2�4�0�KQ���tݧ�\�O�����J�����e<s8��o�&���u>�=0��h9	�X��s:0���oT����
+�л޾r��oo~Ч՘EK���E�T�@�0�k�Iv��B'<4��0ι�V;�.8���3��`0�{#;;b��=���#m��1��e�K����ϭ�Ww��3�B����JuRZ�
U�K���7��������l�չl\�D��7����ٱo�Dmnް~�7]{�%k�m�
+j������J���<�2&�=��@��pɴ��v�y�����Ï���*���
�|~��e�|�\s�իV�޲t��ePU���_���?�����Q
��*��mYx��_W��!6���X���Avl�Q������N��@6}b����4���]�
��oR!U*�T3������~�=U$a�Ĝ����Ԅ��E�R��D:�����$�Ҫ/%�p����09�2�:KtD��$�x��}����:Za|���|�Ɔo�wǑ�L�U3�aeP��;5�E��~��O=��ruj@a���B�E�U��dR�4�$�s%䒭�pE8����͗�pņ��Y�pe���G�DF"�u��4�_Y���z�a��=�ݯ>��ɝ���P뉶��Jϛn����.�xuKK�چ�/�4�|eYFwww�׾������T,K@]����un����O�=S)q	�E&H�?\��ݧ�>�]�z�
+�I�P�,pULd�%Q:�8ߢRH5#�.XZ]���.����
+.�dWW:���9�c0N�넄�R�P'�a��M�"S��SJ@����b]C������ٹ�7�h�6w9O����ί����.��ƥ�t�-�)�n����
+���C/v�4X�\K!V���dY����/��K.������C}}}G~��_>���1b��iih��
�`###�Ž�̸=��{o��M׿aí��5�U��� 6+���&TJ)T�
+��*+�.�qb`�xꕃOFu�}Ӧ�W�]���Ɔj��
�#�h�&�|�k_������O%����H�UU�xӂ�|��v�0f�T%j��茊����~���n�ˆd�� �IDAT{�h/��ϩ���S-�T�=58ߞRL��X4?�ڝ���M���Ϫ�����8p���6=k��-5Ioz�>J	$�"��X�p�H[o��^����x"&D&�S�/���*�?}c�-���+�hR��t��PT[����jE�K�~�|��<r�`�n:Ӈ׬Y���¿_w�uB�4#��Ȉ���������FZ�z�_ye�	��Nt]���D2�1���o�C������_uCsC]�Ji8�L �Hd���%Yatb��<nxPՍ�H*֯)�5M�}+�����ʔZ�U�����)!8r�h߷�������iI�:��o�X��n����B�����I�^�6���t�3?{��s�D*i�K�����e-u�moL�~U�[��~ת�y�_�$Ng�[� l�Lj;�e�j��@@D���e�7�K.X�tӏJ`0�
F����'���p"��s��e/dR����ᆯ����++�����j���+�24u���w�O:���?�����0�\��db�B}�-~���~e���o sn."`Z����|xxX��������kݻ��W^ؾ�Hooo��|���|�[/\����5�:��4O ��3u���\�=� �@�dx}~xC!�@S���/E�zc�R�JRa2�A)��k{������|z�����-�l�ȵ�?t�R�V�"d�Ō�	LFҠ�c��g��U���[�ٰ|B��X��Hu�H�Ӄ��M��_U�aM��_�ㆧk���截J-��H�b{��}�rf��	Bx&�|R=al��w�I�`
0��B�ф�y�s��ܶ�����Hk��x~���zϢ�-�Ɔ��4).\���*׸��'l�E������>��^h�#�Yk� #.�K��&˲L�B��	�o{��}�����K���5L K�N�[�s�9cL�4͈D"FGg�`OwO"�W���*�kj.�,K��)$c1$SI0Ô�g��X��:�d���
�!{�pU/�ZQ(J�g$R'� @�zd�_�����=�؎[/���֋j�u~]S�%~�͐�@��q�x`O��_��ȷ����]";��^���%�L������W��ą˪��7�����F��F���;=�'�vzG�{l��� �S|��K�x�
���b���=~��O�u�Qi!�j1b�V�l����ߺc�wZ�b��p�$�ဂ�z3������}_|��S���I�D3{%�UTT�o�開I�\Mn�e��9�x<�ڊP������������ń�M�ι��R!2I#t���\�D����P7�H/x2
+=A2�@*�3��l��l��
PB�����py|P��p�4AT�H*@���%� �  �����|o�����N+<"$�p��$��؊Y��2%�b�kOF��'���RQ�k�H��j�Xgs��Ȣ�y��_uIC(�տZ{�[/����شz���I���l�:�b�	q�ZQ����l�W��	SDiױ��h��ND�����?�9x�5�J��]���@(��"gz
+�5�*�~�E��º�H���E1�ڝ���T@	@�@G�=�bb�}�
�U�En��
+C>��G)�d��2�T�����
��(�Ȓ���KWœ.[��,��+`rg��<��.���4$�����:R�ҩ�4��|_�셓L	dU����냫�j�|��y ���i;J$S��=����U���ʀ�a0�T	��Y"3��R���@���ʣw��|��ɴf��u.[8YbE�>P&�	17ބ�QH[�Y���_Q��,���Xt�L��L�U'��i�b��.��V��-��N5�q�i5���Y7I��|�����ܻ-�J�9��9y��Ux夕�ly��m�g.n�Ճ
�4GeX��=��*�HD ��p�;�j��<F�LQ��Β�M���(�Q��	p� 8���*46���X�8��I2��(�=�k���TU�dY��vCV0À�N#�N�3�1;�f�YQ��x���᪨����u�A�dr�i���1��j��0�Կ��2L_�"S�T�p�Ҍ</B���:ر����Ǟ90t؊���I�Nr-D��}�G��񎝓���:�	��}�7��[�Ï]��*ڠO�UOc��Gԑ$�3��8ԧd"�����E��i�'[�2_��:���O���{�##Ú��Q�PK��u���������_zG�_oj�o�R4C�*�2�i�b�Z�Yx+F����̀�h��H&bHD���S��AXY���`�
3@��J���/<���;��j��K%	�2'+�
+YQ�B�t�t�a@��o�(���*�7��J�B5p�k��@@$*���v�?.��"�w���S_��w�\���/�D	*C*�^	�)�HD¾~����������|�fb'y#��/�ɵ��\��򫞷�j�=�]����yt\�}�������Ղ¾��]�"J��}�e�N�����I��}:n;���陜��dz�L�鞓�$�O�tg��$���ıbE�dS�Hq�DR��;P{�����U����H�J�:
+Ū��������ok�	�jֳ�:��Y�f���	�+�\q"�[U1Ug�ԝ�3��f��2Ʌ����_�7�!�ͽ�қ���ꑷ�ft|b,�R�"�ٮ���꤂Q�X){�B���޵�}ȵ���NhKG���1��5���Km�v���ّar��^iRd`R�����P.���e����.��Rh�;g�2p�elO&�����E��W�2���u]�X۶���$�g�QQE��.���DZl��P�޼�t�^�t�IT��d��@PѲ����y�W	��"�iU]X�i���Fn@e���n���k��]�?������Y[WW�v��hSc��M�m�a���fc���z>3O�l���DGKM��������~3g-'WI�D���8�y"RW�u'�^�ZJI90�#�.��W�z����&*��S[n�X��\�=��Z�JU3�6�MuM�ӧ��O�U��&9n�Y����`4:�H��d;~�P%(�&ȍ
��ssU$S�lmnm�}�fb1��1R���3�/�������l�$f�9�0�Z�PIm�K�I7��2r#&K���-BJ�R�JZ��$cEM䤒T5�k�A�Q󁚖N:�2ǬT�
+��]G�|�?����6S���Em��R+��0!FZ`���;�$�G�X��LOoO�@o_�Pww���Ͽ��{"��*CL�w�s�������|��^�u!�j�'�ȃ��>�g
	�1jZ�6!D�����ȵE��b��ߕ��-w���iI�p��C'��ک��O��,�5Mg��a�y��:�xҋ����}���<�\���wlۺyK*����odr�5�JYa|���X�����B����\$�6Ѷ�۶1��naؖb S���u��ݫ�K���N�����`�e*��,M���XEY�t�������ɭ�U:��vg~6�S!�iCk��cl~���6���c�����d����T���9�&iQ��$+-ok��U�\��d:>NoE� ��+�[)�R�R�D�P�r�\ץK��tww_�r��o���Ǐ���O��rv�.���XoF�SK���͛���~����<om�}��ڪ�ȵ'�]r���Vs�gr�78
���Z���g鍓g�xht|���4UHa��ٰkU�&sc�>�쾇y���w��u����ƭ�d��<_�
+�$�����X�a��X��&L���Y�d�
�$�f�ݎ/��&I`��V�-����Ԙ!Z[��<�L4b��-3G)re����I������'x���'����Y�>��Y���Ͷ0�YuG�5���W��Ѧ=<�ȓ$������B(��x��`��H0p�:�F�r�R�Qr��j�'p[�l�(��'	�f�.3WJAU�Ӳ"�A�\&���FF��=��{�.^�p���c�}��C�Ţ��S0�h������?8r}���,����7�%~�3�����Z�Ϡ�Y�B)"y�W.�9��e%}~&���Z����D�Сg��������B�����{��/�{ッ㩧���w�g���{�7l����Z��A��[��3�A���	jz�C|�M#�^n~��E�j�d5P�Z)�mx����C��\�1=A,���X�A��0A�H��B�ޟ+z�RKJ|m���W���y��|	����M�Hj�O�vѠ||�|���ݽ>��ƞ��/6�m	�6��f�9���~�	�nj$�K�e��"��ߥp�����&I�_5�
+�.��Fh���p�̦�Q�ݍ���p7z�~YJ��8�~@6�ahh�K�.�9����G��x���gs�l51����?h�u���v�J�_��Χ������)G��k�|�T��q	��Z���z������_���3_���w�KUL����[j&fKR�>x���Z��g������p���l߾��t:-�1x�7�
FD	/v����!ҽ�*b����Vi�		��/S�2�����W<+	7~�	�Y(�C�W.#k�H=�/I���h^f�u&��V�W��7�}.
g��D�1Tm��QhM����^�T	��u�B
+��qm��l;�djʖ���f��swS�r���(����N���G��GXѹ7��E�q�<R��h��vrm�Rl�?�F#��z�E$�*�T�L&C__�[gN�>~����G���r����Ź���f��ߗX��:��Ὥ[�w���m���"]����K���.&8��b����f5qk��eIJ�ɽr�̯y������\H)�\����@�74Ğy���|��w�}�oذ�m�x�O��^F9H?O|�$���#>r�[�q���4�D�#��)V:~ic�D�=��Z`L5k�_D��I=�E��~�h��u,z�'�߿��|��5ܚz�e���d=�!K��>��g_,�1����"�����6��(i����c���y�;74Q\D�S�LP�x���a�a'���vI]�&Ws��o�
 ���Qh~�|ˣx�;0*�K��}U(�JYU.��ʕ˯=r��˗/����^=}�� ��ٹr}_�z*���x�ٺ�.�o�ɮ�?w��'�,���؋�Y��H�Ջ	N��1,�T�s}Μ�ޛ�*��0ؖ�$���y�;��l��!r�N}2�kb7{Ț��666Y/���>����~�_y��_���k�}�B],��L?ى�ڊ��J(o�(St���FH�PhaQ����K�P�6rJ)N�[�FG��C���m{�Nױ�ȗ�ڷ_�/��2a�5�&��F���$���q��	|�h�K�U�6��2�W
+�+5c��;�V�&���Bڀ]�n���5�pG{�c�+�A�%���I��W	3�;1OM%ui������h�.#L���$��A��>B��)��VfQ���"
+{��a�m۴�o�<p��c���={�nٸqck"�(^�|y��i-8�`.��\�y�a��"\��~n�_�P��Sa�J�p.7#]KB�k���%f��!���K&���:7].uQY�eY����'/~�׎���V�>��07�μQoF�:s�SO=u���3���O|��>���N��
�ry���rP�&�X#^z;^���)t#�Š&7A$��:��-R�ud�
+Ĭ�nB٘���5��M��;�0�aȷ���w��� @	�G�R�TS���
CA�+^����G�hy����br�o,ap�&gl�,���L������RS�� ��W�^�=�i�O��d��Z���� ��&IU�cIjS5)ז�RE��/�"�NQ��On�s�6�@��	��.�����vyZk��'���e˖}��{��������ԜJ��b|||�X,V���-f[����}��J�7X����;[6��Ƿ���6��_{Y��?|��˱��T���yӱ�[h���1����0�}��1��h!9|��W�����Jw�Uf$1;�Μ�T�E���k"8x����~�s?����O�/�?����tc�T��W�~q��L��Km�On%�7#�VqAȊ�����9�Q�JD��J"7Z��F�G�G�`��H����W��?����UY
+��p�vl�F�JCI+.{I�z	��8ymS��?Yu;�L�!&4���0��B/f[x%�Ļ�4 p��#e#��	�����Z�΍�ؖ��gAD�e
+�*1Չn��H	Iע.m�LX��
+�����f�͏���Ar����(~�H�UB���0	�����m�z����w׃�w�L(%�����r!fzg�f���$��@�sY�3%�Ʀ��?��?to�A�Z�UKB9|�r�c].0�F�f���o��\��>� �Q�L�cg��K�����Df�]��ju����׺������/<�/}�~�?����[6���-!���u�IS�ݍ�܌qjQ�Vy8��
+��
Q���H[aے�-p�%�R[	,%�l�m[$�~\����~�{x��%��@�)��b�r�R���+T:�C&�8兩�%����.ym�T!5*�f�ҭ�e� "RKT�T���W����o�{�&�.�R2W�u�����������ޭ����7��L��~�Kw�M:e�:j��@�0I�2>�ߪ%��l��+r/�֏n�0���	��	���_/�D�����Z���g�k���
����ܵ�WG�b��]�s���
+�a��s�US��yv�������ݦZ���ں(-itd��y-M|�ѿ�+�f�#>��1g}�Y�sv@)I��w�����~���DD�s��f�W�k2Ur�w���O~��>�K�MMi�� ���h�"���c$^&>r�bT,�,^�-	�Cͤ�c�q������]�#�>~Z6V�*�%1%j���0�#(�#5��"�cڭ"�ʣ����>�*rG'9�T���X����$9m1��1z}��劗䲗��%1�g	�c��,a~€�0�.���z��>tB�i�����L�ݿ"�����d�XL��
+��(!�T�&�^@��-k([��T�UO^5py��M���ݳ�}�Z�!�����ξw�O���}��^>w��ׯ��$91��u��N�7KP��Vww֧����~��'B/XS5�����uۼr!^ItX�7��Wf<!��t����䅯>�����i^��hA彩��S'3W�U&s��?q�g�K_:p�ޏ��B]��@�$V����!bc'HL��U!�.Q7��d�`�M������j畾85vU&рT�D�I0s��n
2�F�n��o.CD���HahR�v�z��l��W�Ԥd�%
ʛ|�s?����3�lh1�d�͐�����.%�p���Dy+
+,�0NX�P}��^� 7���m���>�΍-�K��;����/��>2ߋ�L��cU[�E�@�"��R��œ)���ҔU-E���Ղo��=0��]4��������P�,�tf5!�Ķm��"o�q����_����:b�����6W,�}G�+��|k1��^Z��?����>o��ЏV�p�m8����w�,޸�MEa��m�7��Nt��-��1�AJ�R���^<r�7�={�D�6�
+�w��������R�h���dܖ�kw�4��k�C�Ko4[�!$���H�<sl���?u���������I�ص�c�A��3��#8-����"��שz�<�Qq�
+l�����t<��#�]���^��I;���Š!�8�9t1�	T<��%#W�,q?��`��Z��6c%'j�R��Q����V�|��T�C�C�(��\ha	��#*�I��HI���.e��	��,�� ����n�����1z��޵C���m[8����#lB'�—I|���j��V��%�V��y|t���k�^����&�&X�6�	�5�r۶y����={��xSc�/���+{�ܹ����:�Փa�|nݓ�Z�Xb�J��n�����ջ����p�.����yaH�ݳ1re�����_S7%����RF�s�#/�|�ܯ���u���]��LM{s�~k[mkC�J������ݛ��V�XS��V�*'W
+�RH��G�68x�T�\�g��5���OuL�� �IDAT�?V����~"��_d-�퇴�Dz�ϰ͜�6;{	�adl�Y��4`(�4���c��[�b|�l?q��o²������0���r�%'��
���������b�QZ!Ak�_@��rn��v�%,���}w�|�t�5�-���D��a��X.�1H|UCY;�BI��c۱�q0��hW����"(˜>�L.Gm}=�>��M����.�xH9�ꔔjN	԰��|;`Y�r�7�������/���)�3n�P�Y^�;��u>kU4������ٽ�����r�-����7!y�M�$Pr���v��b���dE�����/}�л���?�M��k�vlK{mk[�۰�%����￳�#���t�b	i�6`LH��@TJb�
u��4nϏ{J!�6��=��/��Ju+���IG0b�����"��]ܱw���X�!$#��R*��a�B��2N�n�`5�O��5{/z���.��p��؀���1��Ct~�"*^�p�QC�E�������>+��Em��ˣKYL̙4&m�y��9~���l�K1��G_�e:���?�A�������Z��쿥~���T��l�;w��ЀeY(eUDg손3�hR,�J�)��hM���������:R�$��ڸ`%�e��S�|a��-������7��W��Q\�J�7L����V�u�Y��b�{d�=����aE$|m�%a4/8r��ڈ�R�2������LXR"8v������S�111ޗJĒ[Z�Mu);y��훟9����;k��htB��1F�+���|TFb ��8u�1�Ly�A�`��eW��.����AJ�R����A�o9q�P��2!���v�Vh��
+���&PqBǗ	�v��d��V��_��ճW}5C�D8n��]�7���AK"��\i��W������%�˄��+r���ߴ]��Q.{�աw�y9���_.Gm�f�t,Z3:6A[S��r�)��BY�b���qz�)KQX%%5�R	�\��@ �R�R�8٤@ B���1��E��"�T*�0c�;6s�=��ѱ�vny��C��l۾��������d2��?�����B��1�\�#ҵ��/k�<[&�,�5��������?+���2��V�-^;oq��™���ƈ���Ǣ��y?,;��g�?q���6N{�[�ƒ[�|�noO�۔�h��ZoY���>ج[�N3�(�L�CL4>Y���H<u��m���z����Ν[i���8I9��G��q�8*(N\4�D)e�x��@�)YM�&��M�2�4>1%85���G.q�o�������J����!-��"b)�� �U�*0s&:�D��& ,���+�haK�Ώ��E
+�O��G���ul�9ȲCc\��Æ�&:�Z&k`�b��b����vu�78D._�P���\��ql����Ɍ����)cc����D�NŤ�;e�����l��;/|��رsV�U�*�����?����DžBa��z����Xע�:��:������w�����O��(�v��l-�9#ђ��p���c-c�_!�[��>�1BCid"wbxt�l����c�m�{��V���2A���F�6ٺ��h|�}[_�
+��u1���M�u�FG�u��<�-�e�W/b��6n%�nqL�:VuJ�q�d �����^���jQP
+�.�</d��\�ra;H'	KH��*�xS�%{m�4�'�a�kV�h��)�!��M��V<�6�~u��75r�����7`�
+m#cښP���B2�,��y��G���d�HMFs�t��<�*��B�ǧot�k�����3::�R�W� \��K��˿k0����$��U[��|*~_�����LX��z*�������W��ɘl
����T
+��Gbx�Wp욈bHK�$�.�VV�mYR�r%R��-���|����5��� ��lY�(>XH�a��������9 ZTݘ����L� �ꦍ�`�0h06>Az4�'��A�`K��ߖ�w�����!�i��hݒN�YZ��}�=B?� la�"kVٕ}Q��ji�`]�F��{��t��K���/�'Q. u@�x�wz��֔µ-�Y\a��DZ)K�ghonDJI�P����W���eY3�jv�I��cͲڦ��oe|u.�aH<���_����a����?-��S��L�����`��L�f�
+)%?�܎����y�j���	����piPp���샒���m$�e��!"T���$]Ik���v��F�5f�VA$���U���{9Z\K���7=�VQ��z�K)
+�2cY�f�;~@��MM*���r���%���#�za������U�A8q�[í��_��e(N ����Ҋ$�%M���k���^߷�EjB� r������BY���%�_�
��h$���1��Ӎ9�g�F�V�5.]�ͷ�E��l�pe6cmm���5�V���d���������p�7���W� �i�V���ֵD��V ���������p�(,)�8vM0�[�7�y�m�X�憿BوqG��+:�v�;4�Z`�?S�����g�X3���;��B]���s��#��Mdhnj��U+"-W(�/�PR���H!�-%����@����e(�õ��U�CƓ�ݖ�*�X5��cz�r0̂2�W�����WB��+�y.e��^y�f*c�R��J��B��l�0�y���K�(^���a�\�Ҝ|9�Z�m�vҵ��Y��Q��y��[:>��/����@�������ֵD�U̴P��v,�~�#[��kC�~��x�JAI(�p�Kpa�B��4>z��[c*�S� fAc�b_G���1b��<{�oߺ�T��(%�S�ٽ��k	RJJe��l�R�]�R|ߧop��6v��ּ�%��o���l�8��W�na�omRт1}:�f}�v�X
+�E�<FXJr��0{�k�����c
h$�b!� C���jW̓H���_*����'��
+���h��;�b.�l۶���(���ݻ��O|�'�\��+=��E����,�ue�����)������O�yFY��h	7B���5���H�P�+����L�W��c��c��}GA[���=)>v_�=�bĝ(\ﭽ��b����Yk��+!%���Dv��d��1��!����圤����}�����P��b$B c	��\#�
+7��7{��FE�`�����&8�7N�b��,KE
�4]���9r�Ƙ%������J��$4���e.vm��$R���%�G���,��O�ZGR�O>���?�܇>,����g3��%֚�:���<�1[Y�x���Z�c{�,](VJ��>��]�#��`nx��Xܘ�D�RВ�ؿ٥�9��D�Q�]c��M)�I)щз�Z�����%!����uu�)�����q� D)EM21�b%^�0�.R��i���$�nje'�~�!��ˈ0$4��]c�������
V��d�����}��˚�֚���Uw-D���%�f�%�>?��C�{�T� R�4�p+��>MM��}���[G�����O�3�Pץ�Z�Z�Xj���|p��g�ּ���k�Z�$f�v��K�,���T,��n�nᚊ�*д�)��W���
.IWFֹ����>��D!�sUn/c���i�'�}j��R���a���H!){>�\~���|F�&"mi!H�cQ��,_	���,/��c([�1Y�v���B�����XU�϶���pi$3��6QS*'����}-��a�����icH)��H���.���9z`�T��~���������~�L'���ٸa]`-Y��,��e��G��ms���k@�Z
+�B8~�pi�`/��6[�؜��O�K(vor���R��ژJ&�����		����V\�RJ
+�CÕ�D���qlj��ʱa����[�B@�x���� (���R04:Fɋ�x,Kwc��W����Ϸ����`[��gɘ���M�r֐x�B(aY� :�E_s�{��m�l�K��x���s?>1�����*p�zW�,,��"����|���inn���5��>u�
֣�>v߷�������X��ui�N�j났UKJ�3�y�;�O�f-4-�
+�\Ҽӣo���<�[�n�
�w&R{q��Mqvo�S���UT�V�«���]G��H���++�51Ǧ���\�Hw��������.wI&�$qjk����Jtz��lB����Y*ZS��S.{�uT+�J�Q�q��H�9�������n(�tkN�Iu�0���<q��d�8�l�������`cLE�#���c�����@`�6�m/�e[��z��F���]�v=}�������:�Iu�&.��k�Z��#�=���uI�y-X�����3=?��{Vbẑ�V�Z�>^�3����ۜ���&fG.������aZ��Ԫ�Cʊ�j�$�.�l�����F���1�R
+�R8�EM2A}]-�
�����r#)
+A��)K��A��勌e�dry"�EQ�J��^���_�<¡���1kʢ.2^�p�H���A�q�WĄR
+r�=��k���6AVU��H�Z~y�1(��2����P���U�J�۶mg��m8�s[e
+����o�ѹe�C�!���3�u]a5�uA֪cI���w캧�}
+�\��B@�dx�K3��8j�����
+�ߜ�l4�,lK���ƍ����>�Sa4��!��X��ժЅ�X���KC}�M���op�R��(C�f���c_S�զimj��>�mY�eE����x�?)" ��P*1<<6ϕB�NƧ�W�uxi���O�0�)�)W���A�R�xiZ=e!���<��Jq�o�3�t6�&�UII.7Nww7���(�B�D��rI.`�N��Gmmݢ[��.h�I�Ӳ�������+v]^�k�b�+@-�c[����6�|]�j�ZO��*n�ra D-�?$ܔ������5ؖ`�8�6'h�uPRL������N��?z�gba��׉k��J%hom������Q��hc(����|������Csc#ۚq]�`l<���8��]}����
#���^"�"�*.B��C���n�N��$P	�RR]ڢ��(���0����тϙ�	���H"f��AYc\�ti���T���s5�q�����{�J���FY(���vݱc��}ͧN�;|����]-b���[��:����m۱��bku����cI8~5�twH�uԵfAc�Z�Q�G��ְ�9F:�����`��4Wլ嵁jB��8�
��KsSݽ�MD���`
+E
+��l���q6mh����l.��xv����R�c`h�r�����l`9y��tf��nǺ�1�`�j[1�r��D��H�K����SFZ���;��=�<y��А��x��	,k��e����eᄏhjnb��ؓ���斖�۷7V�u�;x]b-X�31yPK�tӗ�*enE��"�7!�oB�N�O��Re1\�x�lB��`��8{:���9Q&j��,����rM&�q�Km����a���S,E�<U�E��>�C��r���Z_O6R�y>��!D��d)I:��<C�:�\������U�A�	D<i��#�.J!l����/[�D�8�75R_�����3�έ���|�
+����$�)�ID�.�	�Tr��RX
b��QJ���no����( gz�gíZJ���o]	� a��s�X��UU�����mi:[b���+um-	�a�r����RQ[�$s��Mq����ᱨU�I���%��Q���&Ԙ0$J\������<�ձ"�z���\	{j7�E�5���*�(k�gI!PK6�o�)r�y����R�]\q��7����������������a�Uk����m۶a��W^�i��h'�a5��
+ׂ�:�,��pT�'���gM52m�P�
+ϰ���[}.����`O�VW��;�J���mq�ޚbSC�R�C3_m�ڂ�H]@�x�jOhnc�e)Z���]�5)�z�)˓�Z�TE�F!!@c�ae�JIM�:�f���|���2�.a��E��Q�U$ը�3�.᰽���L�+C�b���:c�.#�1� $[�����AX²'�8��g��{�9��r��%� �q��(~�I-Z<�������*��!
+{ȼ���c]"j���]͍��K}�6]�ݜ�y�Wq������f�zj�1ɾ�voJМ���z,u���
+�X�8f�K
+c�f�d���jj�\����X�R�\��9��T�ۄ8��mYX�䲿>��ѫ�`�\�ƀG�ӕ�嫋�r�z>��ܽ���B�?{����e\{�V]��gw���N|_s��??r�3=#8�-���ԴF.+!���C9�3�ͅ����O��
+�5�d�{�u����+{�\.�[���V�b��ZM��䧞��c�IٰZZ�Y�6��1���1�Y?z�2����kllO��-I"&�5���$�.c��u��&#����&\��JW/C#�a8o�1�0�J7��8U�|�k�����tE�� &-�X�˷g�昷���䧞�I�9�ּv���,;���xl�0��d�zKՄ��W]1ۢ{h���Ed���׎���ƶm�������j�9�]'O��}`���%�Y����O<����USY�Fñk><��`[S�f.s]��Fn6�\c�JL:�]��ZÖ��~�3���'��1|��V�
+�A!�uib1���p�����c���\��R�V���G���ט(x��dEUɎ����A�k)��d�5�µ�H5��j� �}</�������r���*�
+�"̏�'��qq���X�Ͷ]{��J)�j'7���G�r�J��@��ĺ�a5E�o(�Lm҉���'�kE˪AMh`\s�R����oPW�)t?��b���� ��ݵ1�����ښ@��r��HdpJ}��IY�0$���s�:7�p]��b_��� QRP�N�)�|�..e�KgJ+r��U����s�5���d�
+B�j�A�����:H*f3<�獋}Lʳv�	��쇔�pRta�A��D.a@i�<A,,�R�0+�jL�����3�/���?EwxmB)E&3A__�8�_��r[���K ��[�}t��V-X
H���ƅ������Т���a�c�>��Q��Hq��4u)?X/��PX�n�
+���՞͒�!�m�e�F,��x��B�|����
+I�SX��7�����A%�,�D
�I���D�
��8w��s�g�lɟ��ɖ<�P#�׎����8����2o]����!�u4�;��䵡2�� �5�)�
uQ+��l���<��hm��!"�d��R7���1���P5|��_zv�FXq�U"�E����k��
+��uy���ع����+I�Ԥ���"n>DĚ����}���n�.H"����o�cC�عZGWVfu��̥��֕�z��,����P�2~`�OYܳ��]��$c~�gg�� ��D�ԃ�
�9M�E{���()ٴ�
����kK�3����c���q�k����]���j�T�
+�hE��\ᡤ�]������6���e����1�k�/�1��w�Rhc8|���t���u�X�oO^��Q65�(z5q���$c�H�C�

)��w�s���Φ00Q�L�(o^짭6�֖4�����:��@�0�~��ƒ��v�����Pk��=^>��X!��.�ΈRV#�@��38�fMtܼc�D��z��[���&�/��At�����*����ԩS/=z�Mnt�[�]+�KЍ5������_pmVōYM�΄�P�B�9����o)�_`X�@j�6��cOG
�]��Ba���ϝ���$b-�7Z���p	�FI���F��p��l�G
+�:*߰,�=�_��"W���eE��N��~���CH��`1�b�X�|�8e/j+f+Ɂ�f�����G�c�6|��x��0!�>v��u)�oo$��G�~����PC�X���'�
UJ�4muI>��>~��V6ԥ&�s%%%/��]lnL�oS�V\���p�k��9�+�[	ٵ��{� ��h�d��7�<����T:-��Ue_;�	��Rh9��V�����Z��)m�P�� �IDAT��\Z/ߙ�:�q���GsK+An���9������(
+=z��˗.��z�=�����`��cJ>��a�f����Ũ��u�H� �Y��w��XŔ��7kk]��vֳ�5�\I�5���&G"�|z?�]��"7��A	�a�ڃ��ư9�(��ʄH��AK�P1��X�K����%D<��U�i�v��Z�=>ƿi?L{C
����dB.
M�K��u.L�X�
u)�����W��=2E��9'_����=ݹ��m�|�Gs�:�re�T�L��Q��Y����t�/>��O?���
pm�B8��c���N�P�/�H/ [�b�s݆�J~�����s8��L��a|��+��ߝ�o"�r�~c0�K���G0�4�C�F�b)����_��69�a�=3�"���D	��"z�H��0I������b��d��Z$ө�m�'�}��������fm�Y�b�+�Z}-��R���܇v|<a�*�x������EB�+q��s������))iZ�]��HgK� ��
��VBa�IM��x󓈵L�B��/�(g�	d9~�R�e�Y6;��m�R��(F,�rYq�Z�b�q��L�%�-�<��Ϥ���ɯ}�q�N��6�[�ٻ1�;��d�e�_"�:��F��t,E�h���x�R?'�
�Ў�>jpm�wn�ӏ�I���j޺�K�Xǒ����ٌZ`OSCT��gc�{r�ln��5B
+�w��_�DZ�2H��
+�8�TPDWʛ�6xA�ֆ�T�Ά4��8�5	��-E{c]��*R�������S,{��b�l��X6O�X�������ת���mm�tvnAJ�.D!�Rx^�W^��_?��*^K�[��`W��f�O��ީ�ӑ��1zu�U!�B^?���l�h�^��E����>��{�ܔ��S�a�j���g���E`ձ���[]���#J����4�����t|+0@XY>ahI†�8-i_Y�֕��P���3�X� �$K%W�x�/�������H��1��F:��g�l���A޸8@�X�o��ą��(V9���Q�ܟ>���6%?��J��t�aȶ�4�߱m�x���o_�w_z��zG��������]��IL��lo��vm��wo%�ے�q������+D��-���Eb�>��*M�C�bsk#��پ����6�����tj�8��SR�H)�04��t�˽C�
�12�ch,�X6�1��jV�
��d2���=��k�J��q�|����^{�e�T����nq��u�k�wp*��>|_��z�tp����Q��Lw��l9��Z�Ă��1��P&��[�b<������$�����) Ny���#�5}�5�D(h�,M 3݈�x�2�rD�A���Ƅ���m⹝���;#�v5G�D����"�^侇���5J2^�8�5�~�]j�6=cY�b4W�.�p�����̛�y�g�����HJ.Np�r?�r@�k�-�������8:[�\)8?0�o�x���,�XT�ry8����t4��gsfwPh45��O<|'ww4�!8�5��^~��.[5&��Nn���d$1[�ic#�:�xh�v��ށ�	�J�@o��Y�ɚD�t2�ΎV�<p'��=4���]���͕�a�Ƴ�:ĩ�Ϋ�ZSWW�}�ݏ�,nI����8d2��o}뛿���#�n��:�R�b5%
���ڒ>���_$Է=V(*�����#�:2.nv><���1m����=MlnNL���C�U�#*,�̞���I9�
ւ"��CTn1х������e�j���!e�s�r��$_{��
+���P;����А��C�����s��K��6�_�����Z^|�"�}bo\�����!^�{���������gy�t�����B�'
+dK�MJYBm�qm:k�Z�)z:���D���1�7�)���lk�#�[��4�74D��ָ�Ź�1~��N��;WH�VFj�H�X�1�Khm
�ܳ��g��ͮ͑�[��/�:4���R���F�nh��q��U���]�et"�b+._׍�kם465E�:k�bB ���W_��W_���3�Z�/wlnw��L01[�ݛS:ս���؀T�RYs�R��3]��^��k�sytO#����_Ii���Bycԍb4��@�0�KLz6TI5ۏ���\"��DPQ�zls���x|��^�P�e��-�e/(k�C6ԧx��-h���%[,3�)�֕Aٵ�������|幃\����w�S=#��G�����k��JSv[PB��,8�/*����Be�)�^I�ɕ����*t"�S��(��-�"JO 0F#����ǹc�^x��sJ)���<J����DDf�]}wOwύ� <���xB�DH�(Z%Q��֖זV���zo�O�l�o���[=�NJ\���'�"��q�q0�f�gz����<"b�Ȫ���>����ꪮ�Ȍ�Ȍo�ncwGh�6�a��8�{�i��O��:���MDE��wp�}�!��\�j2���ϼ��O��/^�8�ri�κt�`7�u#NK�d_��=t�?p�a�m�rp�3��q��
?���&^k���5���v�ߙ��i~Н��E\��-_�6��� ��O^�
R��j�c�ڀ�;��lM�k���|�b�(������tΎL�;_}�|����)\��e|�̅�9����3|������rqb��]�?|�i
+Հ�R
o����*a+ �:��cL��ihʍ��tO+�����%�`�T#�]�A���X7���w����)^�!����FH��]v�}�m|���Ӟ'�fOH,����H�:��}�|����/P�"��r�ԍ!<�&	f��f�����>��cg�=�K׵��J�E���!��XW�����/�}Ȳ$�`���k�����]�2���;�j����1t�&x�m݋��C�(�t\�����>��g�BƹQ���S�'�sWw�T���Ԗ��W��Ã7�~�06��jT�yap��_�I�%�(Vxqp�7�$҆��
���	>t�IҞã�9;<��l1{���B-��tk,���[O�rCO�1�i
��dWo8�M�s
+�7������cgy��
��M�{����C���lyf�@W��w︑����t�Ť��B��	*҆㽝�����Ύv��ַ�J%|�]���O�ǯ|�K��~ �ԥث��0`��Rɟx[�m�y��k^���N֘��"�q��
���^�r�6�VC>�r�-��L����!��(%"͹+3|�٫\����)�HQ����~E�.�j�X5ܚT���pwO�Я�C+6@���EO)����o�!��\�/T�ʧ�$f�>�{�"?r�a�=�{�ns�v�db��S�PJi�
�-������;��%�̥������[8}��P�u�"�8<ui���ʳ<sik�Q���8��co�'�FoaA_k8��Go;�s���P'w�`�%�4��9>p��<x�=��Mo��vp�ո��o��o>���|��B1N��ܮ�!��*X�xo��=ҕ��ﶮ��	��LΆ<y���삆u�’M��do���ގԂ����Z�@kC-�*>ϟ����TC�T�ٱ��������w��u�!�� $� &ը��|KKR��o�b��1^B�IgCUja��':�?vS���B(T|�����)L��x���?xg�^��Q�z�bd��W_���o?F[6�ֆ{N��⻹<U�Ǻ���f4��k_X! �*~�*�����>�fn;܉�$|�	$���&��M�����d��x{+�>�A��C�
+�Ʊ��]��ġ~Hm᳛�J!��'��ҟ~�O����˓\kW���^�ϖI�R
+N�x}��{���{VIA�fx}�L�\cMIsK*�M����2Ɛ�$����
}�z}����$D=�O��]�JՀ�s|�������ӯ�R�c'3)�D�_����Zy�� �̚8F�:W��cVKl���3�Gnm�'a	��{�Zk	��U�����Ozt�S�RF��Ώ���$�6��+)@�X� �ͽ��.4^���'����P�C)q��p{�{O�q�}�ȡM�Oؑ�}H�lѻ��JJ������w�pu:N}��\>x�I~����%�
?G�����7fxױ,��+��!�
sW�����}�{����?�֋/�0@lW]�	�!�.�n�B��T�~�7i���'�w-�^�W��B���b0lrwz�-ƀR�ۏ�r�PG	�9��ˎ@��u����nG�+��
+��)3_�D]/��,�^9�(����qӼ���Ke1�.�TB@ ��q�}p&�'Vx�
y����T=;��H�.����|���z֠\����ݼ�h�����㔃���+�"�j���@L�P���]t%�4JЕ���ֵQ�#)�y�?��{'���p�j�7_��5˭��$<�j-��(>~hj��(����x	���DW.��$��W��|�W��k؉��3]��m	�s�C�z��xM��~JS�|/*�[J�5��+��o���}�̙\�����
+^ȴt�;}����^�+)(W4�G��a�n�n����ZkQBp��vn;֎��6����h���5X�j��D����SE�KA}�7D�d�J
+�iT,�Яrᙯ�����]��q=���W!�&"��
+�y\g�jXX9O�c'S\��T,�u��B@�5�b����^���,O]�;g�6N�X��1���ER��?��>��E�5L�L����D)����)~�O�t�6L�/�����G���/���i�|�]�$(UC^����)�g�k�"��T�+�p���߿�s�'1�0[��2U�uJ�y��uv������9J
+��5ҞC9X�~��d���.���G}ꯛ$Dyr�����R���KM����ȑ���g�Tfs���J�<vc�^i_mx���g�p��_�������WDa���>�@*ɥ�2_��Q��ԯ%��c�54T��x����d<�Id@,U�-�Ȓ�K~_�}��*Ob�^Ŋ���_,۠����my{Q_e#�"��t���e'J�}�PF� ���E��FK�{��`-VkR�����q����1�B9�j��3߁�D.�B*�޷B��Q-���e�1�q��D�Xkci2�p���{�]�8>;�9)��Ԃ����~+]1��z��cY�j�����P�?�����Hp,'��t�1�'��	�le'�H���Q�����}��	?�	b ��͑�_|vf�y�u���V����u��^ro(v�����>���?)�^��k;�nc��T��R�+�j~������_�g���w��$���Ʋz-����B���*sy���T�R-"�~�ѺN���q�U�J�E��
+��/}�/@HN��u�ufI!�:",LU
+XR���	"�AJ�/a����W�ʜa��M�	�CܺMt-�z��Fە�Nj�x����5��H���jѨ�*���ܺrTnVc��X������%‘���V�����
��
+����B��b{�eG�V� �"� $��n��R�Z��S@��/b�f��i�����g���K�s�\j�~��3r�m����/s�3y�ƾ�O���]�U���wO�9�ׇ
+8r����q^��K*���{�i�`���a7� T�eh���
+W�+�!�0&S�@
+�t��h��8��g�wMV)�J����~!$'��ja!$:��Oս�%QQ��#�"���qv�#yBm��/��
+����]-��p^])Ě��e��5 ��7q����[�����wv��E.��nP�Q-�";�=��0"�0�s7�R*���g���+��b<+Zk��F]�ly�O����-��,�F�7K��mc]����s�sG�HkΦu�5����T��b���:�p�{Y�#;;��X<%y�M]����)�BJV0U8?T��d��JD����:V�I�s�WҪc�X��z^�݊��.�K�T��#�@r��{Qnb{�*6�g�h$�ĵ0��"Q��҂��Iha�֤�v�W�
5�kb~�a��'x�Q�����,�5���eM7!b�|m
Q��Vjxygu!@*̕K��_��z|<o��F������|�5{�+��w0z���L*��$�v�XW㻥�jo:�~��;zR���4��+-�$��V�0T�Ul@��%�%�X%8u��S��p�80qr�E,yBmy}�ƅ�*�s�r-N^ �"�p��_��e��g�m�M���t��y��/���>��n�\�j�0��퍟�Tr�JEd�-��)�{��niSt�$E����!��Q����.��2Va�w���A�U��������y��J�F:ݤ�T ���?�	������2@�������j�K��̾�b��2�X��#�݋p��w�G�R�O����V8DH%�-�\)ƪ�
-�wh���n��j�����$=��=����i87Z�Ҹ�t1b��	"�#��,��5v�f���㵖6a�oK.	+�}�H�Ji�W�2A�ʩ�މ�ʠ7y�	!1A�`v$��J��_���s��a@6�C*�'�a�gyO��H��S�z��zqXZ
;�}I�U�a�EӍ���$��z��:\��/�%�׿��x�pv��N��s����k�ݕٹ)��j�@��w�XW��J�Ζ����Z��S֋j�	 �dl&�V=�d᳂�v��i�!�Jp�͇�4�6���R��Ū��H�Kcs�]�4�lT�Z2��H���r2�%�U/Ί�V�f�W9TK����27��}�s�D�&n@!1:$(L/�9�6�()
+DaH6�#�H���`-��+ڒ��:7'���ᬤ?#q� �~�q����2;ˆ�Pa����/�"M���R�����y��}��o��4x���U�(:�x��~�b{��OԂ��V+��hL�+%ӕ6��b���l���D{��o�zp/��R	�
+�F�A@•� Ell�X<Gr�
��w�0ב����P������*)%	O��uH��AV�X���6�8=)/E�Z��Kߣ�W��m��ً�
���Zy�^�U��r�(Ig�d2�.��@�d��p����6^$�����zy�B�u
����*���i��1���TK���|��o>�y��8IJ"�a�[(���>�I�ƙ|�£��S,��jNL�
�6��6j��ɛo�M�/��BJ�'�\��S쀺d�{�&b�$ݱ�Vn<�އ{&��@-��֜���*���s�&���Io��/:%���Zp�>P}䛄/������gص�q��U]+՝C6�륪a�	��L6K"��5�kd�3%ȹ�Ȳa�ؿ����z*�Z��a���{%�7�5j�FQ��t#0R�!��9�G����H$�]��j�Y8���#�����W^���ʵ�VX_�=��	b]O
,�іO:o>�;�N۴�#5�P�E�Δ��IOnaHv`��Kw[��N���p�wd�sq�p~\si�0[�ˍ%��#�
�d��^񓑒�B�C$'_�:x�g�!��w�+!��O��j��<�}�����p�D��YR��R;N�ȸ�9����I]�<W��S$ҙ�����b�y��7��eڑR���j��9���N~��o�_C��[��BE!o���M�������?����7S_W*�R�;Nt��{k�;1[���YW1<V���<^��	V~����k�GF�K'��t]m����*�)Y^5�:j�*��y2��[f㤷���n����D��c���
+���?�]ܙ)���8�[���^k&�n搋=\"�FQ�J�H�R(�v�8��{F{�#4�j�J�5�d2I2��q]�'؆
����$�
+�,x����ҪTX�C�
�~��؇���Hn��Z���D�g�w�>��j��0l�S�u��������R�����X
+�����3�
+)���y%��Nm��/vpɍG;8��^/�̖W{�
WA-����F-W�-~$��$W���˴��{~�gta-F)D:���:�����F��~�H�<��U�o����Xc(�J��i�'�N�%���L�R���@C�5A}lj��d�K�&�8��!��k	|�0q���@^;�7Hr���j5�_�"��(�y�{x��"깧bI��&�� �IDAT�u�6�����a�2޿|�����S/��翲��u�q�K� Z����x�D6k�7>��U
�sqdOY�P���V�f��&�L���q��9n9��	�V��Qa������0Wx� �4No5��fX�D��f/0Jrxp�c���zI]N��Q�����O�\�D�G?N�5�p�BĉR��b��_��L�I��$����[����b����,�����U��j�K�H&�<�u�m6�g���A��w�5A�!QԵ �l7�!�iE�Z���ݔR�j
��`	��8����}�k����TfGn,c-�83� ���h��AG�_��]��_Z������P	o�X��WW¼���{o�|F/Dsn�0�l-�j��t���2)Wԝ�6��m��FHy�v�ִ�S�qC�t�W���B��/M�W��@���O���]e��i��ܣӷ�Rt�Nr����jm9��1T�Z�w�I4>B�O��ދ�މ�4T�vGb��D=��G2��K&Hx�q6M���d�R
+-9���c׈A
�����*~��r����8q>k�JJD]�[:V��;A]�-�?��ZE:�L	a��w�㠤���U�Bj5�j��1�Q$S�8�|�oPD�Je�(Bd3P���}�G����#P�bӛ�����5h+HJ�'xg"��ណ�~����_�-
��.U»� b���z${���̃[Wo�J%�,su��+�i�6#�n�_Z��⦣��nE��R�)O�~�5x}B��U�L9vZZH+V��Il��X�m�Ř������eL�8��1ԴA(�H���=����\�D�?I��[!B!��ەV�pA�T\R�^"�㺸�K��C���C)�~·,0HB)q�agAR�"*Q�-�P��W'X��� �BH����dBR�u�c0����ĵe1&&S�1ZFQEvIliC�B�W���z�Ak�ZS*�	�8�X@i2���ÐJ�F $�q��/�<�=�Ǿ��|�zqj���km|cV��@RA�O�?�\G���>˫��ā����H���wI�gi���f�!W&�N�Iɷ㠴l��Y�j�;۸�X��LW�ӂ���0�<"��hc���d��'�J�+9����"F
+�IN�jY[��d6�.���'��?G�G?N��{P�V�|��c���	8
+C�a���D2V�
�H)��4�����و���0O���0�\(+�od��ڤ�*Yk�j��f�EJ�@�c�@9j]bպN����Rkaa�Y<.��t3H�g�¯\�.H��vA`���B��Դ��jf
+��3��|u��4v���	!T��s@ ���֏��u!�����RC%�k������v�u-5pc�a�:���֛Zo�'�i)�R��\t�7��[�qX�$"�io�p��n�I/�V��K�Ggp���Y�v	���������d��
��=1;+-q�@`-Em��
+G�"\����Wh��ϐ����vv#SY�*��;����Zj�
+�r������|�	|)
+^�0�V�Z�?��"�_.�-�	Li�����56����E�#M�/7�$T�X�]�aQ��c��q#3Xh$S���gp�~��o#�fb��].$!���"CQ[rJA=�nϻ�=��30�o�*�Fb�f�ہ���v���hǝG���#47Sn�Q��04Q�S�͠�͎�1Ǒ����Xo�|����S�Ԁe����.;Օ��J���m��:m��y�m��VJ������BXs
���
�Y�l��T�hr����/�μH��e	�Z�mf���".6��|��i�55k��D�Y���ՍA�'M�e�ޤF	��k�I������(%��x酰�J��L�]�RX/�(��^�y�	��~
9>��M6I����'�T�����DB���������㋃_��rg���:����K�}-��瘍��-�siV��������ʤ��nMگ�K�5���9u�s�^J@-�����/B�fm�	;����ѐ��T��MDk��������<���I�Ѣ�5�
���k��oS9����q��Eo�=²	��$�\��W$ڂ�CU��Ѹ�ߞNpS6�p*B��ge"��u���D�|��/�_�EB-QC�Q�����7PW."��H)�o��
�N�С���zοx������S�\��t�U»n#�:�	��#ɣN�w�H
���JIF��*n�4�v�	h�I�<N�w�њ%�v_��q�Y%�
/���v.��v��k�]�
+� �M]�ō�i���pt`��5�
+K�+U�kA�硧�(~�oI;?�s��8�u��
+�xf>�D qŁ�S�4��W��J=�mH�{km�<�%���MF�r��H���P)�\D
��<����Q���j��5�?�AZJf���
�J!��[\y�?�n���*�~u�Z+�I�R%��+��}u٪�������z�E5��n���`x���\�nk��Qwf�G{�8�۾����V�N��]1D��d�#�տ�p�]i�T�������ʘk<�v�R3��!\[��?�,����/��Q+�8[vxbZ1�j���������LıT�^Y��B��HaS�q�m��=��c�3��q�k/�>�
��帡T��Ó��Դ�� ��8+S�Ń�p��'~�•φ�j�f������8֕����]y�M�l<�f�WH
+(����(�m��p׿i��/��t���p�w l�
I��ËWcR����QzM�Қ6�kK����in<7�F˼!���bdײ��!�P������w�њ����*#��x�Ѫēnn�.�x^)8<6���!�,��?�k"�X%^:C�h�i!!
+az59��ԣ8�Q��"@�C��(�����#���XAB"�[ߧį?����c�S\�n��Ժ�6)OɣΑdR�I��R��:��dW�M{o���J
+������z0HU,U�j��hÊ�b���V��ni�jk�@iC��7��ڔT�ᬤ��9�����H�t��}��!�[rU"+��d��
+.���0�m@?_OЗԼ��?�*�8��a��THP��Y���0�|q�5�#R��O��ë�k�XJZ�:N��5�Î9�����~e��K��Z��R[����\W�X+%Ӧ���������G�Z�[u���'��ׇ��s�v��"MoW+��<L>�\���й����o���LSc�以�-���{%�
+^����m,RX�A�4��7��Jەh��]�mL�:&��C��*Ďm��n	B@���3$���Ӆͤ맳���q���f�M2*���l��0Pt����N��,n"A���ZUP|�,��}������'�&��Ð���EƉ�A���J���ĥ4-��+�5�D�����l�(�ZqOcv:��񲧏���Ӗ�7�u��	g��J
+��T��by�=[���i��#w �U%����]	1f+��W�u�r�䲱v��:ˍ��iV%����Z����9-ܳ��aHxߛ�]�ߥ3��TONj>�z�	�I�2��b,��{<�5+To��%�Ah��B���#���
���\�E:�l��%F��/����Q:�*�0@�|cp� �$I%9��
O�*NQ5�2R�U‘�~)��Ӈ:�������A��Kx;�����$`������m�Y�w}!�8�gϏsap
+%��o�""�9���m���܅s�/�U	���H�ӗ�^J��-�nP*]��5��ŗ���߱n<?K�k�j!�Dvg'������`rzu�
+��--�;nǒ"�슆G�
�z�D��"?&r� �ҹf밀��D[���6��EI�$ր4^B����*��`�> ��ĝ�:�T�1�"h�L��꜡%!9��H���%�@"�Ǚ�a���?4Q����}��o,��(YW�i�׆���f�lhq蘈�Y #D�+�������Z�`���j�?{���җ��đΔ������#黣=�0���aƧ�p�����`mL������N"�^��*E,Q�>�y򂏯�Ip�H����6A�P�
+P��;:���xk�Ck)hC���*��#�;��CS��*�U��a��,&���S�$�
6i��d��7\���e͗���,�����XZ	cG!VV9�d�H��+5	�TI'$���_���
+'�N���j�9��s�5DXCiR*�So�X"�m�X�_�V�a-��S,�
+��+8�����%Xx��|�—�E��E����,�T��Rrm���֯���P񽬬�Sp�ko�}a��b�M�V�lV�։,,��}w����-wm0G�6 ���x�B���c=�6������l��d�X��2����`�޿�����|e��4�#��2��M��QD`v橳īϬ�Ȩ&�������I^B�:Ax�혞��I�.�<&��rĆFY0	���<<2\���,�k
Vl��UUD2�t��l���%,	��K�s[~�S�)Nd�8���'��m3�T�a�XR�yS:nj�bV�DŽ�W�\^��83��H�42|�i��S+b�����į����F�8����gm��`��7�B��S���_ze�xb/��Z�J�ե���%�NJE�D��K�J�$��J�ʳݝ_����y�n����n�W��Nı^�:ٛ{k[�{c���]H!8wu�ɹ
+�ھ�`����๊���t�d	�`�G02���>�Am;��*����Ə��R7og� �G�2�ѫ���J�)���H����R�U���mS���R`�T�y�5��+�;;Nǽ�Fd>�]�<4����&C�'���u�A�HGx&�F���iܴ�`��-�X/�L����Ibuo<+Jy�s�����M�v*"!C\7���i�a�� ��:�W 3��>LK����DDMkf*5^�|k �WZ06^<�]�b�
+�/ǒ���[� \�TT�/ͺ��,�qwK�8㽙���xbh��׾K��e�1%�6�K�W��XMV)�������X��Ml�qf�Nu�|[��ziR}l��3�ڭ;ǺT%l����	�4�̫B����%�($��]&m�z;9�Ѳ��׃���g.֘*��U`gIoc�d�%�f#�rlp��Wg�$U�&�N��
+$�$�$�k�jB���a���3�T.�+r�dW�0K�4Oe~k"���Y����u"�4Y�8���hˌ��P�"'VWzik,ֆ��(�	��X�
j�(@��:������"�K������^�/=O�WE��IÂ	h���FkW, ���^�̝�N;*}2u�%�������D<p��G�k���_��K�r��c��o%b)��
|h�G�DS�T$���buz=�3���E�h5��;5�D�z�Bժ��h4��PՀ���Sy�Y��9,vˤ�����M�x�hH�i��M6�A/i�Wϝ���N���'����_��R�WX�?+w�/�I�`��!���X�G(Ö˯n�B08Q�P�q�N?���/�V=�A{>C����JBٷ��10�W��(�p��-����dJ>'���;VX�T󑦶XÖ���R8b�=�'钲���R=<��#}�t�HRkj���E)������zt�rxXn�,G�IF��<1\��#%Ja���B(��b��	�h�a�K4�Ut �)���JId'���_��'��hf��D� ��H�T�I��'QA7��-.��f���$�p�I�	D�f��Tw\Zz�$��Μ�G��uk�!������d:���r�,�gkOx��7A�W�H� /��U"^x�X��ȂŢ�H�Z2�z�/rez��)Ӓ�����&R ��W��|=1�.W�Bl��������X
+��>�M�АZe\+����
-N���j�C��^��~�[Cc/�0l8�,���$�=�Z7C�����N�����t�'{Q�j6;�}B.��1W�c/�=R*c8��Aw{~O����F}^�Rw�[5��V�|�©K�tN��ƮJ��ƒjm�7���~�:��5�[KM[L#�p��)�Q�Iz���F�KW�0��Q��365K{K��БrhO:��]�����H���*�T�������K0"�%��z&&au����/�,-)�G�=�?��1��E��P�Hi	"��^L�����s�.|��y�[z�\�1`u[8ի�x�O s����^���0�GjW���-�[&y�+�N�t%\��yfu�@[�d��ƥZ��Z�M �$B� ���-�H�$M��`����=�疮W2:^�ʔ�+$:��ք%�l|�ר��b��]J�"�l34Jxa�h|[,���x�����	���ykЊ�{�اA����^���
��sk�#
+�m������L�L���u��l_T�[����e�O�dߖO���f���Β�	AQ����.�t�u$�V�D��'7G����}����ivϬuћ-��igW�[��F�׼�����2'/��9S�Ց�I�u���N���kD6�9������$��pb�hv&��6��s$7�Ea�:��`��X�0[(�֒�Xt���dL��s.���D�GK����_�����Gd�F�iޖ}����[�_�+Q$Ћ�7��RI�G[87��*�0������w��Jo
+D��^@ 2'-o�7��׀�@'1��⤛e�ٗ����p(�U�X����1�gB��Z�Z��i�HL�E���R�����|��nA(��K�K$�9�M]+s�-��g��+Eo�%�9\�bpd�0҄BP�����ݭY�t�p�vr4�Z6�0_�Tk�B39��/b�5��Ѕ6�q�*K��x�j)�}Erj35�B�	CP�P�4�+pD�5�+�����G>�'C�_��J�]^��f��yqS"!<�J��ma�e\�,Q��1P{k-=9:Z2����̆|�b��J�jS[�Z���uۉv+�_�]�$�&J�pi�\)�=VW�Tw�Tv��#H�7��q�K�4}��RS��ģm��p��~q�R	G)� `tr��|!łj��`��.}Y�;�R�4Y�ѫeF�J�P|B[I�8�:�M_�No�c�'{����$µ�H�9�L�a����,�c�#��
+i%�3>~�!�������9��8�/O�gP�†f]Oym�ע��ǩ��Pѷ'k��$(��R�I��cΦ��s%jcL�0v0e2�$&^hX�Pn]�� D�L��I�⅌�p��=��;&Ԥ!�)pud� ��GZ#�$]=]��氙�ZB�L�ԣ�$_z��Hc��[��D*��J!�{[έA`%W�I��!������N��B:�fnqB�E��d�7�t�}�;�S/����TU�Z�w�d7J�+g����z�5uco�O�K^n	u;6�f)�}�xoQd8��I[>K���%�͙+F��x��PE��H�kl�)g���Y+A�ѡ"'�̑��X!���촤�R���xb�Jk�ZKE�]�ʱ`�%l���`ą<��ı~�����
+hc)�����������ƒv%�u���{�֙b`�癱�LGrGb�����㈚�K���|��!ڕ�uG���(i������.#�#��S>�����S�L�	u�$@� �"]-.w���;�+��UnHLX���p���$��"0��6�F[d�6YA2�#�
+�M�9��dt�1��R���n�j�ƈm!r�(
+�B�Z�pc�KO���#-��;�
�I2�$І�
+j5���)
+�
+J)�ָ�Cg'=�m�G���EP(�/
�ِ�*����B
+�rω��+��:1��W?R�IA`m�5c�L�EJA�_��l{�{yf��ǣp���땗�U�du�u�S�{2��gk-�b	?I�{��ZKK.EW[�UD��k�kΏT9?R���Ľc��ư�NH�3R�����LJ
+$��*�����i�m��	i�HI�#ؖ��@������D�Ϣ�d2���a�%�Nq��Q��\�4���O�Ғ�.l���Dƒr$o��r���;Z�z�D���87x3�d��(":����R�b0֡*zbӬ��e��p���Zrx�w�ԗ/3:>�&�hA�� �IDAT�q�L��n�9�6(%���{~����G�ԍ�J����}�����RZr=�yS� 0v��]_�$E�a�Gbq=M`�:ˬM3�SL�Wu��v.D]\�:�m�(a�ċ��X���7�fxSo�[:�d=E`,�(�⦵fx|��鹅���yu��֚#��0��KE�;�Zm%��bQ:��@f$WK��))%��˾/׽�=)��=6��G�ȟ]��B�Vfc^»J��I�T,�q�/��l�9e�Ʈ������Թ��&g+����A��Xn8�E{>�o�V%���`� ���.���5�n�¢�$]
9v�@�h72�j�N�[vKl�I)I�.���ӥ��lVI�/�T��Z
�����F���hM*����^J�9F'f�+�(W�dҩ�+"r�2��y�*x�nzk4�u)��M2"�m��c��L�n��Y� @'$%��<��|�'"�]�GkHy!�>
+!��\+sy��k��|>���+��%X�-��-�����KiYM�]=
�t=�"@պ,��B%'^���4�Q�	�gu;��n.�m�G9����I��Nrc�GG�E�	u�2&�g����iuw���B&����Z���t"�;$]�@hcAB��+^@	�by����&�,h*�p&��v�>����l68�as]�Pw�\�� b����ے	���}]��ko!�}���P	����k-��K_g��G�=��s�`b.���3E�N�+~'Ho<�����*G�J�LVQڢ��L5���1��R�jC�LJAJū`��l�+�Xцh)Z������AGW��YkI���?Dj�
+EFƧ8}�0B���
+�EFe��s$�_�+_�-#�2�P�a٣m�Mi�9�m&�b�N��.����>Xᙳ3�OU����r��ِ��5<)��#E��V���G���'����]@
+�G��q1��U������\�dKD����7� ��pI��$!'�ind��L�CQ+�:τ�$�v�[������
+jQK�#GI��\'Қý]�l�%��uT\p�Y���f�ɩq� �%���p��|,��@JJJ+�X�ڐU�GwW���3m�yv��#Q8N�n�s�\%�bݐ}����{���ҲU�w)PR0>=O���D�u�ɦ���P#˫Ce�N�b�<ثbgHv��]�V]��;^��P�����m-R��TCk7U��qtW@J)RR,L;9��5T��ÛN=B`*eL��ڬ�6&�l:ɉ��\�b�������L:��.V88�q��xŋx�˸�A�5���d�LJt<��&Zq|�A��;0N������λ���rn��ן�`t����Lg�����Z��J\G��s�C��ݝ&�q��o��\��+�;�����g0��AT\�+��h��;RQ�!���i.'|��F�K��˽Dy��j���Ta�+]��(��\�uGz���h%�L��Y�����U������KQZ�\���CRʅҏKQ�geJHA�ED?񡞎�����o�j�gU�!�kLFu,��x����G:S}{qC�5����m�~�p�P;�t�%��-��HkJ��Ǣ��q��ҕm����o,&�tEc�h�w%�s����\w�(�6$QOJ�q��ʄ�;����׬
+!0a''Xcb�&^(��2�<�Ǖ�	��>�J�6�7�*^�����?�Eb��D���҉I�Z�5
�E�n��g�M�,ɮ��߹73��j���{zv�v� )bA��(R���(��J�7}�G���r�Î�#a�ÒlJ����LI	���3�LO��R����̼����W��jy�U��O��W/_������S{*|Z�j���s�<��/��]��k���\95���ScT��yk��[�2�s�u{�J����W�y�㏾y����m>��Yb��ڿ�Y�$*�)����#ǐk�r�
+�w��&
yW�"�ÚU/�Uα�*Qm���*�Z)��t�v���U��s�Ј��G�Lx�7����葉 JS~y���~�i��'�����ڮkp�!��x�[��K�?Q���ZK�8l|�k3Kt����An���C�u��H������E�;!�1�=���|��$4x���v���].��g[�~a��	9ˎ�ASvȽ+A�T��Jf5�:�%_��:��0�|~���lCL�U1j?�{���שu��,���ۨ���N��@�o�XV.a/��ΐWE���;|����RG�B��P�X~�s���O_�l�Wޜ�����j��:�Z��Kj��g.���֭��~�O^��v��Ҩ
+`̐��PLL�e6]��R�{��<EZ>υ�f�*��}��1��۲���<V!,x--›su݇��O�Q2����
JLk]!<�"$��p��~�'�����ߟi�B�k
�گ�qݯ��Ɵ�ҩ����4Gy?��G�ƽe:�k��ϣ����OQ��p#\8l��s|��%�/􉭂�'�{��r�m��"��O�|��������
]-�v��n#��e�f��F�A����M�^���z�b6NP[�����[\l��K����z�ob�̴݆hXfH�,2�a�U���#d�������l嘽�#�O�?u��u��|�'��Lrc�M�q�L��X^|z����4_��Y��қ���MdEpg�u36Έ�
6�ˤ�T�����S��ׯ�֯�U/�Zx}�y4�`Z��`�[��pKU�p���!_�������V���=&
+�HG�V����K8���{~�,��S�_��y��:�����v�#�A���Ưu��g�d�-� 8�i��q��ƣ_9�B)�8?5F��v��]Y�{ﵹ~���ҚM?o�u{Aɀu�ه)�o�h.��T���3�C�:���jn,!wZ�GcP�:O�ua��G�b�Q	�J�oQZ~���k�Z�"�7�K�s�!cF�ӰQ)I������'M���=��GO39UF;y��̈́��x�E���f=�K
����qs���J�wx^:H{4�	-�dKwC�_D���š��,��]t�[d�K�Ǟ#�^$�^"+��ϐ�������kk�Ge`<�Fd�J�rU<���4���v���qY~���0��kM��t�8-�i1A�������^�W�?|�Axd+�t$^�n�u7���\k^��O�:��H	e6Y����azr�ZezU6c3�.�y���n�Ei�V8���ߚ��E���S.�鑤ۋ���t���oS��ao��*�C-+��0��(�v����-��ZK�kŠ&A\������|��ƟPj��J��cY���Z���)#�A��F׻���\Qjq>4O"˥s5�j�k�v�pa�^�]�A��V;�y�����tPH\��J#��}R
+�:�+�;�����u]s�?�ÝWY�dAI��E�����ϓ�.���qq��9���#�'���R��$R���焺�L!S�bds]=/Î6-�LcG�o��$A�0���zN��Ӱ�T�']��n��kח���|���pD�C�A�m4��O~��T�)�`���o�^��wG�N�⡾4=N���� ��_{w��s�x7�b�����&̂S�Kw���MQdK��T�{O�(������$�jQ���(���EU�֐ ᗗW��-!ޑ�ޥ2�2��_��{�V���i�n4~�W!� �p R�?�l��0�͡����@*DQ�w.���H6QV��*���2���;ܺs��U�`�Dz9/\�y
+C_���b��#x�A�����Oa��l�xa�{(�
#�}*�/S��i�2���{��r���ۣ�`�]���1YJ�9-Bd�2�rU2U�>��4��s�q���#̷�kȶḬ	g9�P����L���/g���g;���zP~DD.�*}�˩Q�%�����[�Y~Da�VN8=�(�	�ΰ#\�����6y�W���ư]6j7a��n��"L(��$}�鹜'n���4Hn������8�c�Q��{��Z��xMP��JK�����7�vjb�D��{�^�~�)�|Nj�u��a���4ū��kD��&�hT����"b��$1�z��W���h��
����߾O)��b��ZV;V�+i;Gz��[��6/���Ic�D���B�3�r��vV1
�=wA%i�&����Fs��]�-EP	�q���Tg�Iw�EzcϑM<M.Q ]�|(�
+!�y�Q�e�1EE��bB
+�_h\�>�>Hen5��{���a�;j�x�F��V���
+�=2!$\�w�/��~��v�[�������,��*�5�L�ȏ��y���rI���aV�g�ƨ�����@���ڵ9�[=�u��7�d��ז��m����va[o�U-�⽌�3)F�2�Z�M����_�y�j(ީx��P2a"<jc�v쫄���@M��>�oӸ�Tg���^x�FE����
!�v�UC���62X��[!789�m~������M,�Ƿ�i��5���c����(�k?�����f:!<,!��NYj�tz���>o^_�g&8w*��fXX��8㩖�3���.��B��`WX����ڳG��5�އ>������[���u�FW�cM���/Q}�Mzӟ��O�7-��Q��b�W�f�n���G�hɖ������E�x��W�J;wDq��z;*؉�-��B��c�hX��ʋ�~�3�ʟ�h���O�x����o���N��L�#sn̜3Fq�>�3�}�m)�oUd��r��F:{�I)��Qvظk�[�<X�zP�$1�Wz��骗g����L��+�_���(e�t�2��v��
���P�B��y�e�Q#-&�=C,Q��ۿG��Iܾ���J�w����M(f'��\(Q���IJ�,�x�^L�R�]F7��-�7Ѕ�����|�'���=��7fq�I���/�[��i����B��'���wg���so���Ŕ��?� ��j��'�қ��Wf��x�b�mkn���/F�|�n�>��fÛ;�E1��[x�*X���%F\��ݯPv�f���g>�!R�?�#������G"4�P�J��S��8�L�SV
Yݎ^�}0ƪ��}�-��D���~�_����5Ƿ�����P���@8h�s��'�N]��'�~K���7-0�a�
�����h���r���:Q�*s�c���>��,��gDv/�Z��3<�~/�"`P�x��s\��庥AU(Vž�9��{6��
+$�P1�����>�~j�׽Bm�ʽ��|�н�nS����u��)!����1��=�G��V�@�����|5e������q�\�o�1������sWY���+1��n����g�,w2r�|�S<w�C�:�~�w������|��'��ml}��Ӟ��
+��GsգAX{��T!�>�v%\S,��V)�'�(Gi:�Gt�^i9O#�D�m1U#TM�@t��n�`��*¯�!�a )HL[E��0�t�'6�B�{�/U�_z�^������o\+���}�~%
�1|r��Jr~g���Y.�Ȝc��CCȿ��H�hԌ����ƍ9旺������{;e��s��F�2��<q;g|�o�R��Aw�f�k$<��s(I W��~x(a�� ��]�}�v�1	%+N#��}|�GuJw����$�Ө+�V1���^�lD���h�G�5�?}��w���߿��s5>���Ԫd���k����!�|g�?��]n�K�����ӷp?��^���D���w�8��o�U\����&�L���@bkV3tH�u�n�F4���pZ�R��A�x�8��[��pm��څ �Z�k�o����B��lQ:��@��yΏU����S������?�C�f0Em4�V��;��t����s��&�i��RqIqޑ�C~uW��(V�LP��i����޽�H?��ü��v�P9�a�&�g@j]��{ʅ{�t�A�*�Z��bL�B�Aۧ�ؚ�U��A;��LZ������"��XKv����1��1L��*����h��t�(�k����Y^{k���˷���6���OL39QƖ���Sc<��8����X�{�?}����'��_�������[8��GS,ӻ����r��V0f]89D���(��D%���=�v>�QзZѤ��ޓ���M�����ƮCGt۹Y	u�qE��u��oT��k�������밎���׺o�'�r7yU�8a>P��F%H$nػs-r�7��G�R��lV�v�^�#�H�&���s�;��F:�殟,V�Q��+w<c˺���4�f�έ���M�1$��+�
+��B�1�}�|���$!̽᫔�V���!�zO��-�j��y��\÷�u�La&>�JL�)qd��~�Y�W��k3��������<����<u�N9	���3��u���.��5��M�}�3��kq����ԦوbPҶe�F	�+ָ-�0B$�x�9��\�р��2�rg���(�µ�ȡ�kCrKW��_Ii;X�G����v%���9OYR����gK��7"�?��s{k�s���Z�3�[yכ>SM�L78-vs��aADȝ���6Y�0#�1�"�6=�$�쑄�+�{s-f.�;��	<,7Ǫ�0�=�p_9_�n�Q����J��1Ԋ�𙓊\��K��@o��_V�`�֡��Y+�1��*Ҝŷ�!&�~��,�51cC�S�r�C��Y�����g��#��kw�����~��g�|��I��p���n.3�\�r��ʏ���?���['�kE1�ɽa~����2�^�B���N�P���jkM-����%���6���X'&���c�|���Q���8�D�`�����XC+wt2b+�D�9�}솊Rd�4P�q��1�i������s����WY/u�1,<��A~�c��Ό�c�bs�#��b�܍�QQB7�sSM��IXDp^y��C:�~᭮N��~�]5��`s��U.߁Z�5l��[���!akf���m�j��6�nj��n%M
+��g�����:���j���ԯ�#M
�k����g���Η�����s�a�?��]T=�s�B����/�͏>ӥ�j"�0�J���~��L��w���O0���;g�7]��<x�3�ͤic�xd����b%���)�5��z�"	:0���(�*+�B�d�j�R
+�˖�5����i#������ ��sG�{z^�m�`�0�*&�9!D�:�!�y���+�iԾuk��eu��8���#i(��5�#ϝ�x��Ly�]����hxz{�����'7Bh���l�43�����*����y�D����!��r�+^���\��`���o�0����I4�k�ih�~PU:Q��-3N琵��ښ�U�G���=�f�x/�;['>7��Qs�D\!���c�$��4~n���=n�����e�fߥa�4�xj:��XN9��6U+a��Zi��=��?��Q�3�~��=�9��=���^�C8g�8cZ��r:j1m����LJC�\����g����Պ_gp�:�+q���0f-Q�Ԍ��P����Pz��mL!����Pc9�8��6��(��ekp��Ң��p�=���<�����������V矫�V��H�K��KNU>G2���gt"�Գ���\:zoU���D�8:Ғ!�=o޸O��NJ�[��r��Y�
+�g��/�C���nHV��6P@�E�*7�{l�S�`���x�5?U�ʬ�q�5��&Xp�&��]7�*�{���,?}y�/<���
���VSW�k�a#��D�u����SW�/���Q!LB�^&��G��>ŗ�>͗�?�[�S,ge2o���0}�
��;kf�_�-y&J=Q&��+�[#J��+�%ɹ�R���v�1��]$!�]���V��\D���O4��B'u5�zΑ�<�����`���QD�y��c��C�e�^!w��N)�G�a"�꟯&���3������XOd�*�
+{4�{U^Z��"���<[1{�{� ��s��[��B�'��D
k���"!�6�����E�s������r�*�hȥ��5\�'4:��Aި���Px�s���@&i���Ȑe~�v���EK��|��n<��� �IDAT�y_��^^gƍ1��m�%S�Ð�-�~��Y�p������n�(��Nwx�T����gNy�1��)�Ć��b��M�Mlz`"�j�Ylr��`�_��)�]����)��괲�y	��H�ن�1�����`JD߇
�`qaQn�qJһ��+J�cҶ9m�\��2-.D�\��3�Ow0��^��+�v��1J3����*�עN���؁�8������,m/��!�нg;!�qJ,`���r���j���{�/k>��߭�֡���AN�͹�@:*�*!�s�~�Ɏf?(�1��S
";"v����7oܣ��c��V�&�:5o8��0��|o^��
������MD��nL�c�焌�:�t�����r;���f6�Wcƍ��+����jI5"-�7��>�bQ")���k�ܲ�Zt�[l�5JV�D�k��Z�!_Cݕ��+B�-��d��sqx��B$����3�{9��L�6��0©/�,J���'��Q��X	9%ɩ���f�����2�f���L�V��,k��ڑ
��dr66:[�����$����Jߍ��
+��3�B�n�?�Y�mj��~x�8��6�/Xk��������8?�t���lMdb����a�il+??{�O��1dt������.��*�}P
Fu�Q�Z*�>��B�������ou���aL�>���.Ne�m�p�0�h��!���N�>���y��=�A�"��>�,]1	�A��S�+��G��un�qn�����V>΂��՘���4&UKOc$�#*Z����"�$�s5,�¤��Op��.M���#��S���)Ig#V<M�|.�m�'k��$�m9M%�D"9%r�&甴��s�.r!��j4�y���=o��;�����zç�@Y�@jd]��Q �B��(��
��btXT��!��y���z�"������x-���-�IL�Z�%G�~�c��E����?����s�[xr�#.�u���Ƒ��������t{��в�[��m�
+ J�k8��2�h�u$�}����U���Q���(k�>�Wj�&��g�n�����̸&KZ��:���t5^�@MA�1��%�u�{�eE�u[yAW�N.���B!i`p�)��3X��nv��dTMJUR�M���OƳ\�s<�Ҵ]p�p�ޠi���6t���F"A��y�C\�wQ��B�Q��B�-݅
&�ǎ��֒dY��$��_�t�����+�7��Z��_w���\�X�ƪx�A-���;迺���}!�9B�0�05Q/:Y�v�%�4��;��Ĺ_��V��[���k�3J��D���Ժ�ȅ��1��$@�~]��8�/��{�iG���4o��\�O�vv���ɢ+���1�M�j�"+FԊ��CQ��cl�`�2@�"�MD����9!��Zz���S5}ƤǤ��T�'��Y�fa�^g0�[,�/mb���t�?�žӠN�X9���QA	����^��=�)���	ѫ_����W��W��ݮ������%Ǻ�#+b���)S�o��_"i�q����ƭ#C	$�e�^�����͝c��<�vp�]6�̍Ĵ��y[%|u)��Ŝ^�4ږ$ީ{lPס�J�v1L`����n�ȟ����_a�WY�U�Z"���ʒ=���cl�P�J�Tu��j�}�\�!��Rz�3,���;�׻�5!�1��"k��̓��a=���R6����IDI�-�����?]�(K���/D�������k7��j�u_���SNJf�f��"fO��=|�B�3�E~Udd^����x�$�F�`�������<+k���6�.l^����#�"�]C�o�
�K]�u���hw���$��~�j�!��S��P�8���{�GE���D%�S�eH�b�j�C�}���x�^��b��q{4��-U	u�m��:�
+t�\�R=�^kTt�I�8zE�Y+0�z���?}�Z����n�Cȵ�OyIU�r�Z�?���V�#$.y�rd8=Qm�Fx{
B��m�/�ޯ	=��?�EQ����\̩��F�PN
�(�#j�u�K�a՝��2ћ�|�iTb}��cCz� Q	S��w�P��eh���O��2[��A��l��`#K$��s�J���B��^]�B��ߙ�ᘃ"�R�
%��Oq��g��wo�B�u�a݉T��x�d'kRma����G���#�T��12R⒈����̒e�r���bP{�3���"��A�"\�Fe�T�Rާ�����
�]A1�o�����倂��DHT4�����9ƇF������PU��X��s��t��8#EU�Ƀ%:B�Ü��{�.�e�ď����k~���r�͊L{�Z��#c>���je[]2�8;�>�Ѳ�a.%�Zy䵲���ܜy��?p�,gBX�ڳ\�[���Δ9=���Bn���uA��CyèO�����d�
����x+��-� Q�$UL�����m�a�:�3�����S�c�=P+����<��"���3���7.�I����S_@W/�J�����l�.�6�سS�L"��a5��q�a .�0
+��5�7*D�h��N=�Xlw����N��9֊x�N��nVx�v�3s1Q.��c�:��@�8���Ά�1N
+T�6Fr��
$�^�4�9��ÃW,B��a�N�{B���Q4�8L$ư=�������gb�;皍Тi��Vb�֒�|�1b'���H2������ݝ�\�W�ĥ��h����i�{3�>� ��V�T�7����|�ӷ�<{���;eN��D.�ǵ��A=?�Z��P*i�J�ٶ����G��@�x�^���"<��"3�P�)`EhXK�Z����Lv��V1X3�(�P�F�B�9���_���42�#��k��t홼d3^3�ao��=@���n:rU�"é�jA"�@/͸�`e{��-�(��f�2֊8�Q�y��P5,x�����W��"')�$2�b��6WG�NW��{�ԻǨ_���AL��1�/|�e�нHk�'.�F	ռ�������5����J��
+�����Iv9��H�QK��M�J�+���j��	�J�/���׮�vʵn�.��t}�`N��+!|0��Wz���Ta����Y/���F�?�{�Z�6���/0�q�^��BL��*���»QE�#�{$2�f	S��%l=A���;\�:�r�|�C��f9&�C1ȅ�@��'�Qjzmدzv�Z!�1�GO�{��ȳ��Y���q�rm�
+�M0ޏ�f�f�׽�����Z�'����a���s������I�ş:{�/���_Rյ��1�7�a��V6Ns��25c@G�+R�~��]����:��+	q4�U�C��2�pS�g�=.�x�Y�=՞!r�r2C��<�
+C�X��2v�L<V&�,��b%��
+�xS���d�w�^N��%�ۢw}���E�oϢ�C"����z��u��G���b�}�b:�nw��o���$i�lD�٤b��f<��	.��E�"�=x���ֺa�3�����$���~`X7�/툵�u�1X#���f�Y����Ü�D��9斺����U)E�Sc�~ᾬ1�i�������+6*̎��7s�-��RD�k��
������15�����2�D�h"�d�F<]�t��m���)�UPp�
�h�L4U���4�6K_�A��3�=��e�A����xO�f������SG2��8�ԣ:��d&b�<�3C��?�k<��*�纸��p�óQ�'����$�!C(���Rx���O|���կ����s~�q�]����h)���~�ғIb�A#XW�p��`�J �<�ӑ��JY�����f�D!<˝.˝pB�n6E\c���)e�����1Ժ�J�gB)3�yQ�(
�Q����ZB4U%j��c	��1��$�Lj��?-���7���d�И+>Ua��%>]e�K���!,,�6�����:��~�j���V�xVM<[a��0̾�c�xz�%�j�u+T��E����?w�qzU2���eE��칗r��kM&E�u���ߜ��߸U�絆t�Q]����K�;5V}ވ�7I`��fHs���>���vU%�㍐_%˹�Ϙy��vd��Qf�rN(�	՞�޵Ժ�zWH�`h���J���D�xj
���+ޥ)GD��^�6�s
�W�I.4�OUC��0�����܃�����2��o��@l* B�G?y�j�e��mKnD$ԛ=�1��ޣn ~���,�x�O^��^�J��aU�j�B��:D��IOp8x�F���[�����Jn
�z�#.�+����ݥVO/b�qe�߁�����Y+����k����_j����M}"B)�4k%\�e6�.;?&D��[�t*o2�B�g�u,��0�&��M������,x�R�$Z��
�}w�����+�J�����S/��R:ߤt�Ar���l��pTMZ|HQ4>q����/�	,�"�����(��
+��X�'P
$�!&BA�b��<Kf�ѕSl�o`�����	C���m�Q
+f�Wb�k���s?�����g������&[��}
+�F�&�}dĭ������T����A�(�:��O�_n!2�1�35wJ�v�ä���)^����:����,�?��;)���C�.�R·�(�E�	�-���S��80x��5�s
�35�uLl�cE�#,QE���W�]_ ����P6>h`��2�;\�7���������jY�c5�4��E�K�T��[C����|c�g�z*�a-�Ѱ�� �����DB�G���d�o�����ð�W�e
v�*O	e\��{���t�}'U	��Fe���,g~�E��ۋB�~	Z��r��x��YF�ʔ��\YD�w�d�[�K=��.���/��~���(<R;���a�%�f��l�H��P�����Cn�'�er�A����P���G�[]���^)�m���1���D8����Xj�Xi���L[!�H�'[(X��*�	��X 2 {���Nj�<���ynr��K�f[޻�Z�m���Φ(*Մƺ?t��ˤP\ZX���_��U����j�}{4"t{9�����t��a߆f�ΙS��A.X��	�*����k�l�')h޵��]�#{�!��|�}vw���oQ�-�Ol��cH!��"�\�
+�x����yf���qG8D�q�����ךؓ�g��(��0?���,P[��3�م���֚�������F������7롫/Q�����jn���Zk���/N���Y�������8�Wʥ2W/^"�֬�6�IW���[���_�k_��摢K��v�T,���"[I̪�ᖓj��{
+>Pՠ�5�-���N^�U0#n.���P��ΏjCv��#�j��؂�S\�f���!1����l��:�U��i_�ƪ���|80��罇�=�z�!�Q��F�^x�����	��-�_c�=�J�+�C�v��h_Uu��x���[z|_��%$gH)�j�f��B��
뱇P���KY�	[��<O?JvV��YKy��8���~Vv����{�J�3����b���XsB�P�����C��j��_8�#�5ɨ�i+��N/x����
+q�QMv�� "�Y��r�<����,&��)��G���	�sMl-.�''3���]�>n�Ok�X�O^���a�n
%���	��!�zR��c��!�z��J�����_j&q�Uf��t��Æ����z���D�Z�a�K��`� �ߨ��[5"���K�C�E�{y��*e��x�H�܇�@(\��|#T(���1?"?&0{x��Z��Ѝ���&�l|��ൈE�XX�;|Σ���w`h�g��a@b����|�e���a�lܥl�3qd�ٱ�9#��a�QP��ig�8�C�4:�N��n?en���(���{*�2g����-u,��SL9B���\6�*�6�~k�z���v ���|/�T`�9M7.?2�U	��]Db��/����>����}ڥ/��2��_`�%Q,ƞ�����,�������
+g�i��Rgd��ὧ\*1=5EEF��:A��R�7BD���z���-�v��"���c{x�C�5�ؼ3����}���d�m�V!t}9ɆB(x?:�MR
a�si�Z^�I��[�z��d=����\52苹���0"�c����s����qdh�0,"8�i�R�l�5�k�U)%	S����2؇�*J����ӣ�ݥu�U�����k;���i
đw&�Ўk�G��WB{��5�6H$�0��D(!���u�}��C� �ȕ����J��ӵ��o���X#S ��R�n|E�,�,����ʁ¡;ADHbK�n�Zɯ.��4�轧R*q�ԩ���q�W��5l-���L�~�m�J��u��s�"�i��=�P�Z��!��תd@O*�	)�����
+B�%�ɺ��a݈-cQ[�"֨����H"�"B�y.�#��0D���0�X"����V�Ȓz6�x�A�Z=q!�QA�x���F��Ǚ�n~y��O0�eH�`7|DJP����@;�<r�I0��6!���B��}?S�ίZ��;k��9t��d�JuT6�d�g�=�vY
+��T��H'א_�Y��lz��S*����ʼn�*����>Ք�[��]�&�
+�c֓wATi��0���!$���,��G �a8��l[~�'�J�۲_�u�6~��@�`'��F0��Y]�~:b�`k�r2zFp�������B�{)P)���^�� ��,a"!B0���
+���u���}�D��:NR�;��ŷ�B�>�w�w{�Z�4�҉+�c�����ͱ0ȳfx�w�%3���V���|��5���G{��D����H]�+�F�X}t�	"B�;���ӡ��a@U)'	��a}����k�zB�ʱ�`�A���
+�XNw����7��_��3ߣoG+��h��iX����e�I�{�Px�F6�_}�0��~�������"f�6\(8I��'O?e��QN�?ZÊ��R2Lz0F�)˝��z�*���r�?r?�x��/��a}D�p(c'���ژ'n���{�w��_���n�5�Ɇ���&�M��Oӏ�G&�(��*��>�����춽���;3ofi?�M��M�g�ݾ�8�*��\<�Z��vz�s�Y�Xj�G�>Wk�j)m�j?�������[k4�7�־t`X�	Ƈn������c{*y�+w8ՙ#31�=|��t��T������@�������K,'�c��V 1�҆k��>�?P� �}��a�����tqi�����v˯jY��^����{(x��h�HGV��,�������VЦ�X�����fP�:�hm�c<D��*&2Ģ��o;T�j�C�������'���r�=˥�P%7��������/�e�&�'Z���E�c~w�
+���C`��l2
+���� kRH�݉K��Q��j�����J4ш��#����N	9��|(A#��D�����4g��=2�%U%�c��یV���ך(Ļ��^�~�zoy{V��zf��@f#�-����r���mB���S��Յ;�mj&O4TQ��$�"(���i'�ccX�`H6>��X�u����@���"�5�xB���U(x�%P��rS�h�F��)s���`BP\*'#�#��4����:�R�D�^�����{JWư�U�Sb�h����K^�x�$bs:�xBb�8�t���,~M;3�f�ܵ�Qs�Ӑ��c8X���S,T�P�O����	���F���X�P[��)6@�r�<��-g�T��`��w H9���a
!�y!
v���D�0�#<�4������8��)^!��Xc(�F۱�D�+��M������{ގ$�O)؋a���tg�~�9�����Χn~�=!�54��1�^��.�\�a�IK�U��s�z�
�~Y���1�FI��g�f���w���0;�,r���ȚD�U]]1��A�Pp�4:��S�;]��U�#K�R>1�"�P~r{�J�
�ޢ�� �IDAT!�u�yV�!/�E^ʍ�L{�3�9�-Ɲڄz��'��ą����?N���-Be����e�+�Ǣ�6{���te�}�@x�J�h�7m�,�ma��ʱn#�R�x�W�;B
��!<�Ԧ�n2C?���SL�w<j��jB�RA�G���GN���}�SG�ىУ5���"䣀�ψ�ee;��xc���3ՙ�o#n��r�u�O_�Fu��3��>q��r�h�9GK`�DZ����?K��߹?�;�wY�c6�M'g�;[L�@Qa�	OPD=:�ds�(YC%�Ս"B�����v��_�E�#?js����/QzbSO�5���j�����aQ@;ȳo(�xw���"~�
g�<�w^�o���pl�C�k(x���4s���[��� ����G8���3"c�~R��ݟ��97ha��A`�E�e8�*�w#����c��FG^�~��饈#���JYJI�C���N��p��1l�w!?t���}JYo�p����
�P�����I\�c�4�b�i��_�*�~��CdRP��iH�*��ĝ�4����Y�A�M��=���b�0(�*%�
+0f
��P(�D�k��M��Ј-���ߞ[�9�Y߻c��\yo��VA��&-��tzِfd�P"Bl
��Z�C�;z+G#��ؽ�E?��\I��T�4�{���9e+��9q��X�t���p���Do	�K^X�w\���'n�Ɨ��ޘccT�u3|p/�kO�:Ʌ�;�����U$"t(�#�T�40��(a��^�m;?sc�s��\�\�r�l����ɺw�w9z�z�
���1�������|���A�q��u�3�Sk�'�$�(^=����0p����HX�~J�;��h&�A
k�R}\j3$4�T_��k��7oS����-��99V/�S�y&�KC�MsQͺ��o���yXG�c
+�$���=$ްu�`�)�&yb�=R����HL��#�S�*��q��5�O��F�����}���d���ݛ{�9�z�y����S-�p$��p)�lM��wn(�=b�偱s�7����vFu�oj�O��tS�2�p��Y�t��������~��&F��ĆZ9��a7Miw����|�p�1F�ǡ��	�:%/S��Y�����2����H�d���F�hJ,6.����"T�.��7\�T@U8ݙ�n�9��̧�mtl������#3XT��8�lu2���8�5���� �`U����%nx}���KoH�g//v�蕇s�X��^��K�^Xz���Z��~�T�~���b�S0d���Z���������ޱr=ֽ��a��6��Z#�����>����`����
+Ae#T��-YB �i�#2�Q<,���e�G�x���iN�I������M��ӈ,��c�fL�<����u*=��ݠ"4{�4�-���;g,�Ϗ�z������3�.�OV�����N���Y��Sɻ�r<��!��lJ1E�����w����T�տ�q����r��*�Io-)��jw��k��Oҋ���9Q�H��N��U�8�-�����7���nu���ge�a��V��ǣ��^�����������x�����FExv4w�)����ّI`�!��S>�8�]P�������/]�����r?"��C�����}�k�0�yj"0`c��e���Xo�~4|�c���o�㷾�o?�Y�QLt��VB�s�sdϢU�{�癭Npy��@#Z	�
+A�l�7߀�L1���7R������oo�����nt=eͿ댫���s/���קE?�ݔB�Ќ"���?����{f犼�n�*[����o$R���{��L7? @�{:��;��`no`�1�QS)��9�;G���ཧ�$4j5���ߠN1�Ə]��r��~�zq���۴էt�o
�`��(�������|NoS�7�$O���Wy��\?�s���G]���q}�
+��<5{�����U
�u�"*�*b-b����g�ͣ$9�����YU}�\=��}�@����a��'���)QH]\{�^[�%z�����+?=S%Y�-Q2�	J�!�o$H��A3������}w]yDķdfuVuUwUOw�
+ӿ��3;�����w��=��5��?~e��h�l��V�ZS��p~����f��~ۃB�G��0�yf��.�ȵmkc�Q;������vΘ��� �
+f�Q&�s�E�%Zjq��vc�Q"�V�`�%V�{��݄v�k9�a��JߜD>2PB�Fhm]N�N�l��@&���@B�	�*`�0�����h�C~?x�Q|��?����m�u�`a-ƇO`f�p׽e�؉��B�B`(`)q��s����?==���r��F�k#�mF�i��s��L�Ud�~I�{.g��6����H��v�-�����'g-/���v�#��2	:�����6�.���P��(�X���d�'*�.�n��Bz�{7@��ߜ�(���R�
+m�ퟳ�+'0I�~)@Dm8�Q�g�!x&�k�m��%e5^3s�\^<pC�J�����<Ѝ���0_8�����n�ؼ�ξ�8��"���Y=��b�����_�uG`s	1�F�j��QG�u������E2�<F����T����bfs�i���ecmܹ&N˺�q�<����*�9Q�R��>��m�p[��#f������&8���^m��^{0���^i`c!
+��z8c�X��h��@$�����C."(����$�$@�p��X�r(���H��m�y["�U�"��%�k"����8�5���B�u�`b�i��R����q���������/P�4���!
�/qIy��l��o�n���"fN�/�Ko�z͒*��`� 2cV_7j�S�&��#�Gb�q/|�b~�kW�/7�vG*��
�k7m,�R�g��M��7~t��?�X)r2�lA�I��Jzm6r�XV��vw�����q�M	r���D����(1aJ��������"JߙF4S����8�N�CٗI�I���2,�#.ʣ.��E�_ '*`����@��V^�P���`[�` �Z�5�g�4���X;�߻R+b����?�_Z��7`j`w̝E�E�Y%r:+���/
+����������\X���f�����VC�kZ/���}��[�u�>F�4��^~ᯫ�7����op��R�������
h$�fvVTC�8Y~�
�����(!�e��e��� l-���m��jv�V%�D��B�M��z��V�cؘ�䠋�k� w�(��"���N���6�76�I:��D��
+
+�A�i.���$(����[��w+ty��N2Q��B�p"��z������z����I����U��b�(f��	w�]��!�v��@�Wp��/}���'�'?9]��
Rj+50�[�L�_��s�`�w����R�I1�8\㨒��!���.N|�ԓ�Vv�-�Jb�,-���}��?y�k��(��d+�T�,܆x���H�ϲA�hؿ�� �DD�h�����0�
� <�nq��0�,X[X_C/VA̰�0>�a�y&�E,���ɔ	�D"&q{Y$�K[�!‘���8Ĉ�B��`�<�%�o���8v'��'� ����3u01058���Q�TW��Ķ;0]��,�V������o=��t&Ц�A�R��������~�?�"Q� E�I�^�*��_���YX`��
+���[����5������gW�ʥE��k
+x N��թ7!٭U-���l<��3��Q2��6c��7�D��� �s�`A�Pk���8�~XÝ�MR�A����I����[kQ6E�+UH�ƈ��
�ՆI�b��A����Bւ�k����n�M2C�*^;�<�zTj���c��c"\����p����ʈEl'�YjO-K�~�������_���2�֦F�f�A[�2[�l��C}?~k���j��4b`J�N������������D����w�N�n�%*��'�s���_�w��·�̬Z��4 k��9����o��?M�l��{����	�5��[���mv�%��0"���a�yŁ��S%���, ve^A8.l����w�W%(V��v,@�`D̨ZF`9���D��މ��c�ƪ�߃���
� `�d�ɡc��?�E�	���J���̻��W*������W|��t���1�����y����C'~���y�aB�2C�-��y����bR�|zݫ"U`k�ڏ�����/\z�[�~��w��/)x�Y����g5^���kٖ�\�Z�%׭2	�b� �BG�|ld0Y��X�/ g!�Bخ��5�?D���l���
��s#��<q�e�������zN��Vtiz5�-��
<�7���Qt脣�?l�Ἁ`A�]��_<"��E`QOS0R]�mK�X�?�H���|��AG�J�(z��:���iMO&�'��r����N/��7�V���Nխ@��j������\�;���t��+ƀ)N	9"�B)���3P�t*�6^��Ih b�X�\�)������{��*���ܿ���nI�U������x1�56�+U����2����c�J�q���H�t9�g��-�ija<�����c�X�Kw��������N)�Ihƍ6�V��D�N�6&�l����9����Bw�F["ہ�ג@�+�I6���@��G��Bbfu�я\z�\����1%��?0���
+?}�DoL& @p�DA��k�XD��D f|����01t�
^�_�M�v�D̉*������<�پC8�:+{�XS{��{��\���]\����RBmjގ
+
�I���>r��Ω����$�aT��~�������ٿ\�t�zR��>:�Q�R�7�q����?��g�?t�?|���1�WZX��Q!����4�Mk\Y2X��*��`62� �Cs6�vRk[�^zrzau���0�䆌�����Ykc���� sɴ�I��������<�{w�|��P�H�p}2�t��E�M��3W�~J��j��@��Mk�2�v5�b����C��h��n�\�@Aum�T\.���/�x&�8��5��C�ozC��œQp2�c�$��P��������nu3�kd�;���l����J+�1>|C�pj�2�Ht�B�𕃇~�G��?~yem%3��JJm���D��?r�G�
+����e���AI��'�������̧�ab�Z�J�|Սm��6����/N��c�7?���G���O|��w�|l𞑂�OILBB�dx-,����מ[��g��yfv�Ʃ΄�ˈ�E����X�e�V���h��^�񞰞>����5��|��ʇ��7�����?"}	ב����2�d��'4�&g
+�>N3#0.��"��c'��m�;t��3�E�t��
+"���ʔ�
+����� (�X�\9�Grħnrթ�;�/n��M2�?@�RJ�Q�Uñ��{�\�������`�M�6	��������O$���v�1S���k�X��/.�~q�Z�:tbO݌`�����T��`�G��U�F��V}O�ժ�/�vb��r4W������gS�#�6o�Қo����3���F�����뙄�Ahé%m�X�nq��̑�ov\��,�Zk/dn���w��=�C�X���
+&A@��X*3B�C0Փ"�I��@iY6135l��fb�A������Ğ���R�������66�ࡾ���b�Z\�b�4���={�#n�ţ�&����R$Ix�([���W�<�GO܋��hGR_���Q����������,���a�$�\3��S	/��^x������\|��(;'�j쩍hJ�7��jt�'����A�J"�z���?�_����S���0LS�5^s�{�v�k�+�%�"!���R8�T
+�,g�5��K����~X������1�GN/��ѯO��p�O��:���1�,`Dg/c]Q�%�t-�#Fݶ����B���4L���T���B�G8r��h�(�[*����M��&<�B$�-≧�7���������Е	���?X�����(8��B%�a%U2��
+�K��QtP]�)�%�)Y���wdgum���c�4|w�<�i�!��>�r�x��������3�͛����/�������{�#�/�`t@��<c��=��G���X;�rX�k��������⍪��e����p;d����k��j9���g/��`_n���?��]�]E_%�J�xa2�Բ �kp���[���>�����
+�?��b-�<OQ	��ad&� ����ӳKk/1�YKlh�P9�||�Ʒ������;%��c����ù��AS�v1y� ����j��`~jy��ي�;e���>8������G4��a��#�a�4�}�UX�C��������D#ځ�-�ƕ�c�<��M~�l?��^A��B���}��Z��g��3����n������#7������h��=8���T�Ň�?�b�\���0�	������u��klnu�v�i��f^c�/͔���C������������ƃ�{�:ν�[߈�8��'	����Wqz�
+��q�/4��d�I��'�dCc&�ȜC��.M-^0�F�	��0��E�0|ȏ�ֶ*ə��J�U�۔�~�\a��7!�zpzBς��+��#��8h�\�=����u��	N	��6#W �A=߽�K�w����ltgh
�R�V��N���1�d�kπ��
����X�
br�|'�UvVBLkn���_?4���Kˋ�]���Y}+
?|bl����u~�N������r��O-~����O�y�!�i`��X/���ڸ�V��
+��߷Z���+����J�>?㟹�x������:~ �c�9���x/?�`�D]�s,P��5�+KQ��lT>=^^*ً9W`fz�����s��fa-#��)І�bmm)�f
[,ť�b��o�J�Y[��d��^^�����)7=B���0�en{��@�+��bGf���{� (BZm��T�9�dQk��kŕq��+L�td�W^��mRh������x��M�?���<%��
+��(��x:\;]!��3�3��1V��l7�#�W�h1x����>����&��L��&�,��6|$o<<���_��/�8�Ÿ|x��?~e�\E��cIvZ�1ڱ�7#�V��!l�f�s\+�oJ���瞘<��'p����Ǐ�x2�ax0Ǯ�B�����
r�K�	�uz�b%\5�E%�ƿ�l�+j�k��!sK���by�(�9h����M���Pu��KG���:�W:�H�S�:��*h8��ӕ�:�w�#��`Ө��X���?���Ԫ5��������>����i"�f�N�qq�h�^�[��+�|��#�WG�>��7�����N�O�;���������?���VlfK�D�
+u��;F������ү��|�_�J��m]����KV��S�����w�L�ڌ`���ݧ��.hg�>|�_~jj���9��l�ၾ\_�7�3Ss�g��d����%�v^�fO��kݽ��
+#S*U��1�޷����C�GE�c����
+��}�g�P�
�$�F�FsRږS�~�����t5���������cB��%�j�2N�\�bO�Nޕ���m@Y�+C�����x��Gv�۸fG��{�Og���־�X*Z���Hu�BӝF藏���w	��Sn��>�\y�_M-|Ck�z�6=n���4�3��U��[�;��6#�fu��)v�Ğxqn��sZ�N�fΫ��7#���c�\	��b1x��1��������'0��w��:���h�Pڍ��؞	�����f�O�h��+G��V��~�<�~�<=z�����hHc��N#�f��`�0�BX}Y�*0�q�]r>��ٕ�����X'���S��1)��{�α�������h��//�����Ӌ0�|Ĺ������v%��};9�j�J�ߪ4:`��%�f�4�gK�������ٹk�:�T^��3�_Ur7����U,3�x�ay�� �IDAT D-WǮ!��v���z:7��[Z����O�/��fW��YR��VY��k3p�F�8�
�	o�\brhgܴ�	�# T���������_���\J�����(�@���+'��z}!��>�X���8��{�4�c�BF���/h'�e5��ն����[I�ّ
�^jm���|����;�N��x?�R+���_��ӓ/�럼3>��:�Wq�ꅵ�Xl'4G��`�#;��]"mD3)#;�U_�_����ݿ~�ッ-M��de��a�v�C������q�4���P�`j`��O����F(��5P�PJaZ���+�������έ����T�z�W��m�f�c�q����/M,'�[�j��D�rw�[}#a�"���3I:`ä�����~��5�y�yXg�h����8����bui�%lT�;��~d�ͥ�1ӥ����w�w�����tt�Ή���bMޭ��<ܑ�U��jn��Qv �$���@��!r\<a��\y�旾ZBF}�Ҵ��~�;�����vi��LU;�e㢮�Rw�F���N�f���=�V�A5�ks������
�0�c{�Z�
+x�=�5�����7�&u���Ƣ^*>�7���<ua�IZ�n��N� wvߒ-&����]��J`x�p��+�=���?̮���]��bB��z�S���%�w�ѐ��b͢�o�ʸ�l��v���Z]>3��))�݌vXkau�d��i,$���\%�8b�:���N��:r��r��g'�{��J/�)娊N��I�1�w���'v�����
+ˎ7�������O����{�^\�B��M�i��I�NN��E��;�n�S�������9���vBbf�T������7�����5�<0� L:�=���� 0��`D[��f-1�d��MO�Z\��R�4�Eu���%bK�?�#�
���m~��
�����
�i6ڀ��`��Ʌ3O<����]���Z��z��V��
��y\�Ě"���j���)���n�]db���y4���D����c	��Ѡ�1���8k-�(�3~yjYO�G[g���vAD0�1�Rݖ}u[H^#IL�}Ȑ���m��͢Y�f��#y����cc�������2q9��.�3���2tW��a�4��l7@2C	�H*,Y^��_�����?7��Z�z������Iu\�ĚņFA1@g�I׉��@JY[R�W2-�\RJ!�T����PJ���n�:��� ��R"M���0)�"�ZCkMQQE�ZK����jHF���ӕ�;><�K�Dh�N��Q<uvŇ�vo���.ڱw5ӥ���\S����Obt�5����(�T��158��܎�S0jkb��0�E-$�$�m^��������M�=�P���![�$�LݻO�\��*��S�1��S�B��)%<�c""�<σ�8��%��X����J���u����#i�uRlr.b25� !ДXk�!ZE���Hz���J��]�����f���q�f�F��j��3���։:�qZ\���]~2\��<����7G�Ftp�D��(��R~��O��гD*@��$P*e�/_����T_��R�cg��ؘv|;ڵ���$
�������/������y\�EJ��4
+ 	�/ ���,�ę�bJ��1d���Z����TL)���m�Iս��FE����1�ZS�!W��(�D^k�Z̳���5�66(�[�΁��e��6�Rg�Xc�!�br��kT�~�Ws*4Wg;|1���{�鑱��ʬ��]�}u�`��ۇ��cX�a ,�I�s�D�H���jyq���/����Z.�;K˳���r-КH��ԫ�+�XS�$"9r��~;�0���|�\�Z(�(U�ZkkD��f�S)5�Ri����q(����t��Zv�vL@�&�5�'k-EQ��/i��q�����(���"i!EU���S��dž
+o%�K�;"Bd,fV*Ir��K�@v�'�U@J���x�F�J�m�n&��K���D�ˮ�K>�~�u0`#�Z��,��s}�p����S6Bf_[�����(��(�ļ���V��}ur�\`lh��
��p@{���h�y�,�z�WG^Y�?�;�����<�|RJ$Ĕ:�ֺN���u��3��e�3��RiJ�	I7�pj�'j��E)U;6U
;�CZk	!��(���T)����RR�V�{��￵�V)��������r�2�6��@b�q��cQ�hb��a�����r��V+A'�zU�[EL��Z�噧����0|�;`z��q䃔�N�E�&���<|����3_�gqe1�?[��}jqe�4����9bk�y��$��Խ�:���=G���B������u�]� 6�#�@�Z�����Q���Qem���z ����mO��^+K���T��!���}7K��֧��.�1���֚�����Z�B
+!�L���ke߼0�\Y�s'G��͜���.�B�9,~˜�����:#��)�[z7f�����
+�˃���蛅�#����������O�#4��{��a�@�x�-�-�ف�/=^������(�6s�����NHi#k�M������	z�XS��|ccc���p�|���}}}��� �T��:%���:/�� Ké��%��D��������n�N$�d�MH�ǩI��vJ�%�"�-�K����fU�\}~&��ɑ����:�ZT-"D�bj�kv����뜗2?�/�>T�m���H���5�EX^p9B�B�5�����P�F����'_uk0q�|R�F��>��L�3mf�Pw�=A��|�x�;0<<���!8��0��{
+!�uݚĚz�&����E�u��9U3��q�����Zۖt��	��vM�V)E�Z�Z�R*es@0sJ�2]
+!T��J��_z!���n��l����qu ����P
�M�y�L���A����*�΁i3�k���a��k_�|v)��n�6�F�[Ր��#�#���߱N���j�Z�I������
t=���y�����7�fF�Mտ
�[ֹ�����Bk]/NfԾi}"y�$K� Ӭ�J��5�p+BްL��)�g��)�c3�RJ�?
����<�U�!����9}枓�5;-�^K �e���a�;Zq��7]��_�C*R�(��J8�c�b��3���=�?�Oo1Au�.�7`]l.N^�f# ��2:r�uC����M�b��w��Ѱ�ꮠk�u``�o�ۑ��066�0����	6�v
ė�kZG�Z�d�:^ܔLS�k�_�>�X�d��
+N�[#�T�l�	ђ���R"%Y"��JX2����Z|�b�Ы��;	e;�d�U;j3"����B�2,�z���E�t�e����N��݆��=[�ۿ�@����ٜ
Q�5up��Q�:Tk�8v�����չO~�s6o�4o���t%�����q�7�� h���ͨ���Q����8�V$�j�h�r�fD��.q�J���2=�H	�Z+R;k�
+��,�Y��x,�8�Z��s��ٙh��c��Ժ5k�"����Pcf�c�u��[l�e�ݎ�'$�Nۺ�`����v����#������zA��YP��^j��#��@ܡ:�h���9v��>��
+4'�f*�f���*�m���j�}�]Rm�F��ę�BЬN4Yo���=�"���?N���Y1����!���)�#�t��%�BG�p�q\�U9���Z�_�`?�
k�.��6j��U�6��`9�?��-�)������i��8��E".Dr�H�v�
+u��"JӗήN��s�])#l��Et��B+8tө�CG�j'[_nV�������t�����mo{[�T;$Ԧ��&��r:j\���-�RB��7��F�	�d]�#�p�8D��@	!!�+���R��8J)�H)�TZ\�u<�/����̢�ʠ�"������`mL��	i6�m����{5�8}���y��s�}c;��u�K��/��
+`����
��$nCg�m,C
��t��{�EkRm�}R�#t�0odd?�3?��o������n'��:넊&���[�R���V�JÉڗ{*%�U)bȴ$R�`fED�s!���G.�����q�aW�֜�]A;"B�
f�+(VC%/}�.���'�Z_	]�j!�v�ݸ�\��:6����j�k���RG>`4���w���\�Qw즿�hފ�"��yP=���X�;��������[��T��PZ�fĹYi$��%P/�T�)a"�*N�R	V��R�$��B(��J$V��r�V��t!�/;�\\0�����~���u��P�5�M����$�FpR�m����Nbw/�mlvs�ިN��DX����g������0n,��
��	=|�FW����>�]A���ø��;Q�T^��7�h;A+	V`#�6[fU�5�qj�E☔����u;�B��֪��K��U&��Jy�q�߸D_����k��ݲ7D���J��R�c
+S숔)&[lL���X��!r����ʀP�b��^���ӗff�<�wBu��=����`��A�i~^wÑW��6��O»�� Vc|�߉S5�d'�����ilF�ͶgI��T���
%��U�R�HHWQJ�J$"lB��q�R��{�)3%	�%������@ɏ�•50SS����j���Bb�LP���)�6�2CKF���j�}��u�\�*�/M�{�Y��n:�h��������~��r�|ݯ��oG��w�G��˅f[�����ĆZ���x�$��֪d�afW1+?R�k��ׯ5?y���FSk���B!�,��X,P�ZwMIk���q�"q\��_�:�P�$��O��N��V�+ Op�ӕ�
+r'w�Z{k�Q8��'e-��)=x�ծ�X"�W:�Bb�a4�6�7.�ۛ����O6��H���H��#��p�i>���b$^�BO�
+!)�+�t'J�K��Ӂ�Z�N�Q��K!�\)Aų�I��QJm5������3b�l��ƺ[���f
+�jq"*.}�Ǻ4����)�'n<t���B�"۝%��]@��¶�r݌�S�s6;W�=��OD��L2�d���R�Sr�i9N26udr���B~����K\���7
��P
.̖�T
+��6!Hˀ���m�t��W,IXڱ���h�N�Af��}�k�<����md�FC���M?�ݗ���+�e4��Vd��[��	�̓b�����{��,�T:M03e".	"���lP��P��JA��9��\�O�V���u_���e/N�!��%S4���I�I��D���R��������u-=D��V��a�G��a�l���s��p%��4a;[X�fp�>�>�i5�a{�W2���`[I��u�2H4ַ���ا�Xp�4�!eȕ�P�,���F@�V�R)�OϹ/|k�/[%8	�z��G�N�Q	l����m���g0�~KSI�볺�9���
+�>W����\�7M�@ɵ��^s`���ɴ$� ���:r�kN%��x���^{@=�k�XS4S�f�ەR�e�،hM��ǘ�ھ)�Zkk�h������ձ�ԉL2�lbwHA�@��yq��Y�b�2�G����RƅY?N5�=z;
e��qG4�`�{�uO�h�Ɓ��7����cw���7����3������)�`�'v���k�<tt��x'o�ϻ��\c�ֺ�v��ͤ�f��H��*^�����)�af�̩:�����m"a�7��d?�^7C����B����P�ܥϝύ/�P�]�ֻw��`\����
+�MU���ޖ�[M���g�V�^8�c��TB�R�1��U_a��@�gW��>���9:!�ѱwp�n�V:J�\~`ĥ�ͧ��ܓ�U\kĚ�]�݌\�*���Xg��dmB���L"�Z��"��v&"c���M�"2B�(9�!��!XI‹�޹/��3�E�c�0���$az%³�%��ZG�ͤ�&�*�Rs�ѱ]���9ޘ�+�s�(
+"�ϓ�y$��iJv���Ekmå������$��M�a&�!;zݱ����Vu�zc�84ٶ�]��8�5�,�fg���Y�&���<��EC}�9�E��R�3�� Mp�3u"M=��+�@��$��Ƙl�W�R���}��{f$���m|K��ޟ^�6EX�h<u����9%ڊ��f�no҇YB ]��G/�m����Q�Đ�$������1�Zk��c8�^���u�l�3��2
+��s�:�v���3��@�����Y~�gC�N���6p�k���jj�#�����v�uͮ3�$�I�E�0��S���}��m�=%�ԁ)]O��iXD��eŏ\2�x:��M8�(Bh^��Z��8��J8sŇ�dL��W[�k�*�����QPD�F�*�i���r����w��k�N	�Yk�þ�R��k�N���7H�Z\Wf��7�=|��&G!���0��Rv�ě���_[j'��Һ.k@�<t������x��^�}���Jc�ۤޠZ��5+�'j_ʬsx�9鐲�[�5�V"�I��q5��l�wM�I��F`(���k�9;pr��N�kzR�f<�RO_��p������f�kR�鳅آ�0�w3J�!�k�U���wDpa�?�Wg/*�RJ(��8\�e�u)��#��c``��|���H4(�l�ݰq�+t�F���uw=؋jvr<t�_��;�ȯM>�6��3�M/���ǦؗX7G�Q^�:�q����x+��Ie�Q�!3c�Jl�6��n��7C�Fak�#��B��!R�ef�J�[�ܙϾ�?�
+��{RV����j+OWxj���Ε��&�]R[l��Ҵs�k��K�I�	�#A�qH:�$"BX)%%!���R{�������>��e,,,l'^x�ƈu�����(4�^��I�S;�h�-��Y|��'l�w�>��%���=4�b����C����5K��~����Ҵr����r<w���6�5�)�,b�b
�����J)#c�+�L��t��]��a�M��K?���{^wR�*"tc���
+l��0�/Nxz��R`�HZW7�}[j�{̜�r���
+�-�G삠��C���Fl�GZ�0�p!�W�B�8D�TJ���J�����q@Q�p��DQ� ����ﰦ�Q�~���!��w���l5�!;�� )x������񣰊��̾:x��O��c��]I֢y��4(�H�{� �6�H���JJ��1��"��*�P"�2!
���=�.br����ff�H�����<S1�ן���^���v�7)b��0��/�1���d����ڴ�։NO�gX�f��j����+AH��|�:w�v�CЦ�xO��%	!��B��Ji��!)%)��y)�8C�R����
�#G����3gΠ\.o�4DF�ɨ�e����}��"B���o�̰B��N��}��?��'��M�m���{Jݎ}b�z�j����N
�5#�4tR6�DL���T"�J)�bfm�U�Z�xG��SB7��M��FBG)ct"�j���F�Vs/|�Ű���{O�q�!�=�ٝ�<����g+X(H!�r�����\�13��
4���ZQ�Z1PKXk�e��Z�����m������˾��I��PRI)�"���R6%Z�K)�u]�r96��u]$s_�P(@���iLMM!úˠ��`
+��r�2?�%?����J��DH�Й:؂o�����E����
+S�>�}�C���b��`+Bm\6�K�+�xE�iIc�N%�LQ"������*�^�a"�zB'���p�9L��bI�!�;]��?�,�˕��7�·:�D��K��x�l߾�0Q���f Ύ�����D[	�V5Bߪ"��2��2�f�a	
�af�$+�e�@BH�4x}z���@�U�z�C	���6i�B����(`����qXJ	)%
�R
+����Rbbb��\��2�Q^Y�N<�g����{�՚����P̀Go�~����WJ�6��{0��}b�=46ڭ�٭�5bM����'*a�qV���J����Z��L7
+@��@3;RJ��%"���9ffaˑ�}f��� �IDAT;�ٳ�Jя�o�żn�O"��>~Rg�j��ʙ
+��"4A�+uf�â�H���H�����#Ver
+��,ٲ� 
"bK�`A�Z�D��ܠ�} ̦đ��M�Ҿ�p�����
h���=5�/
�q(�?~�Dp�4�q�`P�P`�8v��R�r�
+���K�^�Yc f�j��0�������q�R��
+b�	�:~��x�ӏEQ�3�`!��
c���?݀}b�;�k��#Z��bkIљY2�B���)��*��4�("���I�k��̑��#"�DgJ�'���~��W/�7g��ڛo�o����
���I�63%���g�.��L�Rv��ݨ[� ����mE�R+��P9�J0Tl;	�؊��6YI8AV���{"v#k�t��e5���[���CX�	pj� R�4PIR!���5�PJ�R"
+F��Zcrrr+�a�H��Z��t��.�y �0���q3H:����}P<��g�!��]ڀ�S�N�mo{�0��y����>���$�}b}��#D+��1�(��*���Z+�TƩk�UB�q�9�8;�B�PJ�>�"#	��:�Q�����-����{�?E�+A��ڶ�������<s��cL��:RmT���J�k
+5�>9�2ChVd���ڒ�$��%�$���<�Z|����3����F;}�
0�D�T�X�����}5ީ+A�;,����B&(K)Y��t��I�\�ja�g���.����� P*���ׇ(�`�i�Ί((���0�� s�gۥ`��I(�͇l�B"<tӏ�-���VQ�|���x(B��y<xa��088�|��jEz�"z�S
+�8!	w�f���l�)7��Xm��)�o�DD!�,���X�D�$&1��"I����%qeb���93v�O(���O��������'/X.["(Q��1��b�j��O�r�-M~�g��W6­@8!	���Z��� �B�M�φ��OT�6y/i��Z��
�F���'þQUU^}�L&��1�� 0��8og2���g���%���z"Q�"�q�4`�K�Rg&�qR�1��u]B�)%��rjom`6�	cMԧ�����K^!�P�d�U�@��wpG�G��冸�D�ʹKF���V'z��]w݅_��_�m�݆�}�qFGGq�=�஻��s�=W��v�k��#�4؃�6�'��Z����BԲ�c4�y��1s��hS��+)�B����LIν�$&W��p��\"*���
+�dJ!���|���f(I��`�j�b��e_TW"w�d����RD^Ő
+,d@REB�HJ�� -��j�d
+��$4H�-2D���cc"2>	}[y��?�z���_~w^�.�MC1P�
+�������X�0�Z<�5��ۋސ�4��B녉�ظni�寜S��(��qVJ�dJ��P��.��(��"udJ	�������422B���(
+���N�I��D2�����`q�����v��T��5o�Z��B���mD�� � �B��DG
-��֧uP����x	��{�����v�y�8r�r�\q����a<x'O�ij�>�亯
+�-l�U�$:�TEl9I����Yk�1F0�������Bx�򈝚<kmNJ�'���!��KNq�"M=;c�sס𵯿w����ͼW"@P	���t��5��o�G�P���!��	�e6L$4	���D��D)G�D"Mշ�J\'R��8E_-3QR�iX�$�P�Bk����aƉ����4]����˸{�,*㏡����1��K��c���X,�b67mD"���w̠zg�N�P�I��
�l6i8gT�H.0�a0,c����꒻Z]\U��R�dj��H��BJ)�,���3U�1����R������a�E�E��e�T*T�VEQ$�%cD9!x \^8�:s��I,���ĉ{1�(m��v��מ��#��@�i�v��p�������Rƀ��y���NL��曱���j��tf���B��oƻ��.���~���ں����Hmx��+�4U�� I'O���cMZNXkEB��Z+����m�D�K�zD�Bx�ڂ�s������<�*g�Jb�̂}쎃ѫn?d_}ǘ�Q2w��)-�(��$0�j�ԥ*&�
�φ�+q���$�0���B[fZ��$aUl����P�)a
+!l��e{)'�i��V'�03�Ȗc���8�_�É��`�́�?|4��j��'�`�pT�������P�~o��r�"Lƪp8�
+#�����!��A0��9���H�m����UXXlql�
+��0Z]EX�q0(#oB(k����A��z�P�S�AG�2��,��y'~v�)�f���+��(�(��)�ˡ�����*��O��S"C��"�q���;�_
��q����V���0���C7��C7c��,��1�v���E��F'_3��s�_��?RY����r1�Z�¦z������r[��4aéS�`��;��NA��~��XYYك;����
+��<��+++���G*-�a�u�@,��ZKZkk�M��P�G3�$q%������Z��sD�c�yWQN
+xںs�V��\I\xz�~��8=5�s�(�:uP(GP-G������C:eFP8?��Ox~Zۗ�?�?0�6�a�d��V(@��U�)�_r�D��&�7i5=.L:~KI\愄Si��k7	�u!k� "D��xn��(��-,)DB�~�����EEk�`�$���U��[@���"̨:9��ٖ��c4r&X�if�%H����m=�Wz�9y��������!�C��KR#R����.v%-dK�a���6À��_�`�X �0`ݽ+-ŵ��(qx9����UwUef��CƉ���&{��p.u��̌ʌ���/�suʦB�����a���!D �6C��l�5����
+����j��ۮo�6���a�a����A���ʲ���TO&SU��l�ivȼ���2mG��`p�
+��U<�y���+�����Y���E�5|S��z���h}�:1�A?Z7-��������_�5�v�0��o��r�wmm
�=�677�\�WD"�}�����ַ0�a��w��\�v����X"�P�(
+���{x�Wt[�}�Y�y�^��Xk	�OK
++BBk���i�i�&xn2���FAVY,3�DTB�0��-�Sg�w/��՝f��7�յ��i�����;���>N����`B:���u��܂����ڶ��=T7�h���~{3��L����J��J�p�kճ�01���p
��~��n
+�>ئ#sU��qM.��&3p�Y�5�L<����b��?!�+:87��p�pĠ������d�ѭ��x�=Wv�?�����&9�������Z�iF_�y���6�R�XE_C�
B:NHg��0�����cL��d�m�Dz��,�VCD1���&f6�Z�Y�#����~����D�a6lаA�>����M\$�s7_���5nu�����i\��{�S��VZ�%�{��TmLk�9p5�5�<1�f�s[�����pn��g��1'�֘�G���z��%|�_@������AuQ`�y�����x<����=���;w��w,K`}���d�˗/�}׮]�_��Nui�v���t�(
+-�N����.�X�� 2;����ic�	K>�,�ne߾5���m��9�MǺ���V;�tʌM�p'Ws.3Ru�%;��L��Δw�F����h
+�W��f�a|fa˜@M��JY7��c�NG�V�.�:H�!����U�V����Ԧ�����������w2�xT"p����ό� +~���DTPUJ��`�fD����9q[WX��y���9%ϛ)|)B̌1vZ����m4�>���K����j���[ �e��Ulu��.��,V�~w
���q���!*��-�o+��5!�4\3�}�	1<d��������U�ڹ����pj��M��`�k�����6�6��;w�kw*�����կ~�N����~��8��6_�py�����ƍ(�?�я������v��e	��(sMecc����E�<�%	З,˨,KɲA���<gc�C�Xf�CV'
+�b��0�%"[k�2x*�'|e�s�w(P.������d�IJ@�DV��^E��qm
gLb�e��șI���5��޸I#����S��{m����U鉪�!Va�X���U{�v27�/�g������[��2
+�F��~+��4�X�ͅ�Ҝ����������Z��W�ڝ�ph��
+M�Yu�����y��79|��L�%K����`2Y9���L��x������M�xL��v�����;e��N��Ͳ����������g%6�U�& ���A��}�F 죖�v�}��m`X�pl������^G��_��>��`��6V�z��
[�Qi�}��_7�m�T�����ΝÙ3gp�֭���ݒ�t��d���z
+/^D�e����e�_��W��/yW�{�,����������xH��:�(
+t:�!Z,xv�1���@Dl�5a[�Td�f��x-�+���������l��S�gd��c&)��(�	�m�F�S�d�v!�$,V���
+��>��qšB�ZL>�)q`��7�l�7���iΏv>�G��Kjݯ?L-�OÊp?JG������7�"̜c�\���|�רzO�g��.�1�{��Rp#iK(�d�LMDD�=_�7�L�9*r�JUm�,�a�˼���-��.&6�(�a�\���e]4lP�������*�pdnS��+��te=�'�A����XWa�U8N��>:���[��S侁cG�[��(��s�ǫ������ޯ�kU]��)�:�ҥKx��gq��Y�F����Q,;("8w�.\���Ȳ�?�8Ο?���W�\��~���ޏ%�.�PI��e<c<��ʊ$��ZL3�(۠0y2����j��2<�sLa�5�ܦ�2�Ȑ'��O�H٠e5�����	��O8�H�oD�
+��Ƅ
��N��*�zj���F�K��s��	�KP��̶v�dM]^����'�����*��nS�`��'B�4�:ޯ�X�UYE=����4K���&��۶���̬��@�p��*��?�=��D"bJ���p�?���3'i:�}y2h`b�?������x��L-�f�QVDt�M�ݼ�f�Z�,` X���l��(�&\��5�A����1��
+LQ~h�W�~b�_�tg����Vrh@�:k}���}
�O��	>>I`M��PUU,� "8v����/h��ڵkX__���̌�t������K`]ʑ�{/	8I�&֬O̧X4��0�)�iU�E�c�z���K�>�`��&��	�s��Rz�p��^^U��lA�(�%�>s�6"¡��3��fq�LD�a��m��{[�X"!�~��j/h=0���Y�x���0YcL�|������f�K@�kIe���R���w���dY� 4To����������pP�P&a$?Ű���|�f�j���ٛUH�Q�9�=M�4D�C�o��濼�D;���~�*�_|�N��޿�
+T"B�4�0�z�����V��(���t�,�u)G�vww�(
+*��Z�˦�)��h��qdw��VU���O���
+�d�!��[تVQ�!h`��Y�XkVݏvGb��HՊP[������i���0�B�LŦ>=�y�m���M5������4L��;[U��!_poc���!��2�$S�A҄VӞzm�������✋�~fV�0�Ŏ��R�hn��u���j��������r��f����QXs�Hx�����6|�=�uu2YL]t��Uu8b�S�Ä���sX�	"—�����%�.����t:EUUR�5VVV(�AD����,�$�UM�Ӎ��Q������� ��뱠^�l2��1Ք�b�X�s-zG��j��E�5�U;������w������{���x���PZo���h��:M���f�e�E��y��n��P5~8M�!jϖ��SboՅ�1�E��z��J�V����}k�պz�K��ģ��7�y�U�;��S����I�����݌�Cnq�d����`��/���N�<����{����""��I����;�t:�t:E��Մ�6��(�qR��i�(Ml���x(��hvb�����u���^�I0}�:is��U�j�>�����ȫi��W�򳣭K9ڤ�Gc�S/h-0�V��9�0&ˌ�dL9�ií�ZK�n�NC�$���'}���͕��
+�?�{�9q�ٝ���7��Ogd�8L�G���������+�����+�wWH�z�����{/i"���/��~��/}�KX]]�/Կ��,�u)I��q5W׵�j%XYY!
+�?Z���1QHXQ����p,6�2E���1e�	ӝWݟ���|��ԾA3�&f������sYs-�g�!"������x���x�����Y9jx
Тy#���J��i�Cfn�1��) c\+%�#y��
+	��	C��X��*�bk�.v�q�9�1͊���O<��A��;��`XO��~��7ȾQ5�ض�W�(����KUUT�u���dp̌����711�0�I@UY�R>��a꺖�hM8��vUe���$H�T��#ȥlT�3�k�,�R��g
+�)S"U��D��Vhm���`����
+����]C���Ǟz��������AS��P�I���qZRi������{�'�p�
n��yV�U�,%�i!�fNL��5
�I5�v�)9��f �Y�iY��m<�P��A�UCPyA�G����şu�~��o~3�ߖ���%�=�Z]Є�R�5�}��h��L&1��׿�ut�]��9(eP�����("���m�@Y�R�%��.ʲ�~�/EQĸX>����,����J6T<I6e����6HY��`e�
+˜�z�~.�))�'XT�iR	�셈h}{�Ͼ��o�x���+�[�|G�*B[cn�����x�
+��y�'�ލ�5uÆ���U�2u���1�I�l�h<�Ĵ"0�
+��V��ܠ�y�=�,kn������6��+�6C0�ٝ��A8]O�=g���F�zܶó�![k}(��׾�yNeY�s�=k-��h4«��ڞ�{̗}}����-����d��d���-�e)���eY"�sZ]]����,k����7��hW
�ǔ�JhK!����XS֩L5�ѣ��9�}���]�D]����]��J�*�������/�����)s�6A�=�ډMB�D��A�}kߦ0��$�,u�jb���n��͕������:�����𝌠�U`>�j	�B(\"���R(�Gx
++�Zd�i\�5�+&w��S@�AW�"m��;+�-���	^�t��r��z���<�~c��B����e�h-��C!gΜ�3�<����Q'�^�X�򉋂,�t:Y[[C�Ӂ���zq�S6�|Q�@Sk,C��{%��4�'�k_TE�0N���gu���h(�P��U�U
+�ȯ�8�e�7+{�ϭU��;M�>pug�i���s'2�U#�V<2xd"1�}
���o�;J��{Y14P@@�n{�53*cP�r4)������foe�汓��v�5�Y�1!km���W�%�\6�4FU�g��J�³�s�����p^0��fj�����5��g���ЀpQ�u����ٍ,�6$zc[kQ�*���y�KXS�esyǗ2�%�.垊�c���`eeE�:���>��>eY&����M�j��J2��#
+�)�L<N�ׯ@����<1�H�o�a�{��9���<D�N��ݔ�_5���n��T�Qo<ƣ'�Mǟ����wǺ�9��.�&�ޭ�"���b��!��Y����{0$е�Y��[9
+S�����P�S�=��a3�m��o���<����֭��孵��ew3k
�0��c�8jճ��jxV
+������w�PJv�j%�®TE�ml+�%�a
��b�[Oˇ��
+&^�5w����D��ؓe��[��M0��1F�����Z�,��.b��胠?�O�~DY�R>j��#��YIDAT5Q��q���رc8}��E��(���0#�%�Z�@k�MD�DpU��n�6z޹})�&����t���K�<���*L"���`�L�'E�5βݫn��;+",�'`g�M'g�Mu>YT�
|֭�c��� X��"^�9�g�H`%�%
$g/�Q����8�w
+���l{��a+˝cnv��Ve��^�}g���ݸ�l��
F��(�����gk��X�S0���z������8�~U�<��3�L��O�|�G~�P��P����;L��y�����7���u���\�
+���m����sћ_U�@\���zde	�K�odccc�
+ϱc���SO!�sQ�][[�:ATՔ:��M���OT�
���-]}/2X=fj�1*�O�k�ܐz{�8k;�9!2 #b�36��7�}[�g��]j��`�0Ł��I_���? ��rώs�n]?fį���|"D}8�d�mn�7�-�gc�6��kS�� a��1{Z���≉A4�盄0E���R犕��&����a_�����\é��f��װ�1�@f�;�k�����jz�zT��נ}Dm�c/(�0��x��|�l���w_���\em��.���σz�j��ت�#	�K`]�}+�uk�3|8��_DY�(�EQ����A�DD�9�@�M��aP��d?@5�^8_U��X��339�4��	�g�q��D.t������o�5��"b�U�L�bb	�7��|3+�B8���B֨�h��8�햵� 
+���T=�-H�����R���D�@�������b��.��3۷�i�����</oI�Ɋ�o�|��]]]�����ꉝ��j<�]�5��HF�L���,����Ł#��f�O���y��d�$Q�B1���|
+)*S�IT'�J��%�.徖Tͻ������$;�^z�%�8q�~y����IQ���)��Ekm:1�>���C����K��*h��-V���Z6O߫�8�8�ymcр�9��T��J	�ֶ�هgi��A�M%��{����G�ªC����W�]�v�8f�i������}��_j/�oJ����g74�&����0�Y[o�����k�u�=�q�OOln����S���Y�V��0���>Z'�=�10G�&�eꞝ���ߺᏮ��W8���I�\�6������a�{б�N����JR��h4���H������m�:u*��DP3.��"�"�Ќ3A�,Җ�SVF!����"L4jV��6Ye��6H
+��,�pZ`�+ _� iF��<1��b6�p�4'rڎ��n�D���Lc���8�}��8hVg�ԗ� P=p_�������L�׬t`#,��
QU�Ɖ������-�᳻�/>�����хa5)K�$�,~�`��H�Bhպ'蛃�ϼ�$V�qD�����:s\���֊e������3gz	�AU�c0?��>��c*K`]�-iNS��.?���W`����k!"�Q(��̨�RFK�6-f�"� H�l��D���SDQu00��6�%*�YWf���X�RSЌ`�x���58���Q����
+���1�L�y?��.� �u�3Hؽ�'33�37@
fq.�+�������5v��;�������/�MƧ���9�`ۚ����С_�{!^c簢	VBo(���˜척\ϊ�׳����w��+����	�.I�@��D�o������ �<Djp]�R�I�(��e��{��cXkՆ���!"�4
9���s1�U��97W�����	
0���!״-Z53Ђ�]�U-�������@5gG��UV���mr�'���㩍uhC絞�,Z�ej�KT�s��T��#L�zX�CD؈��L\3�.�G�[���7��Z]�$ƒj�?9�q���4���N��zM�V�*��Փ�/�v�7��e~�1;��4���ɍ#T��|��������f��(�7��m2�c�dm�����.�4�FӇ����PK]}��u	�KYʂ03����[�b�����*�\�h�u]a���\t�H�R��۬�,�[<g��$�q�b#Ɨ�h
+���َ�?Q�F{j�0P��EJ�^T����
+�ӱ	畴O	ۍ�>��j_��:.鶎�J�XU���!�b|&�LQ�k��i�7��0��7��Uv��w�c��+'���A5��>?_��ߩ�զ��	�t�v��(�g4;�'j�Y>y?+�����.�7�������ck�`�<�f;�Mlf]�F�a	�T��t��7u؞���/>#�q���P��X����Z�+W��'?�I�4���p��?.���u]�9���`)��uR
+�;��2佟�4#@��h7;��QF�1�lx=���m20oOE��,X�n�����H�K���艍�IՏH�3'���P�Ŋ�B$EH(�e]����`��}��S6mĉ'��x�p�m��Ԋ��<��L_8W�k����x7���g��`:9i�K�@<I���m�l����yg��7*��6?���l�'��DӚx2e3&�����f0[�������`+�	^���&�d�R�,�u)KY�<���k��?�F��ܱ��-�y3A��r��1�C�y���(�R۩�eIQf�N�A���=��J�͝StT��a;�V��&��X�Y���ޔ�F֚�Oeq3�maQH@W�2�N1�B���[��7vl��it�੭}g�&y�}Ka��{c��yg
+�X���DxS�o�HN޳��E�3�
ķ�fE�S1j��.�4�;P�D�3׎�v"����D�j&�2ܼ�w��c<��3>��P�X��L5
����9��r��Gx�����,a<��@[�2���dwwy��-ڦ��@�ߗ�,)I'Y�A���NB�\��i怪i��JNA3��m�@i��^�VU|���)���L;�E���mn��kN�-�Q{r>�ho�~�f �V�Q�NY���5�X�tQ��˳�#�/I�\�yL��C�,ׇ�]z*�/����!����2W!�=""X�ȓE�2�i\u�k�},ۧl���<c��c�����{�]>TJ�]�R�r���>PD����c�����ܜ�C*�Zkeee
+�s�T��������j́W�H�yǟL)P��SU��4�o�Sr���:��_O"R���`���wz�z���D���>O������d\XBrM�@�M:��y���&��C��&�C8�k�����C&����!�$�sS&��qc���4��:%yބ�F�`���m�����nѾ�QA���%�.e)�@Ұ�E���NMc|������R���<�xCNWZHԠ�� ܖ���W* ��4틪��i��΁��/�?�4�:��CX��"8���ڤ�2�3��vj���R�ڭi]�9[mb� �ںSv���@��0�	׊�Sp�l���Ҧ��>��qq�DsD`��m*�&	=��P���҇m=�~�T҉g������H��T�����|�XաǷ��#�M�W��ݮ�r_��t�E�*AI�D�[@���*6�Ԏ� P�	~����0��NU�;���1���m&G��
Zz��IsLUU��	����D0��p'��]�NU�
+PiAt�IM�4:���%����"�j;͊�`���{�i>�Ϧ�72Ք�.x,z@UY�R�r���j��[�n����m�:��<��ښ�z=��KD�<�Q�%�eY�z��@���T��H+�U��2�U�Cż�֢z@?�LQ�u���'vʴ�0愑�E�ž��
+��<��f����""e�::~)(���,�Y�i��zO)���������^�hR𝳝z���:6
+��PZ($�Ȁ�A�֥,�!e��������c}�R-�ݏ'N`8��這e0�,�9�h��U{�o�TU�p`7i|��������A�4s�X&$�5s�{!lg��m�Q�P�s����V��z�^RpM�Gܴ���εAj�&u\S�2O�y�ޖ�YU�Uҭx
U��3_XTŦ�|e	�KY�#$���P'�T�^��^��}�N'�oP	�	��ٳ8s���@Y�<��.z�^�d��@���YzfD�J�%�D
+
+��<����_������3a��c��a,z����Kϓ~� �M�&j`=���{Uߪ�7I���#v��� ��=�ݮԷ���֥,e)��d2�d29R�7�|���\�xO?�4��A��(�b@�|�y�S[��UU�<��8ԄJE@`����`�{h$�S
+(	�΅ߤ@��N�̵O��pl���VoXU��9�!u����4���Oϥ�(����q���G~h��,�u)KY�ǒ�hc~��>�{�Ⱥ>��9�0s��;���������4��6""�u������4M�idY��V�izo
+�zL���d?�����ۢ-6a�i̜�X�֡���mL�пhO-��[���o��D�N�.]BY���=*�֥,e)wM�r�DE����`oo;;;�y�&._��S��vPUUt��::x�B0Ơ,KQ֧,�ZKʒl��-xQ��M�����"km�f��*뮪*�5ƈ��k��Xu��*b=3c{{����|�s��h����s��Yi�����IEND�B`�
\ No newline at end of file
diff --git a/vendor/phpfastcache/riak-client/tests/TestCase.php b/vendor/phpfastcache/riak-client/tests/TestCase.php
new file mode 100644
index 0000000000..efd8f3cad8
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/TestCase.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Node;
+
+/**
+ * Main class for testing Riak clustering
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+abstract class TestCase extends \PHPUnit_Framework_TestCase
+{
+    const TEST_NODE_HOST = 'riak-test';
+    const TEST_NODE_PORT = 8087;
+    const TEST_NODE_HTTP_PORT = 8098;
+    const TEST_NODE_SECURE_PORT = 8498;
+
+    const BITCASK_BUCKET_TYPE = 'bitcask';
+    const COUNTER_BUCKET_TYPE = 'counters';
+    const HLL_BUCKET_TYPE = 'hlls';
+    const LEVELDB_BUCKET_TYPE = 'plain';
+    const MAP_BUCKET_TYPE = 'maps';
+    const SEARCH_BUCKET_TYPE = 'yokozuna';
+    const SET_BUCKET_TYPE = 'sets';
+    const GSET_BUCKET_TYPE = 'gsets';
+
+    const TEST_IMG = "Basho_Man_Super.png";
+
+    /**
+     * @var \Basho\Riak|null
+     */
+    static $riak = null;
+
+    /**
+     * Gets a cluster of 3 fake nodes
+     *
+     * @return array
+     */
+    public static function getCluster()
+    {
+        return (new Node\Builder)
+            ->onPort(static::getTestPort())
+            ->buildCluster(['riak1.company.com', 'riak2.company.com', 'riak3.company.com',]);
+    }
+
+    public static function getLocalNode()
+    {
+        return (new Node\Builder)
+            ->atHost(static::getTestHost())
+            ->onPort(static::getTestPort())
+            ->build();
+    }
+
+    public static function getApiBridgeClass()
+    {
+        return !empty($_ENV['PB_INTERFACE']) ? new Riak\Api\Pb() : null;
+    }
+
+    public static function getTestHost()
+    {
+        $host = getenv('RIAK_HOST');
+        return $host ?: static::TEST_NODE_HOST;
+    }
+
+    public static function getTestHttpPort()
+    {
+        return getenv('RIAK_HTTP_PORT') ? getenv('RIAK_HTTP_PORT') : static::TEST_NODE_HTTP_PORT;
+    }
+
+    public static function getTestPort()
+    {
+        if (getenv('PB_INTERFACE')) {
+            $port = getenv('RIAK_PORT') ? getenv('RIAK_PORT') : static::TEST_NODE_PORT;
+        } else {
+            $port = static::getTestHttpPort();
+        }
+
+        return $port;
+    }
+
+    public static function getTestSecurePort()
+    {
+        if (getenv('PB_INTERFACE')) {
+            $port = static::getTestPort();
+        } else {
+            $port = getenv('RIAK_HTTPS_PORT') ? getenv('RIAK_HTTPS_PORT') : static::TEST_NODE_SECURE_PORT;
+        }
+
+        return $port;
+    }
+
+    /**
+     * Parent setup method opens Riak connection and initializes static variable
+     */
+    public static function setUpBeforeClass()
+    {
+        static::$riak = new Riak([static::getLocalNode()], [], static::getApiBridgeClass());
+    }
+
+    /**
+     * Parent tear down method closes Riak connection and uninitializes static variable
+     */
+    public static function tearDownAfterClass()
+    {
+        static::$riak->getApi()->closeConnection();
+        static::$riak = null;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/TimeSeriesTrait.php b/vendor/phpfastcache/riak-client/tests/TimeSeriesTrait.php
new file mode 100644
index 0000000000..f1b14510cd
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/TimeSeriesTrait.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\TimeSeries\Cell;
+
+/**
+ * Helps with reusability for timeseries commands
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+
+trait TimeSeriesTrait
+{
+    protected static $table = "WeatherByRegion";
+    protected static $tableBlob = "GeoCheckin_Wide_1_5";
+    protected static $key = [];
+    protected static $now;
+
+    protected static function tableDefinition($table_name = "")
+    {
+        $table = "
+            CREATE TABLE %s (
+                region varchar not null,
+                state varchar not null,
+                time timestamp not null,
+                weather varchar not null,
+                temperature double,
+                uv_index sint64,
+                observed boolean not null,
+                PRIMARY KEY((region, state, quantum(time, 15, 'm')), region, state, time)
+            )";
+
+        return sprintf($table, $table_name ? $table_name : static::$table);
+    }
+
+    protected static function populateKey()
+    {
+        static::$now = new \DateTime("@1443816900");
+
+        static::$key = [
+            (new Cell("region"))->setValue("South Atlantic"),
+            (new Cell("state"))->setValue("South Carolina"),
+            (new Cell("time"))->setTimestampValue(static::$now->getTimestamp()),
+        ];
+    }
+
+    public static function generateRows()
+    {
+        $row = static::generateRow();
+        $rows = [
+            $row,
+            [
+                $row[0],
+                $row[1],
+                (new Cell("time"))->setTimestampValue(static::oneHourAgo()),
+                (new Cell("weather"))->setValue("windy"),
+                (new Cell("temperature"))->setDoubleValue(19.8),
+                (new Cell("uv_index"))->setIntValue(10),
+                (new Cell("observed"))->setBooleanValue(true),
+            ],
+            [
+                $row[0],
+                $row[1],
+                (new Cell("time"))->setTimestampValue(static::twoHoursAgo()),
+                (new Cell("weather"))->setValue("cloudy"),
+                (new Cell("temperature"))->setDoubleValue(19.1),
+                (new Cell("uv_index"))->setIntValue(15),
+                (new Cell("observed"))->setBooleanValue(false),
+            ],
+        ];
+
+        return $rows;
+    }
+
+    public static function generateRow()
+    {
+        $row = static::$key;
+        $row[] = (new Cell("weather"))->setValue("hot");
+        $row[] = (new Cell("temperature"))->setDoubleValue(23.5);
+        $row[] = (new Cell("uv_index"))->setIntValue(10);
+        $row[] = (new Cell("observed"))->setBooleanValue(true);
+
+        return $row;
+    }
+
+    public static function oneHourAgo()
+    {
+        return static::$now->getTimestamp() - 60 * 60 * 1;
+    }
+
+    public static function twoHoursAgo()
+    {
+        return static::$now->getTimestamp() - 60 * 60 * 2;
+    }
+
+    public static function threeHoursAgo()
+    {
+        return static::$now->getTimestamp() - 60 * 60 * 3;
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/BucketOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/BucketOperationsTest.php
new file mode 100644
index 0000000000..591a26cf66
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/BucketOperationsTest.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Class BucketOperationsTest
+ *
+ * Functional tests related to bucket operations
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class BucketOperationsTest extends TestCase
+{
+    private static $hll_present = false;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        try {
+            $command = (new Command\Builder\FetchBucketProperties(static::$riak))
+                ->buildBucket('test', static::HLL_BUCKET_TYPE)
+                ->build();
+
+            $response = $command->execute();
+
+            if ($response->isSuccess() && $response->getCode() == 200) {
+                static::$hll_present = true;
+            }
+        } catch (\Exception $ex) {
+            static::$hll_present = false;
+        }
+    }
+
+    public function testStore()
+    {
+        $command = (new Command\Builder\SetBucketProperties(static::$riak))
+            ->buildBucket('test')
+            ->set('allow_mult', false)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+    }
+
+    public function testFetch()
+    {
+        $command = (new Command\Builder\FetchBucketProperties(static::$riak))
+            ->buildBucket('test')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+
+        $bucket = $response->getBucket();
+        $this->assertNotEmpty($bucket->getProperties());
+        $this->assertFalse($bucket->getProperty('allow_mult'));
+    }
+
+    public function testStore2()
+    {
+        $command = (new Command\Builder\SetBucketProperties(static::$riak))
+            ->buildBucket('test')
+            ->set('allow_mult', true)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+    }
+
+    public function testFetch2()
+    {
+        $command = (new Command\Builder\FetchBucketProperties(static::$riak))
+            ->buildBucket('test')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+
+        $bucket = $response->getBucket();
+        $this->assertNotEmpty($bucket->getProperties());
+        $this->assertTrue($bucket->getProperty('allow_mult'));
+    }
+
+    public function testFetchAndStoreHllPrecision()
+    {
+        if (static::$hll_present) {
+            $command = (new Command\Builder\FetchBucketProperties(static::$riak))
+                ->buildBucket('test' . md5(rand(0, 99) . time()), static::HLL_BUCKET_TYPE)
+                ->build();
+
+            $bucket = $command->execute()->getBucket();
+            $this->assertNotEmpty($bucket->getProperties());
+            $this->assertEquals(14, $bucket->getProperty('hll_precision'));
+
+            $command = (new Command\Builder\SetBucketProperties(static::$riak))
+                ->buildBucket('test', static::HLL_BUCKET_TYPE)
+                ->set('hll_precision', 12)
+                ->build();
+
+            $response = $command->execute();
+
+            $this->assertEquals('204', $response->getCode(), $response->getMessage());
+        } else {
+            throw new \PHPUnit_Framework_SkippedTestError("hlls bucket type is not enabled and activated, skipping");
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/CounterOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/CounterOperationsTest.php
new file mode 100644
index 0000000000..6e4548c36e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/CounterOperationsTest.php
@@ -0,0 +1,155 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Class CounterTest
+ *
+ * Functional tests related to Counter CRDTs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class CounterOperationsTest extends TestCase
+{
+    private static $key = '';
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key based on time
+        static::$key = md5(rand(0, 99) . time());
+    }
+
+    public function testIncrementNewWithoutKey()
+    {
+        // build an object
+        $command = (new Command\Builder\IncrementCounter(static::$riak))
+            ->withIncrement(1)
+            ->buildBucket('visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode());
+        $this->assertNotEmpty($response->getLocation());
+    }
+
+    public function testFetchNotFound()
+    {
+        $command = (new Command\Builder\FetchCounter(static::$riak))
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+    }
+
+    /**
+     * @depends      testFetchNotFound
+     */
+    public function testIncrementNewWithKey()
+    {
+        $command = (new Command\Builder\IncrementCounter(static::$riak))
+            ->withIncrement(1)
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 204 - No Content
+        // this is wonky, its not 201 because the key may have been generated on another node
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEmpty($response->getLocation());
+    }
+
+    /**
+     * @depends      testIncrementNewWithKey
+     */
+    public function testFetchOk()
+    {
+        $command = (new Command\Builder\FetchCounter(static::$riak))
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Counter', $response->getCounter());
+        $this->assertNotEmpty($response->getCounter()->getData());
+        $this->assertTrue(is_integer($response->getCounter()->getData()));
+        $this->assertEquals(1, $response->getCounter()->getData());
+    }
+
+    /**
+     * @depends      testFetchOk
+     */
+    public function testIncrementExisting()
+    {
+        $command = (new Command\Builder\IncrementCounter(static::$riak))
+            ->withIncrement(1)
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testIncrementExisting
+     */
+    public function testFetchOk2()
+    {
+        $command = (new Command\Builder\FetchCounter(static::$riak))
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Counter', $response->getCounter());
+        $this->assertNotEmpty($response->getCounter()->getData());
+        $this->assertTrue(is_integer($response->getCounter()->getData()));
+        $this->assertEquals(2, $response->getCounter()->getData());
+    }
+
+    /**
+     * @depends      testFetchOk
+     */
+    public function testDecrementExisting()
+    {
+        $command = (new Command\Builder\IncrementCounter(static::$riak))
+            ->withIncrement(-1)
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testDecrementExisting
+     */
+    public function testFetchOk3()
+    {
+        $command = (new Command\Builder\FetchCounter(static::$riak))
+            ->buildLocation(static::$key, 'visits', static::COUNTER_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Counter', $response->getCounter());
+        $this->assertNotEmpty($response->getCounter()->getData());
+        $this->assertTrue(is_integer($response->getCounter()->getData()));
+        $this->assertEquals(1, $response->getCounter()->getData());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/GSetOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/GSetOperationsTest.php
new file mode 100644
index 0000000000..0c303675d1
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/GSetOperationsTest.php
@@ -0,0 +1,141 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to GSet CRDTs
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class GSetTest extends TestCase
+{
+    /**
+     * Key to be used for tests
+     *
+     * @var string
+     */
+    private static $key = '';
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key based on time
+        static::$key = md5(rand(0, 99) . time());
+
+        try
+        {
+            // Skip this suite if the "gsets" bucket type is not present
+            $command = (new Command\Builder\FetchBucketProperties(static::$riak))
+                ->buildBucket('test', static::GSET_BUCKET_TYPE)
+                ->build();
+
+            $response = $command->execute();
+
+            if (!$response->isSuccess() || $response->getCode() != 200) {
+                throw new \PHPUnit_Framework_SkippedTestSuiteError("gsets bucket type is not enabled and activated, skipping");
+            }
+        }
+        catch (\Exception $ex)
+        {
+            throw new \PHPUnit_Framework_SkippedTestSuiteError("gsets bucket type is not enabled and activated, skipping");
+        }
+    }
+
+    public function testAddWithoutKey()
+    {
+        // build an object
+        $command = (new Command\Builder\UpdateGSet(static::$riak))
+            ->add('gosabres poked you.')
+            ->add('phprocks viewed your profile.')
+            ->add('phprocks started following you.')
+            ->buildBucket('default', static::GSET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode());
+        $this->assertNotEmpty($response->getLocation());
+    }
+
+    public function testFetchNotFound()
+    {
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'default', static::GSET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+    }
+
+    /**
+     * @depends      testFetchNotFound
+     */
+    public function testAddNewWithKey()
+    {
+        $command = (new Command\Builder\UpdateGSet(static::$riak))
+            ->add('Sabres')
+            ->add('Canadiens')
+            ->add('Bruins')
+            ->add('Maple Leafs')
+            ->add('Senators')
+            ->add('Red Wings')
+            ->add('Thrashers')
+            ->buildLocation(static::$key, 'Teams', static::GSET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 204 - No Content
+        // this is wonky, its not 201 because the key may have been generated on another node
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEmpty($response->getLocation());
+
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::GSET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $response->getSet());
+        $this->assertNotEmpty($response->getSet()->getData());
+        $this->assertTrue(is_array($response->getSet()->getData()));
+        $this->assertEquals(7, count($response->getSet()->getData()));
+        $this->assertEmpty($response->getSet()->getContext());
+    }
+
+    /**
+     * @depends      testAddNewWithKey
+     */
+    public function testAddAnotherNew()
+    {
+        // add without context
+        $command = (new Command\Builder\UpdateGSet(static::$riak))
+            ->add('Lightning')
+            ->buildLocation(static::$key, 'Teams', static::GSET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::GSET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $response->getSet());
+        $this->assertNotEmpty($response->getSet()->getData());
+        $this->assertTrue(is_array($response->getSet()->getData()));
+        $this->assertEquals(8, count($response->getSet()->getData()));
+        $this->assertEmpty($response->getSet()->getContext());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/HllOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/HllOperationsTest.php
new file mode 100644
index 0000000000..8828432151
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/HllOperationsTest.php
@@ -0,0 +1,167 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to Hll CRDTs
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class HllOperationsTest extends TestCase
+{
+    /**
+     * Key to be used for tests
+     *
+     * @var string
+     */
+    private static $key = '';
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key based on time
+        static::$key = md5(rand(0, 99) . time());
+
+        try
+        {
+            // Skip this suite if the "hlls" bucket type is not present
+            $command = (new Command\Builder\FetchBucketProperties(static::$riak))
+                ->buildBucket('test', static::HLL_BUCKET_TYPE)
+                ->build();
+
+            $response = $command->execute();
+
+            if (!$response->isSuccess() || $response->getCode() != 200) {
+                throw new \PHPUnit_Framework_SkippedTestSuiteError("hlls bucket type is not enabled and activated, skipping");
+            }
+        }
+        catch (\Exception $ex)
+        {
+            throw new \PHPUnit_Framework_SkippedTestSuiteError("hlls bucket type is not enabled and activated, skipping");
+        }
+    }
+
+    public function testAddWithoutKey()
+    {
+        // build an object
+        $command = (new Command\Builder\UpdateHll(static::$riak))
+            ->add('gosabres poked you.')
+            ->add('phprocks viewed your profile.')
+            ->add('phprocks started following you.')
+            ->buildBucket('default', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode());
+        $this->assertNotEmpty($response->getLocation());
+    }
+
+    public function testFetchNotFound()
+    {
+        $command = (new Command\Builder\FetchHll(static::$riak))
+            ->buildLocation(static::$key, 'default', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+    }
+
+    /**
+     * @depends      testFetchNotFound
+     */
+    public function testAddNewWithKey()
+    {
+        $command = (new Command\Builder\UpdateHll(static::$riak))
+            ->add('Sabres')
+            ->add('Canadiens')
+            ->add('Bruins')
+            ->add('Maple Leafs')
+            ->add('Senators')
+            ->add('Red Wings')
+            ->add('Thrashers')
+            ->buildLocation(static::$key, 'Teams', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 204 - No Content
+        // this is wonky, its not 201 because the key may have been generated on another node
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEmpty($response->getLocation());
+
+        $command = (new Command\Builder\FetchHll(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Hll', $response->getHll());
+        $this->assertNotEmpty($response->getHll()->getData());
+        $this->assertTrue(is_int($response->getHll()->getData()));
+        $this->assertEquals(7, $response->getHll()->getData());
+    }
+
+    /**
+     * @depends      testAddNewWithKey
+     */
+    public function testAddExisting()
+    {
+        $command = (new Command\Builder\UpdateHll(static::$riak))
+            ->add('Thrashers')
+            ->buildLocation(static::$key, 'Teams', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchHll(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Hll', $response->getHll());
+        $this->assertNotEmpty($response->getHll()->getData());
+        $this->assertTrue(is_int($response->getHll()->getData()));
+        $this->assertEquals(7, $response->getHll()->getData());
+    }
+
+    /**
+     * @depends      testAddNewWithKey
+     */
+    public function testAddExistingAndNew()
+    {
+        $command = (new Command\Builder\UpdateHll(static::$riak))
+            ->add('Penguins')
+            ->add('Sabres')
+            ->buildLocation(static::$key, 'Teams', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchHll(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::HLL_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Hll', $response->getHll());
+        $this->assertNotEmpty($response->getHll()->getData());
+        $this->assertTrue(is_int($response->getHll()->getData()));
+        $this->assertEquals(8, $response->getHll()->getData());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/MapOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/MapOperationsTest.php
new file mode 100644
index 0000000000..b2da728b05
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/MapOperationsTest.php
@@ -0,0 +1,236 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to Counter CRDTs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class MapOperationsTest extends TestCase
+{
+    /**
+     * Key to be used for tests
+     *
+     * @var string
+     */
+    private static $key = '';
+
+    /**
+     * Array of context generated from working with the same Set
+     *
+     * @var array
+     */
+    private static $context = [];
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key based on time
+        static::$key = md5(rand(0, 99) . time());
+    }
+
+    public function testAddWithoutKey()
+    {
+        // build a map update command
+        $command = (new Command\Builder\UpdateMap(static::$riak))
+            ->updateRegister('favorite', 'Buffalo Sabres')
+            ->buildBucket('default', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode());
+        $this->assertNotEmpty($response->getLocation());
+    }
+
+    public function testFetchNotFound()
+    {
+        $command = (new Command\Builder\FetchMap(static::$riak))
+            ->buildLocation(static::$key, 'default', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+    }
+
+    /**
+     * @depends      testFetchNotFound
+     */
+    public function testAddNewWithKey()
+    {
+        $updateSetBuilder = (new Command\Builder\UpdateSet(static::$riak))
+            ->add('Sabres');
+
+        $updateCounterBuilder = (new Command\Builder\IncrementCounter(static::$riak))
+            ->withIncrement(1);
+
+        $command = (new Command\Builder\UpdateMap(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->updateCounter('teams', $updateCounterBuilder)
+            ->updateSet('ATLANTIC_DIVISION', $updateSetBuilder)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 204 - No Content
+        // this is wonky, its not 201 because the key may have been generated on another node
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEmpty($response->getLocation());
+
+        $command = (new Command\Builder\FetchMap(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $map = $response->getMap();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Map', $response->getMap());
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $map->getSet('ATLANTIC_DIVISION'));
+        $this->assertEquals(1, count($map->getSet('ATLANTIC_DIVISION')->getData()));
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Counter', $map->getCounter('teams'));
+        $this->assertEquals(1, $map->getCounter('teams')->getData());
+        $this->assertNotEmpty($map->getContext());
+
+        static::$context[] = $response->getMap()->getContext();
+    }
+
+    /**
+     * @depends      testAddNewWithKey
+     */
+    public function testAddExisting()
+    {
+        $updateSetBuilder = (new Command\Builder\UpdateSet(static::$riak))
+            ->add('Bruins')
+            ->add('Thrashers');
+
+        $updateCounterBuilder = (new Command\Builder\IncrementCounter(static::$riak))
+            ->withIncrement(2);
+
+        // build a map update command
+        $command = (new Command\Builder\UpdateMap(static::$riak))
+            ->updateFlag('expansion_year', TRUE)
+            ->updateCounter('teams', $updateCounterBuilder)
+            ->updateSet('ATLANTIC_DIVISION', $updateSetBuilder)
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchMap(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $map = $response->getMap();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Map', $response->getMap());
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $map->getSet('ATLANTIC_DIVISION'));
+        $this->assertEquals(3, count($map->getSet('ATLANTIC_DIVISION')->getData()));
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Counter', $map->getCounter('teams'));
+        $this->assertEquals(3, $map->getCounter('teams')->getData());
+
+        $this->assertTrue($map->getFlag('expansion_year'));
+
+        static::$context[] = $response->getMap()->getContext();
+    }
+
+    /**
+     * @depends      testAddExisting
+     *
+     * @expectedException \Basho\Riak\DataType\Exception
+     */
+    public function testRemoveExisting()
+    {
+        $updateSetBuilder = (new Command\Builder\UpdateSet(static::$riak))
+            ->remove('Thrashers')
+            ->add('Lightning');
+
+        // build a map update command with stale context
+        $command = (new Command\Builder\UpdateMap(static::$riak))
+            ->removeFlag('expansion_year')
+            ->updateSet('ATLANTIC_DIVISION', $updateSetBuilder)
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->withContext(static::$context[0])
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchMap(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $map = $response->getMap();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Map', $response->getMap());
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $map->getSet('ATLANTIC_DIVISION'));
+        $this->assertEquals(3, count($map->getSet('ATLANTIC_DIVISION')->getData()));
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Counter', $map->getCounter('teams'));
+        $this->assertEquals(3, $map->getCounter('teams')->getData());
+
+        $this->assertTrue($map->getFlag('expansion_year'));
+
+        static::$context[] = $response->getMap()->getContext();
+    }
+
+    /**
+     * @depends      testRemoveExisting
+     */
+    public function testAddMapExisting()
+    {
+        $updateMapBuilder = (new Command\Builder\UpdateMap(static::$riak))
+            ->updateFlag('notifications', FALSE)
+            ->updateRegister('label', 'Email Alerts');
+
+        // build a map update command
+        $command = (new Command\Builder\UpdateMap(static::$riak))
+            ->updateMap('preferences', $updateMapBuilder)
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchMap(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::MAP_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+        $map = $response->getMap();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Map', $response->getMap());
+
+        $this->assertInstanceOf('Basho\Riak\DataType\Map', $map->getMap('preferences'));
+        $this->assertEquals('Email Alerts', $map->getMap('preferences')->getRegister('label'));
+        $this->assertFalse($map->getMap('preferences')->getFlag('notifications'));
+
+        static::$context[] = $response->getMap()->getContext();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/MapReduceOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/MapReduceOperationsTest.php
new file mode 100644
index 0000000000..640bf19211
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/MapReduceOperationsTest.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to Counter CRDTs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class MapReduceOperationsTest extends TestCase
+{
+    protected static $mr_content = [
+        'p0' => "Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversation?'",
+        'p1' => "So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.",
+        'p2' => "The rabbit-hole went straight on like a tunnel for some way, and then dipped suddenly down, so suddenly that Alice had not a moment to think about stopping herself before she found herself falling down a very deep well."
+    ];
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        foreach (static::$mr_content as $key => $value) {
+            $command = (new Command\Builder\StoreObject(static::$riak))
+                ->buildObject($value)
+                ->buildLocation($key, 'phptest_mr')
+                ->build();
+
+            $command->execute();
+        }
+    }
+
+    public static function tearDownAfterClass()
+    {
+        foreach (static::$mr_content as $key => $object) {
+            $command = (new Command\Builder\DeleteObject(static::$riak))
+                ->buildLocation($key, 'phptest_mr')
+                ->build();
+
+            $command->execute();
+        }
+
+        parent::tearDownAfterClass();
+    }
+
+    public function testFetch()
+    {
+        $command = (new Command\Builder\MapReduce\FetchObjects(static::$riak))
+            ->addBucketInput(new Riak\Bucket('phptest_mr'))
+            ->buildMapPhase('', '',
+                "function(v) {var m = v.values[0].data.toLowerCase().match(/[A-Za-z]*/g); var r = []; for(var i in m) {if(m[i] != '') {var o = {};o[m[i]] = 1;r.push(o);}}return r;}")
+            ->buildReducePhase('', '',
+                "function(v) {var r = {};for(var i in v) {for(var w in v[i]) {if(w in r) r[w] += v[i][w]; else r[w] = v[i][w];}}return [r];}")
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+
+        $results = $response->getResults();
+        $this->assertEquals(8, $results[0]->the);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/ObjectOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/ObjectOperationsTest.php
new file mode 100644
index 0000000000..911da779e0
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/ObjectOperationsTest.php
@@ -0,0 +1,215 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to Key-Value objects
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class ObjectOperationsTest extends TestCase
+{
+    private static $key = '';
+
+    /**
+     * @var \Basho\Riak\DataObject|null
+     */
+    private static $object = NULL;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key based on time
+        static::$key = md5(rand(0, 99) . time());
+    }
+
+    public function testStoreNewWithoutKey()
+    {
+        // build an object
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->buildObject('some_data')
+            ->buildBucket('users')
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode());
+        $this->assertNotEmpty($response->getLocation());
+        $this->assertInstanceOf('\Basho\Riak\Location', $response->getLocation());
+    }
+
+    public function testFetchNotFound()
+    {
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+    }
+
+    /**
+     * @depends      testFetchNotFound
+     */
+    public function testStoreNewWithKey()
+    {
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->buildObject('some_data')
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 204 - No Content
+        // this is wonky, its not 201 because the key may have been generated on another node
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEmpty($response->getLocation());
+    }
+
+    /**
+     * @depends      testStoreNewWithKey
+     */
+    public function testFetchOk()
+    {
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataObject', $response->getObject());
+        $this->assertEquals('some_data', $response->getObject()->getData());
+        $this->assertNotEmpty($response->getObject()->getVclock());
+
+        // confirm we are using the HTTP api bridge
+        if (static::$riak->getApi() instanceof \Basho\Riak\Api\Http) {
+            $headers = static::$riak->getApi()->getResponseHeaders();
+            $this->assertNotEmpty($headers);
+            $this->assertNotEmpty($headers["Last-Modified"]);
+            $this->assertNotEmpty(new \DateTime($headers["Last-Modified"]));
+        }
+
+        static::$object = $response->getObject();
+    }
+
+    /**
+     * @depends      testFetchOk
+     */
+    public function testStoreExisting()
+    {
+        $object = static::$object;
+
+        $object->setData('some_new_data');
+
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testStoreExisting
+     */
+    public function testDelete()
+    {
+        $command = (new Command\Builder\DeleteObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testDelete
+     */
+    public function testFetchDeleted()
+    {
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+
+        // deleted keys leave behind a tombstone with their causal context, aka vclock unless delete_immediate = 1
+        //$this->assertNotEmpty($response->getVclock());
+    }
+
+    public function testListKeys()
+    {
+        $bucket = 'list-keys-php';
+        $keys = ['key1','key2','key3','key4','key5'];
+
+        $builder = (new Command\Builder\StoreObject(static::$riak))
+            ->buildObject(true);
+
+        foreach($keys as $key) {
+            $builder->buildLocation($key, $bucket)->build()->execute();
+        }
+
+        $response = (new Command\Builder\ListObjects(static::$riak))
+            ->buildBucket($bucket)
+            ->acknowledgeRisk(true)
+            ->build()
+            ->execute();
+
+        $this->assertTrue($response->getKeys() >= count($keys));
+
+        $found = [];
+        foreach ($response->getKeys() as $location) {
+            if (in_array($location->getKey(), $keys)) {
+                $found[$location->getKey()] = 1;
+            }
+        }
+
+        $this->assertEquals(count($found), count($keys));
+    }
+
+    public function testFetchAssociativeArray()
+    {
+        $data = ['myData' => 42];
+
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->buildJsonObject($data)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+
+        // Fetch as associative array
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->withDecodeAsAssociative()
+            ->build();
+
+        $response = $command->execute();
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals($data, $response->getObject()->getData());
+        $this->assertEquals('array', gettype($response->getObject()->getData()));
+
+        // Fetch normal to get as stdClass object
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'users')
+            ->build();
+
+        $response = $command->execute();
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals('object', gettype($response->getObject()->getData()));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/PingTest.php b/vendor/phpfastcache/riak-client/tests/functional/PingTest.php
new file mode 100644
index 0000000000..012f19cb40
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/PingTest.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Functional test to ping Riak
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class PingTest extends TestCase
+{
+    public function testPing()
+    {
+        // build an object
+        $command = (new Command\Builder\Ping(static::$riak))
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('200', $response->getCode());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/PreflistTest.php b/vendor/phpfastcache/riak-client/tests/functional/PreflistTest.php
new file mode 100644
index 0000000000..8e9d608199
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/PreflistTest.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Class PreflistTest
+ *
+ * Functional tests related to Riak Preference lists
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class PreflistTest extends TestCase
+{
+    public function testFetch()
+    {
+        // build a store object command, get the location of the newly minted object
+        $location = (new Command\Builder\StoreObject(static::$riak))
+            ->buildObject('some_data')
+            ->buildBucket('users')
+            ->build()
+            ->execute()
+            ->getLocation();
+
+        // build a fetch command
+        $command = (new Command\Builder\FetchPreflist(static::$riak))
+            ->atLocation($location)
+            ->build();
+
+        try {
+            $response = $command->execute();
+            if ($response->getCode() == 400) {
+                $this->markTestSkipped('preflists are not supported');
+            } else {
+                $this->assertEquals(200, $response->getCode());
+                $this->assertNotEmpty($response->getObject()->getData()->preflist);
+                $this->assertObjectHasAttribute("partition", $response->getObject()->getData()->preflist[0]);
+                $this->assertObjectHasAttribute("node", $response->getObject()->getData()->preflist[0]);
+                $this->assertObjectHasAttribute("primary", $response->getObject()->getData()->preflist[0]);
+            }
+        } catch (\Basho\Riak\Exception $e) {
+            $this->markTestSkipped('preflists are not supported');
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/SearchOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/SearchOperationsTest.php
new file mode 100644
index 0000000000..0f820aaa7d
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/SearchOperationsTest.php
@@ -0,0 +1,261 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to Counter CRDTs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class SearchOperationsTest extends TestCase
+{
+    const SCHEMA = '_yz_default';
+    const INDEX = 'player_index';
+
+    protected static $default_schema = '';
+
+    protected static $search_content = [
+        'tennis'       => ['name_s' => 'T. Ennis', 'forward_i' => 1, 'position_s' => 'LW'],
+        'zgirgensons'  => ['name_s' => 'Z. Girgensons', 'forward_i' => 1, 'position_s' => 'C'],
+        'rristolainen' => ['name_s' => 'R. Ristolainen', 'forward_i' => 0, 'position_s' => 'RD'],
+        'zbogosian'    => ['name_s' => 'Z. Bogosian', 'forward_i' => 0, 'position_s' => 'LD'],
+        'alindback'    => ['name_s' => 'A. Lindback', 'forward_i' => 0, 'position_s' => 'G'],
+        'bgionta'      => ['name_s' => 'B. Gionta', 'forward_i' => 1, 'position_s' => 'RW', 'captain_i' => 1],
+    ];
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        $response = (new Command\Builder\Search\FetchIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->build()
+            ->execute();
+
+        if ($response->getCode() == '200') {
+            (new Command\Builder\Search\DissociateIndex(static::$riak))
+                ->buildBucket('sabres', self::SEARCH_BUCKET_TYPE)
+                ->build()
+                ->execute();
+
+            (new Command\Builder\Search\DeleteIndex(static::$riak))
+                ->withName(static::INDEX)
+                ->build()
+                ->execute();
+        }
+    }
+
+    public static function tearDownAfterClass()
+    {
+        foreach (static::$search_content as $key => $object) {
+            (new Command\Builder\DeleteObject(static::$riak))
+                ->buildLocation($key, 'sabres', self::SEARCH_BUCKET_TYPE)
+                ->build()
+                ->execute();
+        }
+
+        parent::tearDownAfterClass();
+    }
+
+    public function testFetchSchema()
+    {
+        $response = (new Command\Builder\Search\FetchSchema(static::$riak))
+            ->withName('_yz_default')
+            ->build()
+            ->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertEquals('application/xml', $response->getContentType());
+        $this->assertNotEmpty($response->getSchema());
+
+        static::$default_schema = $response->getSchema();
+    }
+
+    /**
+     * @depends      testFetchSchema
+     */
+    public function testStoreSchema()
+    {
+        $command = (new Command\Builder\Search\StoreSchema(static::$riak))
+            ->withName('users')
+            ->withSchemaString(static::$default_schema)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+    }
+
+    public function testFetchIndexNotFound()
+    {
+        $command = (new Command\Builder\Search\FetchIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode(), $response->getMessage());
+    }
+
+    /**
+     * @depends      testFetchIndexNotFound
+     */
+    public function testStoreIndex()
+    {
+        $command = (new Command\Builder\Search\StoreIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->usingSchema('_yz_default')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+
+        $command = (new Command\Builder\Search\FetchIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->build();
+
+        $response = $command->execute();
+
+        // indexes take time to propagate between solr and Riak
+        $attempts = 1;
+        while ($response->getCode() <> '200' || $attempts <= 5) {
+            sleep(1);
+            $response = $command->execute();
+            $attempts++;
+        }
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertEquals(static::SCHEMA, $response->getIndex()->schema);
+    }
+
+    /**
+     * @depends      testStoreIndex
+     */
+    public function testAssociateIndex()
+    {
+        $command = (new Command\Builder\Search\AssociateIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->buildBucket('sabres', self::SEARCH_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+    }
+
+    /**
+     * @depends      testAssociateIndex
+     */
+    public function testSearch()
+    {
+        foreach (static::$search_content as $key => $object) {
+            $command = (new Command\Builder\StoreObject(static::$riak))
+                ->buildObject($object, ['Content-Type' => 'application/json'])
+                ->buildLocation($key, 'sabres', self::SEARCH_BUCKET_TYPE)
+                ->build();
+
+            $command->execute();
+        }
+
+        sleep(5);
+
+        $command = (new Command\Builder\Search\FetchObjects(static::$riak))
+            ->withQuery('name_s:*Gi*')
+            ->withIndexName(static::INDEX)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertEquals(2, $response->getNumFound());
+
+        $docs = $response->getDocs();
+        foreach ($docs as $d) {
+            $this->assertTrue('B. Gionta' == $d->name_s || 'Z. Girgensons' == $d->name_s);
+        }
+    }
+
+    /**
+     * @depends      testSearch
+     */
+    public function testSearchWithSort()
+    {
+        $command = (new Command\Builder\Search\FetchObjects(static::$riak))
+            ->withQuery('name_s:*Gi*')
+            ->withIndexName(static::INDEX)
+            ->withSortField("name_s asc")
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertEquals(2, $response->getNumFound());
+        $this->assertEquals('B. Gionta', $response->getDocs()[0]->name_s);
+    }
+
+    /**
+     * Tests handling of a badly formed query
+     *
+     * @depends      testAssociateIndex
+     */
+    public function testBadSearch()
+    {
+        $response = (new Command\Builder\Search\FetchObjects(static::$riak))
+            ->withIndexName(static::INDEX)
+            ->withQuery('ffffff')
+            ->build()
+            ->execute();
+
+        $this->assertEquals('400', $response->getCode(), $response->getMessage());
+        $this->assertEmpty($response->getNumFound());
+        $this->assertEmpty($response->getDocs());
+    }
+
+    /**
+     * @depends      testSearch
+     */
+    public function testDissociateIndex()
+    {
+        $command = (new Command\Builder\Search\DissociateIndex(static::$riak))
+            ->buildBucket('sabres', self::SEARCH_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+    }
+
+    /**
+     * @depends      testDissociateIndex
+     */
+    public function testDeleteIndex()
+    {
+        $command = (new Command\Builder\Search\DeleteIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode(), $response->getMessage());
+
+        $command = (new Command\Builder\Search\FetchIndex(static::$riak))
+            ->withName(static::INDEX)
+            ->build();
+
+        $response = $command->execute();
+
+        // indexes take time to propagate between solr and Riak
+        $attempts = 1;
+        while ($response->getCode() <> '404' || $attempts <= 5) {
+            sleep(1);
+            $response = $command->execute();
+            $attempts++;
+        }
+
+        $this->assertEquals('404', $response->getCode(), $response->getMessage());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/SecondaryIndexOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/SecondaryIndexOperationsTest.php
new file mode 100644
index 0000000000..3aae0caa5e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/SecondaryIndexOperationsTest.php
@@ -0,0 +1,299 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+use Basho\Riak\DataObject as RObject;
+
+/**
+ * Functional tests related to secondary indexes
+ *
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+class SecondaryIndexOperationsTest extends TestCase
+{
+    private static $key = '';
+    private static $bucket = '';
+
+    /**
+     * @var \Basho\Riak\DataObject|null
+     */
+    private static $object = NULL;
+
+    /**
+     * @var array|null
+     */
+    private static $vclock = NULL;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key/bucket based on time
+        static::$key = md5(rand(0, 99) . time());
+        static::$bucket = md5(rand(0, 99) . time());
+    }
+
+    public function testStoreObjectWithIndexes()
+    {
+        $object = new RObject('person');
+        $object->addValueToIndex('lucky_numbers_int', 42);
+        $object->addValueToIndex('lucky_numbers_int', 64);
+        $object->addValueToIndex('lastname_bin', 'Knuth');
+
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::$key, 'Users', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testStoreObjectWithIndexes
+     */
+    public function testFetchObjectWithIndexes()
+    {
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'Users', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataObject', $response->getObject());
+        $this->assertEquals('person', $response->getObject()->getData());
+        $this->assertNotEmpty($response->getObject()->getVClock());
+        $indexes = $response->getObject()->getIndexes();
+        $this->assertEquals($indexes['lucky_numbers_int'], [42, 64]);
+        $this->assertEquals($indexes['lastname_bin'], ['Knuth']);
+
+        static::$object = $response->getObject();
+        static::$vclock = $response->getObject()->getVClock();
+    }
+
+    /**
+     * @depends      testFetchObjectWithIndexes
+     */
+    public function testRemoveIndexes()
+    {
+        $object = static::$object;
+        $object->removeValueFromIndex('lucky_numbers_int', 64);
+        $object->removeValueFromIndex('lastname_bin', 'Knuth');
+        $object->setVclock(static::$vclock);
+
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::$key, 'Users', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        // TODO: internalize Vclock to Riak\Object.
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'Users', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataObject', $response->getObject());
+        $this->assertEquals('person', $response->getObject()->getData());
+        $indexes = $response->getObject()->getIndexes();
+        $this->assertEquals($indexes['lucky_numbers_int'], [42]);
+    }
+
+    public function testSetupIndexObjects()
+    {
+        for($x = 0; $x <= 1000; $x++) {
+            $object = (new RObject('student'.$x))
+                        ->addValueToIndex('lucky_numbers_int', $x) // 0,1,2...
+                        ->addValueToIndex('group_int', $x % 2)     // 0,0,1,1,2,2,3,3,...
+                        ->addValueToIndex('grade_bin', chr(65 + ($x % 6))) // A,B,C,D,E,F,A...
+                        ->addValueToIndex('lessThan500_bin', $x < 500 ? 'less' : 'more');
+
+            $command = (new Command\Builder\StoreObject(static::$riak))
+                ->withObject($object)
+                ->buildLocation('student'.$x, 'Students'.static::$bucket, static::LEVELDB_BUCKET_TYPE)
+                ->build();
+
+            $response = $command->execute();
+            $this->assertEquals('204', $response->getCode());
+        }
+    }
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testScalarQuery()
+    {
+        $command = (new Command\Builder\QueryIndex(static::$riak))
+                        ->buildBucket('Students'.static::$bucket, static::LEVELDB_BUCKET_TYPE)
+                        ->withIndexName('lucky_numbers_int')
+                        ->withScalarValue(5)
+                        ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals(1, count($response->getResults()));
+        $this->assertEquals('student5', $response->getResults()[0]);
+    }
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testRangeQuery()
+    {
+        $command = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students'.static::$bucket, static::LEVELDB_BUCKET_TYPE)
+            ->withIndexName('grade_bin')
+            ->withRangeValue('A', 'B')
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $matches = $response->getResults();
+        sort($matches, SORT_NATURAL | SORT_FLAG_CASE);
+        $this->assertEquals(334, count($matches));
+        $this->assertEquals(['student0','student1','student6','student7'], array_slice($matches, 0, 4));
+    }
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testReturnTerms()
+    {
+        $keysAndTerms = [['A' => 'student0'], ['B' => 'student1'], ['A' => 'student6'], ['B' => 'student7']];
+
+        $command = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students'.static::$bucket, static::LEVELDB_BUCKET_TYPE)
+            ->withIndexName('grade_bin')
+            ->withRangeValue('A', 'B')
+            ->withReturnTerms(true)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $matches = $response->getResults();
+        usort($matches, function($a, $b) { return strnatcmp(current($a), current($b)); });
+
+        $this->assertEquals(334, count($matches));
+        $this->assertTrue($response->hasReturnTerms());
+        $this->assertEquals($keysAndTerms, array_slice($matches, 0, 4));
+    }
+
+
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testGettingKeysWithContinuationWorks()
+    {
+        $builder = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students'.static::$bucket, static::LEVELDB_BUCKET_TYPE)
+            ->withIndexName('lucky_numbers_int')
+            ->withRangeValue(0,3)
+            ->withMaxResults(3);
+
+        // Get first page
+        $command = $builder->build();
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals(3, count($response->getResults()));
+        $this->assertNotNull($response->getContinuation());
+        $this->assertFalse($response->isDone());
+
+        // Get second page
+        $builder = $builder->withContinuation($response->getContinuation());
+        $command2 = $builder->build();
+
+        $response2 = $command2->execute();
+
+        $this->assertEquals('200', $response2->getCode());
+        $this->assertEquals(1, count($response2->getResults()));
+        $this->assertNull($response2->getContinuation());
+        $this->assertTrue($response2->isDone());
+    }
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testTimeoutWorks()
+    {
+        $this->markTestSkipped('It is a weak test since it depends on local processing speed.');
+
+        $builder = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students' . static::$bucket, static::LEVELDB_BUCKET_TYPE)
+            ->withIndexName('lucky_numbers_int')
+            ->withRangeValue(0, 1000)
+            ->withTimeout(1);
+
+        // Get first page
+        $command = $builder->build();
+        $response = $command->execute();
+        $this->assertFalse($response->isSuccess());
+        $this->assertContains($response->getCode(), ['500', '503']);
+        $this->assertEquals(0, count($response->getResults()));
+        $this->assertNull($response->getContinuation());
+        $this->assertTrue($response->isDone());
+    }
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testUsingPaginationSortWillSortResultsWhilePaging()
+    {
+        $builder = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students'.static::$bucket, static::LEVELDB_BUCKET_TYPE)
+            ->withIndexName('lucky_numbers_int')
+            ->withRangeValue(0,500)
+            ->withMaxResults(10)
+            ->withReturnTerms(true);
+
+        // Get first page
+        $command = $builder->build();
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals(['0' => 'student0'], $response->getResults()[0]);
+
+        // Get second page
+        $builder = $builder->withContinuation($response->getContinuation());
+        $command2 = $builder->build();
+
+        $response2 = $command2->execute();
+
+        $this->assertEquals('200', $response2->getCode());
+        $this->assertEquals(10, count($response2->getResults()));
+        $this->assertEquals(['10' => 'student10'], $response2->getResults()[0]);
+    }
+
+
+    /**
+     * @depends      testSetupIndexObjects
+     */
+    public function testUsingTermRegexOnARangeFiltersTheResults()
+    {
+        $builder = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students' . static::$bucket, static::LEVELDB_BUCKET_TYPE)
+            ->withIndexName('lessThan500_bin')
+            ->withRangeValue('a', 'z')
+            ->withTermFilter('^less');
+
+        // Get first page
+        $command = $builder->build();
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals(500, count($response->getResults()));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/SecurityFeaturesTest.php b/vendor/phpfastcache/riak-client/tests/functional/SecurityFeaturesTest.php
new file mode 100644
index 0000000000..51520934f3
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/SecurityFeaturesTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Functional tests verifying TSL features
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class SecurityFeaturesTest extends TestCase
+{
+    public function testUnauthorized()
+    {
+        $nodes = [
+            (new Riak\Node\Builder())
+                ->atHost(static::getTestHost())
+                ->onPort(static::getTestSecurePort())
+                ->usingPasswordAuthentication('unauthorizeduser', 'hispassword')
+                ->withCertificateAuthorityFile(getcwd() . '/tools/test-ca/certs/cacert.pem')
+                ->build()
+        ];
+
+        $riak = new Riak($nodes);
+
+        // build an object
+        $command = (new Command\Builder\StoreObject($riak))
+            ->buildObject('some_data')
+            ->buildBucket('users')
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 401 - Unauthorized
+        $this->assertEquals('401', $response->getCode());
+    }
+
+    public function testPasswordAuth()
+    {
+        $nodes = [
+            (new Riak\Node\Builder())
+                ->atHost(static::getTestHost())
+                ->onPort(static::getTestSecurePort())
+                ->usingPasswordAuthentication('riakpass', 'Test1234')
+                ->withCertificateAuthorityFile(getcwd() . '/tools/test-ca/certs/cacert.pem')
+                ->build()
+        ];
+
+        $riak = new Riak($nodes);
+
+        // build an object
+        $command = (new Command\Builder\StoreObject($riak))
+            ->buildObject('some_data')
+            ->buildBucket('users')
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode(), $response->getMessage());
+        $this->assertNotEmpty($response->getLocation());
+        $this->assertInstanceOf('\Basho\Riak\Location', $response->getLocation());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/SetOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/SetOperationsTest.php
new file mode 100644
index 0000000000..b10a236dea
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/SetOperationsTest.php
@@ -0,0 +1,202 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak\Command;
+
+/**
+ * Functional tests related to Set CRDTs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class SetTest extends TestCase
+{
+    /**
+     * Key to be used for tests
+     *
+     * @var string
+     */
+    private static $key = '';
+
+    /**
+     * Array of context generated from working with the same Set
+     *
+     * @var array
+     */
+    private static $context = [];
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        // make completely random key based on time
+        static::$key = md5(rand(0, 99) . time());
+    }
+
+    public function testAddWithoutKey()
+    {
+        // build an object
+        $command = (new Command\Builder\UpdateSet(static::$riak))
+            ->add('gosabres poked you.')
+            ->add('phprocks viewed your profile.')
+            ->add('phprocks started following you.')
+            ->buildBucket('default', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 201 - Created
+        $this->assertEquals('201', $response->getCode());
+        $this->assertNotEmpty($response->getLocation());
+    }
+
+    public function testFetchNotFound()
+    {
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'default', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode());
+    }
+
+    /**
+     * @depends      testFetchNotFound
+     */
+    public function testAddNewWithKey()
+    {
+        $command = (new Command\Builder\UpdateSet(static::$riak))
+            ->add('Sabres')
+            ->add('Canadiens')
+            ->add('Bruins')
+            ->add('Maple Leafs')
+            ->add('Senators')
+            ->add('Red Wings')
+            ->add('Thrashers')
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // expects 204 - No Content
+        // this is wonky, its not 201 because the key may have been generated on another node
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEmpty($response->getLocation());
+
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $response->getSet());
+        $this->assertNotEmpty($response->getSet()->getData());
+        $this->assertTrue(is_array($response->getSet()->getData()));
+        $this->assertEquals(7, count($response->getSet()->getData()));
+        $this->assertNotEmpty($response->getSet()->getContext());
+
+        static::$context[] = $response->getSet()->getContext();
+    }
+
+    /**
+     * @depends      testAddNewWithKey
+     */
+    public function testAddAnotherNew()
+    {
+        // add without context
+        $command = (new Command\Builder\UpdateSet(static::$riak))
+            ->add('Lightning')
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $response->getSet());
+        $this->assertNotEmpty($response->getSet()->getData());
+        $this->assertTrue(is_array($response->getSet()->getData()));
+        $this->assertEquals(8, count($response->getSet()->getData()));
+
+        static::$context[] = $response->getSet()->getContext();
+    }
+
+    /**
+     * @depends      testAddNewWithKey
+     */
+    public function testRemoveExisting()
+    {
+        // using stale context
+        $command = (new Command\Builder\UpdateSet(static::$riak))
+            ->remove('Thrashers')
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->withContext(static::$context[0])
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $response->getSet());
+        $this->assertNotEmpty($response->getSet()->getData());
+        $this->assertTrue(is_array($response->getSet()->getData()));
+        $this->assertEquals(7, count($response->getSet()->getData()));
+
+        static::$context[] = $response->getSet()->getContext();
+    }
+
+    /**
+     * @depends      testRemoveExisting
+     */
+    public function testAddRemoveExisting()
+    {
+        // using latest context
+        $command = (new Command\Builder\UpdateSet(static::$riak))
+            ->add('Penguins')
+            ->add('Ducks')
+            ->remove('Lightning')
+            ->remove('Red Wings')
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->withContext(end(static::$context))
+            ->build();
+
+        $response = $command->execute();
+
+        // 204 - No Content
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\FetchSet(static::$riak))
+            ->buildLocation(static::$key, 'Teams', static::SET_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataType\Set', $response->getSet());
+        $this->assertNotEmpty($response->getSet()->getData());
+        $this->assertTrue(is_array($response->getSet()->getData()));
+        $this->assertEquals(7, count($response->getSet()->getData()));
+        $this->assertTrue(in_array('Ducks', $response->getSet()->getData()));
+        $this->assertFalse(in_array('Lightning', $response->getSet()->getData()));
+
+        static::$context[] = $response->getSet()->getContext();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/functional/TimeSeriesOperationsTest.php b/vendor/phpfastcache/riak-client/tests/functional/TimeSeriesOperationsTest.php
new file mode 100644
index 0000000000..fa40ccc27f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/functional/TimeSeriesOperationsTest.php
@@ -0,0 +1,291 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+use Basho\Riak\TimeSeries\Cell;
+
+/**
+ * Functional tests related to TimeSeries operations
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class TimeSeriesOperationsTest extends TestCase
+{
+    use TimeSeriesTrait;
+
+    protected static $ts15 = false;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        static::populateKey();
+
+        $response = (new Command\Builder\TimeSeries\DescribeTable(static::$riak))
+            ->withTable(static::$table)
+            ->build()
+            ->execute();
+
+        if ($response->getCode() == '404') {
+            (new Command\Builder\TimeSeries\Query(static::$riak))
+                ->withQuery(static::tableDefinition())
+                ->build()
+                ->execute();
+        }
+
+        $response = (new Command\Builder\TimeSeries\DescribeTable(static::$riak))
+            ->withTable(static::$tableBlob)
+            ->build()
+            ->execute();
+
+        if ($response->getCode() != '404') {
+            static::$ts15 = true;
+        }
+    }
+
+    public static function tearDownAfterClass()
+    {
+        parent::tearDownAfterClass();
+    }
+
+    public function testFetchTableDescriptionNotFound()
+    {
+        $command = (new Command\Builder\TimeSeries\DescribeTable(static::$riak))
+            ->withTable(static::$table . 'notfound')
+            ->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Query\Fetch', $command);
+
+        $response = $command->execute();
+
+        $this->assertEquals('404', $response->getCode(), $response->getMessage());
+    }
+
+    public function testCreateTable()
+    {
+        $command = (new Command\Builder\TimeSeries\Query(static::$riak))
+            ->withQuery(static::tableDefinition(static::$table . rand(0, 1000)))
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+    }
+
+    public function testFetchTableDescription()
+    {
+        $command = (new Command\Builder\TimeSeries\DescribeTable(static::$riak))
+            ->withTable(static::$table)
+            ->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Query\Fetch', $command);
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertNotEmpty($response->getResults());
+        $this->assertCount(7, $response->getResults());
+        $this->assertGreaterThanOrEqual(5, $response->getResult());
+    }
+
+    public function testFetchRowNotFound()
+    {
+        $response = (new Command\Builder\TimeSeries\FetchRow(static::$riak))
+            ->atKey(static::$key)
+            ->inTable(static::$table . 'notfound')
+            ->build()
+            ->execute();
+
+        $this->assertEquals('404', $response->getCode(), $response->getMessage());
+    }
+
+    public function testQueryNotFound()
+    {
+        $response = (new Command\Builder\TimeSeries\Query(static::$riak))
+            ->withQuery("select * from " . self::$table . " where time > 0 and time < 10 and region = 'South Atlantic' and state = 'South Carolina'")
+            ->build()
+            ->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+        $this->assertCount(0, $response->getResults());
+    }
+
+    public function testStoreRow()
+    {
+        $response = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$table)
+            ->withRow(static::generateRow())
+            ->build()
+            ->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+    }
+
+    public function testFetchRow()
+    {
+        /** @var Command\TimeSeries\Response $response */
+        $response = (new Command\Builder\TimeSeries\FetchRow(static::$riak))
+            ->atKey(static::$key)
+            ->inTable(static::$table)
+            ->build()
+            ->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertCount(7, $response->getRow());
+
+        if (static::$riak->getApi() instanceof Riak\Api\Pb) {
+            $this->assertEquals("region", $response->getRow()[0]->getName());
+            $this->assertEquals("South Atlantic", $response->getRow()[0]->getValue());
+            $this->assertEquals("varchar", $response->getRow()[0]->getType());
+
+            $this->assertEquals("uv_index", $response->getRow()[5]->getName());
+            $this->assertEquals(10, $response->getRow()[5]->getValue());
+            $this->assertEquals("sint64", $response->getRow()[5]->getType());
+        } else {
+            $this->assertEquals("South Atlantic", $response->getRow()['region']);
+            $this->assertEquals(10, $response->getRow()['uv_index']);
+        }
+    }
+
+    public function testStoreRows()
+    {
+        $response = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$table)
+            ->withRows(static::generateRows())
+            ->build()
+            ->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+    }
+
+    /**
+     * @depends      testStoreRows
+     */
+    public function testQuery()
+    {
+        $upper_bound = static::$now->getTimestamp() + 1;
+        $lower_bound = static::oneHourAgo() - 1;
+
+        $response = (new Command\Builder\TimeSeries\Query(static::$riak))
+            ->withQuery("select * from " . static::$table . " where region = 'South Atlantic' and state = 'South Carolina' and (time > {$lower_bound} and time < {$upper_bound})")
+            ->build()
+            ->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertCount(2, $response->getResults());
+        $this->assertCount(7, $response->getResult());
+        if (static::$riak->getApi() instanceof Riak\Api\Pb) {
+            $this->assertEquals('South Atlantic', $response->getResults()[0][0]->getValue());
+        } else {
+            $this->assertEquals('South Atlantic', $response->getResult()['region']);
+        }
+    }
+
+    /**
+     * @depends      testStoreRow
+     */
+    public function testDeleteRow()
+    {
+        $response = (new Command\Builder\TimeSeries\DeleteRow(static::$riak))
+            ->atKey(static::$key)
+            ->inTable(static::$table)
+            ->build()
+            ->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+    }
+
+    public function testStoreBlobRow()
+    {
+        if (!static::$ts15) {
+            $this->markTestSkipped('BLOB storage is not supported in Riak TS <1.5.');
+        }
+
+        $key = [
+            (new Cell("geohash"))->setValue("hash1"),
+            (new Cell("user"))->setValue("user1"),
+            (new Cell("time"))->setTimestampValue(static::$now->getTimestamp()),
+        ];
+
+        $row = $key;
+        $row[] = (new Cell("weather"))->setValue("cloudy");
+        $row[] = (new Cell("temperature"))->setDoubleValue(19.1);
+        $row[] = (new Cell("uv_index"))->setIntValue(15);
+        $row[] = (new Cell("observed"))->setBooleanValue(false);
+        $row[] = (new Cell("sensor_data"))->setBlobValue(file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . static::TEST_IMG));
+
+        $command = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$tableBlob)
+            ->withRow($row)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+
+        /** @var Command\TimeSeries\Response $response */
+        $response = (new Command\Builder\TimeSeries\FetchRow(static::$riak))
+            ->atKey($key)
+            ->inTable(static::$tableBlob)
+            ->build()
+            ->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertCount(8, $response->getRow());
+
+        if (getenv('PB_INTERFACE')) {
+            $this->assertEquals($row[7]->getValue(), $response->getRow()[7]->getValue());
+        } else {
+            $b64 = base64_encode($row[7]->getValue());
+            $this->assertEquals($b64, $response->getRow()['sensor_data']);
+        }
+    }
+
+    public function testStoreNullBlob()
+    {
+        if (!static::$ts15) {
+            $this->markTestSkipped('BLOB storage is not supported in Riak TS <1.5.');
+        }
+
+        $key = [
+            (new Cell("geohash"))->setValue("hash1"),
+            (new Cell("user"))->setValue("user1"),
+            (new Cell("time"))->setTimestampValue(static::oneHourAgo()),
+        ];
+
+        $row = $key;
+        $row[] = (new Cell("weather"))->setValue("cloudy");
+        $row[] = (new Cell("temperature"))->setDoubleValue(19.1);
+        $row[] = (new Cell("uv_index"))->setIntValue(15);
+        $row[] = (new Cell("observed"))->setBooleanValue(false);
+        $row[] = (new Cell("sensor_data"))->setBlobValue(file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . static::TEST_IMG));
+
+        $command = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$tableBlob)
+            ->withRow($row)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertContains($response->getCode(), ['200', '204'], $response->getMessage());
+
+        /** @var Command\TimeSeries\Response $response */
+        $response = (new Command\Builder\TimeSeries\FetchRow(static::$riak))
+            ->atKey($key)
+            ->inTable(static::$tableBlob)
+            ->build()
+            ->execute();
+
+        $this->assertEquals('200', $response->getCode(), $response->getMessage());
+        $this->assertCount(8, $response->getRow());
+
+        if (getenv('PB_INTERFACE')) {
+            $this->assertEquals($row[7]->getValue(), $response->getRow()[7]->getValue());
+        } else {
+            $b64 = base64_encode($row[7]->getValue());
+            $this->assertEquals($b64, $response->getRow()['sensor_data']);
+        }
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/scenario/EncodedDataTest.php b/vendor/phpfastcache/riak-client/tests/scenario/EncodedDataTest.php
new file mode 100644
index 0000000000..72351b0ab0
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/scenario/EncodedDataTest.php
@@ -0,0 +1,113 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Scenario tests for when storing / retrieving binary data
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class EncodedDataTest extends TestCase
+{
+    const BUCKET = "encodeddata";
+    const BASE64_KEY = "base64";
+    const BINARY_KEY = "binary.png";
+    const TEST_CONTENT_TYPE = "image/png";
+
+    /**
+     * Test storing and fetching an image represented in base64 encoding
+     */
+    public function testBase64EncodedData() {
+        $image = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . static::TEST_IMG);
+
+        $object = (new Riak\DataObject($image))->setContentEncoding("base64")->setContentType(static::TEST_CONTENT_TYPE);
+
+        $storeCommand = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::BASE64_KEY, static::BUCKET)
+            ->build();
+
+        $response = $storeCommand->execute();
+
+        $this->assertEquals('204', $response->getCode());
+
+        $fetchCommand = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::BASE64_KEY, static::BUCKET)
+            ->build();
+
+        $response = $fetchCommand->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataObject', $response->getObject());
+        $this->assertEquals(static::TEST_CONTENT_TYPE, $response->getObject()->getContentType());
+        $this->assertEquals(base64_encode($image), $storeCommand->getEncodedData());
+        $this->assertEquals($storeCommand->getEncodedData(), $response->getObject()->getData());
+        $this->assertEquals(md5($storeCommand->getEncodedData()), md5($response->getObject()->getData()));
+    }
+
+    /**
+     * Test storing and fetching an image as a base64 embedded HTML img tag so it can be accessed via the browser
+     */
+    public function testNoEncoding() {
+        $image = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . static::TEST_IMG);
+
+        $object = (new Riak\DataObject('<img src="data:image/png;base64,' . base64_encode($image) . '"/>'))->setContentEncoding("none")->setContentType("text/html");
+
+        $storeCommand = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::BASE64_KEY . '.png', static::BUCKET)
+            ->build();
+
+        $response = $storeCommand->execute();
+
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEquals(md5($object->getData()), md5($storeCommand->getEncodedData()));
+
+        $fetchCommand = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::BASE64_KEY . '.png', static::BUCKET)
+            ->build();
+
+        $response = $fetchCommand->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataObject', $response->getObject());
+        $this->assertEquals($object->getData(), $response->getObject()->getData());
+    }
+
+    /**
+     * Test storing and fetching a Binary image
+     */
+    public function testBinaryData() {
+        $image = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . static::TEST_IMG);
+        $md5 = md5($image);
+
+        $object = (new Riak\DataObject($image))->setContentEncoding("binary")->setContentType(static::TEST_CONTENT_TYPE);
+
+        $storeCommand = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::BINARY_KEY, static::BUCKET)
+            ->build();
+
+        $response = $storeCommand->execute();
+
+        $this->assertEquals('204', $response->getCode());
+        $this->assertEquals($md5, md5($storeCommand->getEncodedData()));
+
+        $fetchCommand = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::BINARY_KEY, static::BUCKET)
+            ->build();
+
+        $response = $fetchCommand->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertInstanceOf('Basho\Riak\DataObject', $response->getObject());
+        $this->assertEquals(static::TEST_CONTENT_TYPE, $response->getObject()->getContentType());
+
+        // Since Riak doesn't return ContentEncoding used to store the object, we have to access
+        // the raw_data retrieved in the response to avoid data corruption from rawurldecode
+        $this->assertEquals($md5, md5($response->getObject()->getRawData()));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/scenario/InternalServerErrorTest.php b/vendor/phpfastcache/riak-client/tests/scenario/InternalServerErrorTest.php
new file mode 100644
index 0000000000..cb3623c691
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/scenario/InternalServerErrorTest.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Scenario tests for when an internal server error occurs
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class InternalServerErrorTest extends TestCase
+{
+    /**
+     * Currently not executable on any Riak instance configured for multi-backend
+     * @expectedException \Basho\Riak\Exception
+     */
+    public function testQueryInvalidIndex()
+    {
+        $command = (new Command\Builder\QueryIndex(static::$riak))
+            ->buildBucket('Students', static::BITCASK_BUCKET_TYPE)
+            ->withIndexName('index_not_found_int')
+            ->withScalarValue(5)
+            ->build();
+
+        $command->execute();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/scenario/NodeUnreachableTest.php b/vendor/phpfastcache/riak-client/tests/scenario/NodeUnreachableTest.php
new file mode 100644
index 0000000000..c5f901f625
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/scenario/NodeUnreachableTest.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Scenario tests for when Nodes become unreachable
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class NodeUnreachableTest extends TestCase
+{
+    /**
+     * @expectedException \Basho\Riak\Exception
+     */
+    public function testUnreachableNode()
+    {
+        $nodes = $this->getCluster();
+        $riak = new Riak([$nodes[0]]);
+        $response = (new Command\Builder\Ping($riak))
+            ->withConnectionTimeout(1)
+            ->build()
+            ->execute();
+
+        $this->assertFalse($response);
+    }
+
+    /**
+     * @expectedException \Basho\Riak\Exception
+     */
+    public function testUnreachableNodes()
+    {
+        $riak = new Riak($this->getCluster());
+        $response = (new Command\Builder\Ping($riak))
+            ->withConnectionTimeout(1)
+            ->build()
+            ->execute();
+
+        $this->assertFalse($response);
+    }
+
+    /**
+     * @expectedException \Basho\Riak\Exception
+     */
+    public function testMaxConnections()
+    {
+        // grab three unreachable nodes
+        $nodes = $this->getCluster();
+
+        $riak = new Riak($nodes, ['max_connect_attempts' => 2]);
+        $response = (new Command\Builder\Ping($riak))
+            ->withConnectionTimeout(1)
+            ->build()
+            ->execute();
+
+        $this->assertFalse($response);
+    }
+
+    public function testReachableNodeInCluster()
+    {
+        // grab three unreachable nodes
+        $nodes = $this->getCluster();
+
+        // replace third one with reachable node
+        $nodes[2] = $this->getLocalNode();
+
+        $riak = new Riak($nodes, ['max_connect_attempts' => 3], static::getApiBridgeClass());
+        $response = (new Command\Builder\Ping($riak))
+            ->withConnectionTimeout(1)
+            ->build()
+            ->execute();
+
+        $this->assertInstanceOf('Basho\Riak\Command\Response', $response);
+        $this->assertTrue($response->isSuccess());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/scenario/ObjectConflictTest.php b/vendor/phpfastcache/riak-client/tests/scenario/ObjectConflictTest.php
new file mode 100644
index 0000000000..4301dd1610
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/scenario/ObjectConflictTest.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Command;
+
+/**
+ * Scenario tests for when Kv Object changes result in a conflict
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class ObjectConflictTest extends TestCase
+{
+    private static $key = 'conflicted';
+    private static $vclock = '';
+
+    public function testStoreTwiceWithKey()
+    {
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->buildObject('some_data')
+            ->buildLocation(static::$key, 'test', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->buildObject('some_other_data')
+            ->buildLocation(static::$key, 'test', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testStoreTwiceWithKey
+     */
+    public function testFetchConflicted()
+    {
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'test', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('300', $response->getCode());
+        $this->assertTrue($response->hasSiblings());
+        $this->assertNotEmpty($response->getSiblings());
+        $this->assertNotEmpty($response->getObject()->getVclock());
+
+        static::$vclock = $response->getObject()->getVclock();
+    }
+
+    /**
+     * @depends      testFetchConflicted
+     */
+    public function testResolveConflict()
+    {
+        $object = new Riak\DataObject('some_resolved_data');
+        $object->setVclock(static::$vclock);
+
+        $command = (new Command\Builder\StoreObject(static::$riak))
+            ->withObject($object)
+            ->buildLocation(static::$key, 'test', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('204', $response->getCode());
+    }
+
+    /**
+     * @depends      testResolveConflict
+     */
+    public function testFetchResolved()
+    {
+        $command = (new Command\Builder\FetchObject(static::$riak))
+            ->buildLocation(static::$key, 'test', static::LEVELDB_BUCKET_TYPE)
+            ->build();
+
+        $response = $command->execute();
+
+        $this->assertEquals('200', $response->getCode());
+        $this->assertEquals('some_resolved_data', $response->getObject()->getData());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Api/Translator/SecondaryIndexTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Api/Translator/SecondaryIndexTest.php
new file mode 100644
index 0000000000..78f18b7a95
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Api/Translator/SecondaryIndexTest.php
@@ -0,0 +1,57 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\Api;
+use Basho\Tests\TestCase;
+
+/**
+ * Test set for the HTTP Header <-> Secondary Index translator
+ *
+ * @author Alex Moore <amoore at basho d0t com>
+ */
+class SecondaryIndexTest extends TestCase
+{
+    public function testExtractIndexes()
+    {
+        $headers = ['My-Header' => 'cats', 'x-riak-index-foo_bin' => 'bar, baz', 'x-riak-index-foo_int' => '42, 50'];
+        $translator = new Api\Http\Translator\SecondaryIndex();
+
+        $indexes = $translator->extractIndexesFromHeaders($headers);
+
+        // Check that array was modified, and only the non-index header is left.
+        $this->assertEquals(['My-Header' => 'cats'], $headers);
+
+        // Check that we have 2 indexes, with the appropriate values.
+        $this->assertNotEmpty($indexes);
+        $this->assertEquals(2, count($indexes));
+        $this->assertEquals(['bar', 'baz'], $indexes["foo_bin"]);
+        $this->assertEquals([42, 50], $indexes["foo_int"]);
+    }
+
+    public function testExtractIndexesNoHeaders()
+    {
+        $headers = [];
+        $translator = new Api\Http\Translator\SecondaryIndex();
+        $indexes = $translator->extractIndexesFromHeaders($headers);
+
+        // Check that we get an empty array back.
+        $this->assertNotNull($indexes);
+        $this->assertEmpty($indexes);
+    }
+
+    public function testCreateHeaders()
+    {
+        $indexes = ['foo_bin' => ['bar', 'baz'], 'foo_int' => [42, 50]];
+        $translator = new Api\Http\Translator\SecondaryIndex();
+
+        $headers = $translator->createHeadersFromIndexes($indexes);
+
+        // Check that 4 different header key/value pairs are created, with the correct values.
+        $this->assertEquals(4, count($headers));
+        $this->assertEquals(['x-riak-index-foo_bin', 'bar'], $headers[0]);
+        $this->assertEquals(['x-riak-index-foo_bin', 'baz'], $headers[1]);
+        $this->assertEquals(['x-riak-index-foo_int', '42'], $headers[2]);
+        $this->assertEquals(['x-riak-index-foo_int', '50'], $headers[3]);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchCounterTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchCounterTest.php
new file mode 100644
index 0000000000..234181e26f
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchCounterTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchCounterTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // build an object
+        $builder = new Command\Builder\FetchCounter(static::$riak);
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Counter\Fetch', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+
+        $builder->buildLocation('some_key', 'some_bucket', 'some_type');
+        $command = $builder->build();
+
+        $this->assertEquals('some_type', $command->getBucket()->getType());
+    }
+
+    /**
+     * Tests validate properly verifies the Location is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateLocation()
+    {
+        $builder = new Command\Builder\FetchCounter(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchHllTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchHllTest.php
new file mode 100644
index 0000000000..3e5b3d7e60
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchHllTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class FetchHllTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // build an object
+        $builder = new Command\Builder\FetchHll(static::$riak);
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Hll\Fetch', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+
+        $builder->buildLocation('some_key', 'some_bucket', 'some_type');
+        $command = $builder->build();
+
+        $this->assertEquals('some_type', $command->getBucket()->getType());
+    }
+
+    /**
+     * Tests validate properly verifies the Location is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateLocation()
+    {
+        $builder = new Command\Builder\FetchHll(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchMapTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchMapTest.php
new file mode 100644
index 0000000000..2195efe766
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchMapTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchMapTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // build an object
+        $builder = new Command\Builder\FetchMap(static::$riak);
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Map\Fetch', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+
+        $builder->buildLocation('some_key', 'some_bucket', 'some_type');
+        $command = $builder->build();
+
+        $this->assertEquals('some_type', $command->getBucket()->getType());
+    }
+
+    /**
+     * Tests validate properly verifies the Map is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateLocation()
+    {
+        $builder = new Command\Builder\FetchMap(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchObjectTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchObjectTest.php
new file mode 100644
index 0000000000..6fe148916a
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchObjectTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchObjectTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // build an object
+        $builder = new Command\Builder\FetchObject(static::$riak);
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\KVObject\Fetch', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+
+        $builder->buildLocation('some_key', 'some_bucket', 'some_type');
+        $command = $builder->build();
+
+        $this->assertEquals('some_type', $command->getBucket()->getType());
+    }
+
+    /**
+     * Tests validate properly verifies the Object is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateLocation()
+    {
+        $builder = new Command\Builder\FetchObject(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchSetTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchSetTest.php
new file mode 100644
index 0000000000..643741d529
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/FetchSetTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchSetTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // build an object
+        $builder = new Command\Builder\FetchSet(static::$riak);
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Set\Fetch', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+
+        $builder->buildLocation('some_key', 'some_bucket', 'some_type');
+        $command = $builder->build();
+
+        $this->assertEquals('some_type', $command->getBucket()->getType());
+    }
+
+    /**
+     * Tests validate properly verifies the Location is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateLocation()
+    {
+        $builder = new Command\Builder\FetchSet(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/IncrementCounterTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/IncrementCounterTest.php
new file mode 100644
index 0000000000..c22b6a76c2
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/IncrementCounterTest.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class IncrementCounterTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithKey()
+    {
+        // build an object
+        $builder = new Command\Builder\IncrementCounter(static::$riak);
+        $builder->withIncrement(1);
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Counter\Store', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+        $this->assertEquals(['increment' => 1], $command->getData());
+        $this->assertEquals(json_encode(['increment' => 1]), $command->getEncodedData());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithOutKey()
+    {
+        // build an object
+        $builder = new Command\Builder\IncrementCounter(static::$riak);
+        $builder->withIncrement(1);
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Counter\Store', $command);
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+    }
+
+    /**
+     * Tests validate properly verifies the Object is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateObject()
+    {
+        $builder = new Command\Builder\IncrementCounter(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the Bucket is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateBucket()
+    {
+        $builder = new Command\Builder\IncrementCounter(static::$riak);
+        $builder->withIncrement(1);
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/ListObjectsTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/ListObjectsTest.php
new file mode 100644
index 0000000000..c9ecaec705
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/ListObjectsTest.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class ListObjectsTest extends TestCase
+{
+    /**
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testListKeysFailsWithoutAcknowledgingRisk()
+    {
+        $response = (new Command\Builder\ListObjects(static::$riak))
+            ->buildBucket('list-keys-php')
+            ->build();
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testList()
+    {
+        // build an object
+        $builder = (new Command\Builder\ListObjects(static::$riak))
+            ->buildBucket('some_bucket')
+            ->acknowledgeRisk(true);
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\KVObject\Keys\Fetch', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+
+        $builder->buildBucket('some_bucket', 'some_type');
+        $command = $builder->build();
+
+        $this->assertEquals('some_type', $command->getBucket()->getType());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/QueryIndexTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/QueryIndexTest.php
new file mode 100644
index 0000000000..09958348eb
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/QueryIndexTest.php
@@ -0,0 +1,142 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class QueryIndexTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testQuery()
+    {
+        // build an object
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket', 'some_bucket_type')
+                ->withIndexName('foo_int')
+                ->withScalarValue(42);
+
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\Indexes\Query', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('some_bucket_type', $command->getBucket()->getType());
+        $this->assertEquals('foo_int', $command->getIndexName());
+        $this->assertEquals('42', $command->getMatchValue());
+    }
+
+    /**
+     * Tests validate properly verifies the index name is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateLocation()
+    {
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket');
+
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the scalar match value is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateScalarValue()
+    {
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket')
+                ->withIndexName("foo_int")
+                ->withScalarValue(null);
+
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the range lower bound value is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateRangeLowerBound()
+    {
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket')
+            ->withIndexName("foo_int")
+            ->withRangeValue(null, 42);
+
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the range upper bound value is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateRangeUpperBound()
+    {
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket')
+            ->withIndexName("foo_int")
+            ->withRangeValue(42, null);
+
+        $builder->build();
+    }
+
+    /**
+     * Test command builder defaults for options
+     */
+    public function testOptionDefaults()
+    {
+        // build an object
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket', 'some_bucket_type')
+            ->withIndexName('foo_int')
+            ->withScalarValue(42);
+
+        $command = $builder->build();
+
+        $parameters = $command->getParameters();
+
+        $this->assertFalse(isset($parameters['continuation']));
+        $this->assertFalse(isset($parameters['return_terms']));
+        $this->assertFalse(isset($parameters['pagination_sort']));
+        $this->assertFalse(isset($parameters['term_regex']));
+        $this->assertFalse(isset($parameters['timeout']));
+    }
+
+    /**
+     * Test command builder settings for options
+     */
+    public function testOptionSettings()
+    {
+        // build an object
+        $builder = new Command\Builder\QueryIndex(static::$riak);
+        $builder->buildBucket('some_bucket', 'some_bucket_type')
+            ->withIndexName('foo_int')
+            ->withScalarValue(42)
+            ->withContinuation('12345')
+            ->withReturnTerms(true)
+            ->withPaginationSort(true)
+            ->withTermFilter('foobar')
+            ->withTimeout(43);
+
+        $command = $builder->build();
+
+
+
+        $this->assertEquals('12345', $command->getParameter('continuation'));
+        $this->assertEquals('true', $command->getParameter('return_terms'));
+        $this->assertEquals('true', $command->getParameter('pagination_sort'));
+        $this->assertEquals('foobar', $command->getParameter('term_regex'));
+        $this->assertEquals(43, $command->getParameter('timeout'));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/StoreObjectTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/StoreObjectTest.php
new file mode 100644
index 0000000000..5288f3caa5
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/StoreObjectTest.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Api\Http;
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class StoreObjectTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithKey()
+    {
+        // build an object
+        $builder = new Command\Builder\StoreObject(static::$riak);
+        $builder->buildObject('some_data');
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\KVObject\Store', $command);
+        $this->assertInstanceOf('Basho\Riak\DataObject', $command->getObject());
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithOutKey()
+    {
+        // build an object
+        $builder = new Command\Builder\StoreObject(static::$riak);
+        $builder->buildObject('some_data');
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\KVObject\Store', $command);
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+    }
+
+    /**
+     * Tests validate properly verifies the Object is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateObject()
+    {
+        $builder = new Command\Builder\StoreObject(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the Bucket is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateBucket()
+    {
+        $builder = new Command\Builder\StoreObject(static::$riak);
+        $builder->buildObject('some_data');
+        $builder->build();
+    }
+
+    /**
+     * Tests that attempting to store an object generates headers for any
+     * 2i entries on the object.
+     */
+    public function testStoreObjectWithIndexGeneratesHeaders()
+    {
+        $inputHeaders = [Http::METADATA_PREFIX . 'My-Header' => 'cats', 'x-riak-index-foo_bin' => 'bar, baz', 'x-riak-index-foo_int' => '42, 50'];
+        $builder = new Command\Builder\StoreObject(static::$riak);
+        $builder->buildObject('some_data', $inputHeaders);
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\KVObject\Store', $command);
+
+        $this->assertArrayHasKey('My-Header', $command->getObject()->getMetaData());
+        $this->assertEquals($command->getObject()->getMetaData()['My-Header'], 'cats');
+
+        $this->assertArrayHasKey('foo_bin', $command->getObject()->getIndexes());
+        $this->assertCount(2, $command->getObject()->getIndex('foo_bin'));
+
+        $this->assertArrayHasKey('foo_int', $command->getObject()->getIndexes());
+        $this->assertCount(2, $command->getObject()->getIndex('foo_int'));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DeleteRowTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DeleteRowTest.php
new file mode 100644
index 0000000000..d15b73597e
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DeleteRowTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Riak\TimeSeries\Cell;
+use Basho\Tests\TestCase;
+use Basho\Tests\TimeSeriesTrait;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DeleteRowTest extends TestCase
+{
+    use TimeSeriesTrait;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        static::populateKey();
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testDelete()
+    {
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\DeleteRow(static::$riak))
+            ->atKey(static::$key)
+            ->inTable(static::$table);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Delete', $command);
+        $this->assertEquals(static::$table, $command->getTable());
+        $this->assertEquals(static::$key, $command->getData());
+        $this->assertEquals("region/South%20Atlantic/state/South%20Carolina/time/1443816900", implode("/", $command->getData()));
+
+        // change the key and reuse builder to create new command
+        $key = static::$key;
+        $key[2]->setTimestampValue(1443816901);
+        $command = $builder->atKey($key)->build();
+
+        $this->assertEquals("region/South%20Atlantic/state/South%20Carolina/time/1443816901", implode("/", $command->getData()));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DescribeTableTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DescribeTableTest.php
new file mode 100644
index 0000000000..e0d353e1b7
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/DescribeTableTest.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Riak\TimeSeries\Cell;
+use Basho\Tests\TestCase;
+use Basho\Tests\TimeSeriesTrait;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class DescribeTableTest extends TestCase
+{
+    use TimeSeriesTrait;
+
+    /**
+     * Test command builder construct
+     */
+    public function testDescribeTable()
+    {
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\DescribeTable(static::$riak))
+            ->withTable(static::$table);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Query\Fetch', $command);
+        $this->assertEquals("DESCRIBE " . static::$table, $command->getData()["query"]);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/FetchRowTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/FetchRowTest.php
new file mode 100644
index 0000000000..e65d45fed9
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/FetchRowTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Riak\TimeSeries\Cell;
+use Basho\Tests\TestCase;
+use Basho\Tests\TimeSeriesTrait;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class FetchRowTest extends TestCase
+{
+    use TimeSeriesTrait;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        static::populateKey();
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\FetchRow(static::$riak))
+            ->atKey(static::$key)
+            ->inTable(static::$table);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Fetch', $command);
+        $this->assertEquals(static::$table, $command->getTable());
+        $this->assertEquals(static::$key, $command->getData());
+        $this->assertEquals("region/South%20Atlantic/state/South%20Carolina/time/1443816900", implode("/", $command->getData()));
+
+        // change the key and reuse builder to create new command
+        $key = static::$key;
+        $key[2]->setTimestampValue(1443816901);
+        $command = $builder->atKey($key)->build();
+
+        $this->assertEquals("region/South%20Atlantic/state/South%20Carolina/time/1443816901", implode("/", $command->getData()));
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/QueryTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/QueryTest.php
new file mode 100644
index 0000000000..10e4111063
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/QueryTest.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Riak\TimeSeries\Cell;
+use Basho\Tests\TestCase;
+use Basho\Tests\TimeSeriesTrait;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class QueryTest extends TestCase
+{
+    protected static $query = "select * from GeoCheckin where time > 1234560 and time < 1234569 and myfamily = 'family1' and myseries = 'series1'";
+
+    /**
+     * Test command builder construct
+     */
+    public function testFetch()
+    {
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\Query(static::$riak))
+            ->withQuery(static::$query);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Query\Fetch', $command);
+        $this->assertEquals(static::$query, $command->getData()["query"]);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/StoreRowsTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/StoreRowsTest.php
new file mode 100644
index 0000000000..da49957259
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/TimeSeries/StoreRowsTest.php
@@ -0,0 +1,81 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Riak\TimeSeries\Cell;
+use Basho\Tests\TestCase;
+use Basho\Tests\TimeSeriesTrait;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class StoreRowTest extends TestCase
+{
+    use TimeSeriesTrait;
+
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        static::populateKey();
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreSingle()
+    {
+        $row = static::generateRow();
+
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$table)
+            ->withRow($row);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Store', $command);
+        $this->assertEquals(static::$table, $command->getTable());
+        $this->assertEquals([$row], $command->getData());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreMany()
+    {
+        $rows = static::generateRows();
+
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$table)
+            ->withRows($rows);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Store', $command);
+        $this->assertEquals(static::$table, $command->getTable());
+        $this->assertEquals($rows, $command->getData());
+    }
+
+    /**
+     * @expectedException Basho\Riak\Command\Builder\Exception
+     */
+    public function testEmptyRowsException() {
+        // initialize builder
+        $builder = (new Command\Builder\TimeSeries\StoreRows(static::$riak))
+            ->inTable(static::$table);
+
+        // build a command
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\TimeSeries\Store', $command);
+        $this->assertEquals(static::$table, $command->getTable());
+        $this->assertEquals($rows, $command->getData());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateGSetTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateGSetTest.php
new file mode 100644
index 0000000000..e85bd0ca1c
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateGSetTest.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class UpdateGSetTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateGSet(static::$riak);
+        $builder->add('some_element');
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\GSet\Store', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+        $this->assertEquals(['add_all' => ['some_element']], $command->getData());
+        $this->assertEquals(json_encode(['add_all' => ['some_element']]), $command->getEncodedData());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithOutKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateGSet(static::$riak);
+        $builder->add('some_element');
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\GSet\Store', $command);
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals(['add_all' => ['some_element']], $command->getData());
+        $this->assertEquals(json_encode(['add_all' => ['some_element']]), $command->getEncodedData());
+    }
+
+    /**
+     * Tests validate properly verifies that an intended change is not applied
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateObject()
+    {
+        $builder = new Command\Builder\UpdateGSet(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the Bucket is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateBucket()
+    {
+        $builder = new Command\Builder\UpdateGSet(static::$riak);
+        $builder->add('some_element');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateHllTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateHllTest.php
new file mode 100644
index 0000000000..4e0717d6fb
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateHllTest.php
@@ -0,0 +1,80 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class UpdateHllTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateHll(static::$riak);
+        $builder->add('foo');
+        $builder->add('bar');
+        $builder->add('baz');
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Hll\Store', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+        $this->assertEquals(['add_all' => ['foo', 'bar', 'baz']], $command->getData());
+        $this->assertEquals(json_encode(['add_all' => ['foo', 'bar', 'baz']]), $command->getEncodedData());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithOutKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateHll(static::$riak);
+        $builder->add('foo');
+        $builder->add('bar');
+        $builder->add('baz');
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Hll\Store', $command);
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals(['add_all' => ['foo', 'bar', 'baz']], $command->getData());
+        $this->assertEquals(json_encode(['add_all' => ['foo', 'bar', 'baz']]), $command->getEncodedData());
+    }
+
+    /**
+     * Tests validate properly verifies that an intended change is not applied
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateObject()
+    {
+        $builder = new Command\Builder\UpdateHll(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the Bucket is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateBucket()
+    {
+        $builder = new Command\Builder\UpdateHll(static::$riak);
+        $builder->add('some_element');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateMapTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateMapTest.php
new file mode 100644
index 0000000000..581c29b4c8
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateMapTest.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder classes
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class UpdateMapTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateMap(static::$riak);
+        $builder->updateRegister('some_key', 'some_data');
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Map\Store', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+        $this->assertEquals(['update' => ['some_key_register' => 'some_data']], $command->getData());
+        $this->assertEquals(json_encode(['update' => ['some_key_register' => 'some_data']]), $command->getEncodedData());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithOutKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateMap(static::$riak);
+        $builder->updateRegister('some_key', 'some_data');
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Map\Store', $command);
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+    }
+
+    /**
+     * Tests validate properly verifies that intended changes are not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateUpdate()
+    {
+        $builder = new Command\Builder\UpdateMap(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the Bucket is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateBucket()
+    {
+        $builder = new Command\Builder\UpdateMap(static::$riak);
+        $builder->updateRegister('some_key', 'some_data');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies that remove commands require the context
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateRemove()
+    {
+        $builder = new Command\Builder\UpdateMap(static::$riak);
+        $builder->removeRegister('some_key');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateSetTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateSetTest.php
new file mode 100644
index 0000000000..e2d31a505d
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Command/Builder/UpdateSetTest.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace Basho\Tests\Riak\Command\Builder;
+
+use Basho\Riak\Command;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak commands via the Command Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class UpdateSetTest extends TestCase
+{
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateSet(static::$riak);
+        $builder->add('some_element');
+        $builder->remove('some_other_element');
+        $builder->buildLocation('some_key', 'some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Set\Store', $command);
+        $this->assertInstanceOf('Basho\Riak\Bucket', $command->getBucket());
+        $this->assertInstanceOf('Basho\Riak\Location', $command->getLocation());
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals('default', $command->getBucket()->getType());
+        $this->assertEquals('some_key', $command->getLocation()->getKey());
+        $this->assertEquals(['add_all' => ['some_element'], 'remove_all' => ['some_other_element']], $command->getData());
+        $this->assertEquals(json_encode(['add_all' => ['some_element'], 'remove_all' => ['some_other_element']]), $command->getEncodedData());
+    }
+
+    /**
+     * Test command builder construct
+     */
+    public function testStoreWithOutKey()
+    {
+        // build an object
+        $builder = new Command\Builder\UpdateSet(static::$riak);
+        $builder->add('some_element');
+        $builder->buildBucket('some_bucket');
+        $command = $builder->build();
+
+        $this->assertInstanceOf('Basho\Riak\Command\DataType\Set\Store', $command);
+        $this->assertEquals('some_bucket', $command->getBucket()->getName());
+        $this->assertEquals(['add_all' => ['some_element'], 'remove_all' => []], $command->getData());
+        $this->assertEquals(json_encode(['add_all' => ['some_element'], 'remove_all' => []]), $command->getEncodedData());
+    }
+
+    /**
+     * Tests validate properly verifies that an intended change is not applied
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateObject()
+    {
+        $builder = new Command\Builder\UpdateSet(static::$riak);
+        $builder->buildBucket('some_bucket');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies the Bucket is not there
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateBucket()
+    {
+        $builder = new Command\Builder\UpdateSet(static::$riak);
+        $builder->add('some_element');
+        $builder->build();
+    }
+
+    /**
+     * Tests validate properly verifies that remove commands require the context
+     *
+     * @expectedException \Basho\Riak\Command\Builder\Exception
+     */
+    public function testValidateRemove()
+    {
+        $builder = new Command\Builder\UpdateSet(static::$riak);
+        $builder->remove('some_element');
+        $builder->build();
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/CounterTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/CounterTest.php
new file mode 100644
index 0000000000..14f837c176
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/CounterTest.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\DataType\Counter;
+
+/**
+ * Test set for counter crdt
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class CounterTest extends \PHPUnit_Framework_TestCase
+{
+    public function testType()
+    {
+        $this->assertEquals('counter', Counter::TYPE);
+
+        $crdt = new Counter(1);
+        $this->assertEquals('counter', $crdt->getType());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/HllTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/HllTest.php
new file mode 100644
index 0000000000..9d9a711f9b
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/HllTest.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\DataType\Hll;
+
+/**
+ * Test for HyperLogLog CRDT
+ *
+ * @author Luke Bakken <lbakken@basho.com>
+ */
+class HllTest extends \PHPUnit_Framework_TestCase
+{
+    public function testType()
+    {
+        $this->assertEquals('hll', Hll::TYPE);
+
+        $crdt = new Hll([], '');
+        $this->assertEquals('hll', $crdt->getType());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/MapTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/MapTest.php
new file mode 100644
index 0000000000..695aeb4f16
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/MapTest.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\DataType\Map;
+
+/**
+ * Test set for counter crdt
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class MapTest extends \PHPUnit_Framework_TestCase
+{
+    public function testType()
+    {
+        $this->assertEquals('map', Map::TYPE);
+
+        $crdt = new Map([], '');
+        $this->assertEquals('map', $crdt->getType());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/SetTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/SetTest.php
new file mode 100644
index 0000000000..66beaacf08
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/DataType/SetTest.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\DataType\Set;
+
+/**
+ * Test set for set crdt
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class SetTest extends \PHPUnit_Framework_TestCase
+{
+    public function testType()
+    {
+        $this->assertEquals('set', Set::TYPE);
+
+        $crdt = new Set([], '');
+        $this->assertEquals('set', $crdt->getType());
+
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Node/BuilderTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Node/BuilderTest.php
new file mode 100644
index 0000000000..178112493b
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Node/BuilderTest.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Basho\Tests\Riak\Node;
+
+use Basho\Riak;
+use Basho\Riak\Node\Builder;
+use Basho\Tests\TestCase;
+
+/**
+ * Tests the configuration of Riak nodes via the Node Builder class
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class BuilderTest extends TestCase
+{
+    /**
+     * testConstruct
+     *
+     * Test node builder construct
+     */
+    public function testConstruct()
+    {
+        $builder = new Builder();
+
+        $this->assertInstanceOf('Basho\Riak\Node\Builder', $builder);
+    }
+
+    /**
+     * testWithHost
+     */
+    public function testWithHost()
+    {
+        $builder = (new Builder)
+            ->atHost('localhost');
+
+        $this->assertEquals($builder->getConfig()->getHost(), 'localhost');
+    }
+
+    /**
+     * testWithPort
+     */
+    public function testWithPort()
+    {
+        $builder = (new Builder)
+            ->onPort(10018);
+
+        $this->assertEquals($builder->getConfig()->getPort(), 10018);
+    }
+
+    /**
+     * testBuildLocalhost
+     *
+     * Test the localhost node builder
+     */
+    public function testBuildLocalhost()
+    {
+        $nodes = (new Builder)
+            ->buildLocalhost([10018, 10028, 10038, 10048, 10058]);
+
+        $this->assertTrue(count($nodes) == 5);
+        $this->assertTrue($nodes[0]->getHost() == 'localhost');
+        $this->assertTrue($nodes[0]->getPort() == 10018);
+    }
+
+    /**
+     * testBuildCluster
+     *
+     * Test the cluster node builder
+     */
+    public function testBuildCluster()
+    {
+        $nodes = (new Builder)
+            ->onPort(10018)
+            ->buildCluster(['riak1.company.com', 'riak2.company.com', 'riak3.company.com',]);
+
+        $this->assertTrue(count($nodes) == 3);
+        $this->assertTrue($nodes[1]->getHost() == 'riak2.company.com');
+        $this->assertTrue($nodes[0]->getPort() == 10018);
+        $this->assertTrue($nodes[1]->getPort() == 10018);
+    }
+
+    public function testUsingAuth()
+    {
+        $node = (new Builder())
+            ->atHost(static::getTestHost())
+            ->onPort(static::getTestSecurePort())
+            ->usingPasswordAuthentication('unauthorizeduser', 'hispassword')
+            ->withCertificateAuthorityFile(getcwd() . '/tools/test-ca/certs/cacert.pem')
+            ->build();
+
+        $riak = new Riak([$node]);
+
+        $this->assertEquals('unauthorizeduser', $node->getUserName());
+        $this->assertEquals('hispassword', $node->getPassword());
+        $this->assertEquals(getcwd() . '/tools/test-ca/certs/cacert.pem', $node->getCaFile());
+        $this->assertInstanceOf('Basho\Riak', $riak);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/NodeTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/NodeTest.php
new file mode 100644
index 0000000000..7ce7a1ef63
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/NodeTest.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\Node;
+use Basho\Tests\TestCase;
+
+/**
+ * Main class for testing Riak clustering
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class NodeTest extends TestCase
+{
+    public function testConfig()
+    {
+        $node = static::getLocalNode();
+
+        $this->assertEquals(static::getTestHost(), $node->getHost());
+        $this->assertEquals(static::getTestPort(), $node->getPort());
+        $this->assertNotEmpty($node->getSignature());
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/ObjectTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/ObjectTest.php
new file mode 100644
index 0000000000..cb588aa587
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/ObjectTest.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Basho\Tests\Riak;
+
+use Basho\Riak\DataObject as RObject;
+use Basho\Tests\TestCase;
+
+/**
+ * Test set for key value objects
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class ObjectTest extends TestCase
+{
+    public function testConstruct()
+    {
+        // simple new object
+        $object = new RObject();
+        $this->assertEmpty($object->getData());
+
+        // more complex object
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+        $object = new RObject($data, ['Content-Type' => 'text/plain']);
+        $this->assertEquals('sauce', $object->getData()->woot);
+        $this->assertEquals('text/plain', $object->getContentType());
+    }
+
+    public function testExtractIndexes()
+    {
+        // no headers means no indexes, empty array.
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+
+        $object = new RObject($data);
+        $this->assertEmpty($object->getIndexes());
+        $this->assertEquals(NULL, $object->getIndex("foo_bin"));
+
+        // 2i headers will result in indexes
+        $headers = ['My-Header' => 'cats', 'x-riak-index-foo_bin' => 'bar, baz', 'x-riak-index-foo_int' => '42, 50'];
+        $object = new RObject($data, $headers);
+
+        $indexes = $object->getIndexes();
+        $this->assertNotEmpty($indexes);
+        $this->assertEquals(2, count($indexes));
+        $this->assertEquals(['bar', 'baz'], $indexes["foo_bin"]);
+        $this->assertEquals([42, 50], $indexes["foo_int"]);
+    }
+
+    public function testAddIndexes()
+    {
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+
+        $headers = ['x-riak-index-foo_bin' => 'bar', 'x-riak-index-foo_int' => '42'];
+        $object = new RObject($data, $headers);
+
+        $object->addValueToIndex("foo_int", 50);
+        $object->addValueToIndex("foo_bin", 'baz');
+
+        $indexes = $object->getIndexes();
+        $this->assertNotEmpty($indexes);
+        $this->assertEquals(2, count($indexes));
+        $this->assertEquals(['bar', 'baz'], $indexes["foo_bin"]);
+        $this->assertEquals([42, 50], $indexes["foo_int"]);
+    }
+
+    public function testRemoveIndexes()
+    {
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+
+        $headers = ['x-riak-index-foo_bin' => 'bar, baz', 'x-riak-index-foo_int' => '42, 50'];
+        $object = new RObject($data, $headers);
+
+        $object->removeValueFromIndex("foo_int", 50);
+        $object->removeValueFromIndex("foo_bin", 'baz');
+        $object->removeValueFromIndex("foo_bin", 'bar');
+
+        $indexes = $object->getIndexes();
+        $this->assertNotEmpty($indexes);
+        $this->assertEquals(1, count($indexes));
+        $this->assertEquals([42], $indexes["foo_int"]);
+    }
+
+    public function testGetIndex()
+    {
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+
+        $headers = ['x-riak-index-foo_bin' => 'bar, baz', 'x-riak-index-foo_int' => '42, 50'];
+        $object = new RObject($data, $headers);
+
+        $index = $object->getIndex('foo_bin');
+        $this->assertNotNull($index);
+        $this->assertEquals(['bar', 'baz'], $index);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testInvalidIndexName()
+    {
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+        $object = new RObject($data);
+
+        $object->addValueToIndex('foo_bar', 42);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testInvalidDataTypeForBinIndex()
+    {
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+        $object = new RObject($data);
+
+        $object->addValueToIndex('foo_bin', 42);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testInvalidDataTypeForIntIndex()
+    {
+        $data = new \StdClass();
+        $data->woot = 'sauce';
+        $object = new RObject($data);
+
+        $object->addValueToIndex('foo_int', 'bar');
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/Riak/Search/DocTest.php b/vendor/phpfastcache/riak-client/tests/unit/Riak/Search/DocTest.php
new file mode 100644
index 0000000000..1bd5605a25
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/Riak/Search/DocTest.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Basho\Tests\Riak\Search;
+
+use Basho\Riak\Search\Doc;
+use PHPUnit_Framework_TestCase as TestCase;
+
+/**
+ * Search result document test
+ *
+ * @author Michael Mayer <michael@lastzero.net>
+ */
+class DocTest extends TestCase
+{
+    /**
+     * @var Doc
+     */
+    protected $doc;
+
+    public function setUp()
+    {
+        $data = new \stdClass();
+        $data->_yz_id = '1*tests*test*5*39';
+        $data->_yz_rk = '5';
+        $data->_yz_rt = 'tests';
+        $data->_yz_rb = 'test';
+        $data->foo = 'bar';
+        $data->_status = 200;
+        $this->doc = new Doc($data);
+    }
+
+    public function testGetLocation()
+    {
+        $result = $this->doc->getLocation();
+        $this->assertInstanceOf('\Basho\Riak\Location', $result);
+        $this->assertInstanceOf('\Basho\Riak\Bucket', $result->getBucket());
+        $this->assertEquals('tests', $result->getBucket()->getType());
+        $this->assertEquals('test', $result->getBucket()->getName());
+        $this->assertEquals('5', $result->getKey());
+    }
+
+    public function testGetData()
+    {
+        $result = $this->doc->getData();
+        $this->assertInternalType('array', $result);
+        $this->assertEquals('bar', $result['foo']);
+        $this->assertEquals(200, $result['_status']);
+    }
+
+    public function testMagicGetter()
+    {
+        $this->assertEquals('bar', $this->doc->foo);
+        $this->assertEquals(200, $this->doc->_status);
+    }
+}
diff --git a/vendor/phpfastcache/riak-client/tests/unit/RiakTest.php b/vendor/phpfastcache/riak-client/tests/unit/RiakTest.php
new file mode 100644
index 0000000000..e923c04711
--- /dev/null
+++ b/vendor/phpfastcache/riak-client/tests/unit/RiakTest.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Basho\Tests;
+
+use Basho\Riak;
+use Basho\Riak\Node;
+use Basho\Riak\Node\Builder;
+
+/**
+ * Main class for testing Riak clustering
+ *
+ * @author Christopher Mancini <cmancini at basho d0t com>
+ */
+class RiakTest extends TestCase
+{
+    public function testNodeCount()
+    {
+        $nodes = static::getCluster();
+        $riak = new Riak($nodes);
+        $this->assertEquals(count($riak->getNodes()), count($nodes));
+    }
+
+    public function testConfig()
+    {
+        $nodes = static::getCluster();
+        $riak = new Riak($nodes, ['max_connect_attempts' => 5]);
+        $this->assertEquals(5, $riak->getConfigValue('max_connect_attempts'));
+    }
+
+    public function testPickNode()
+    {
+        $nodes = static::getCluster();
+        $riak = new Riak($nodes);
+        $this->assertNotFalse($riak->getActiveNodeIndex());
+        $this->assertInstanceOf('Basho\Riak\Node', $riak->getActiveNode());
+    }
+
+    public function testApi()
+    {
+        $nodes = static::getCluster();
+        $riak = new Riak($nodes);
+        $this->assertInstanceOf('Basho\Riak\Api', $riak->getApi());
+    }
+}
diff --git a/vendor/robrichards/xmlseclibs/CHANGELOG.txt b/vendor/robrichards/xmlseclibs/CHANGELOG.txt
index 2c9355891b..351b104215 100644
--- a/vendor/robrichards/xmlseclibs/CHANGELOG.txt
+++ b/vendor/robrichards/xmlseclibs/CHANGELOG.txt
@@ -1,5 +1,15 @@
 xmlseclibs.php
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+05, Sep 2020, 3.1.1
+Features:
+- Support OAEP (iggyvolz)
+
+Bug Fixes:
+- Fix AES128 (iggyvolz)
+
+Improvements:
+- Fix tests for older PHP
+
 22, Apr 2020, 3.1.0
 Features:
 - Support AES-GCM. Requires PHP 7.1. (François Kooman)
diff --git a/vendor/robrichards/xmlseclibs/README.md b/vendor/robrichards/xmlseclibs/README.md
index 1a83735ba5..a576080af9 100644
--- a/vendor/robrichards/xmlseclibs/README.md
+++ b/vendor/robrichards/xmlseclibs/README.md
@@ -6,7 +6,8 @@ The author of xmlseclibs is Rob Richards.
 
 # Branches
 Master is currently the only actively maintained branch.
-* master: Removes mcrypt usage requiring 5.4+ (5.6.24+ recommended for security reasons)
+* master/3.1: Added AES-GCM support requiring 7.1+
+* 3.0: Removes mcrypt usage requiring 5.4+ (5.6.24+ recommended for security reasons)
 * 2.0: Contains namespace support requiring 5.3+
 * 1.4: Contains auto-loader support while also maintaining backwards compatiblity with the older 1.3 version using the xmlseclibs.php file. Supports PHP 5.2+
 
diff --git a/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php b/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php
index 90665c959c..7eed04d220 100644
--- a/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php
+++ b/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php
@@ -55,6 +55,7 @@ class XMLSecurityKey
     const AES256_GCM = 'http://www.w3.org/2009/xmlenc11#aes256-gcm';
     const RSA_1_5 = 'http://www.w3.org/2001/04/xmlenc#rsa-1_5';
     const RSA_OAEP_MGF1P = 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p';
+    const RSA_OAEP = 'http://www.w3.org/2009/xmlenc11#rsa-oaep';
     const DSA_SHA1 = 'http://www.w3.org/2000/09/xmldsig#dsa-sha1';
     const RSA_SHA1 = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1';
     const RSA_SHA256 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256';
@@ -151,7 +152,7 @@ public function __construct($type, $params=null)
                 $this->cryptParams['cipher'] = 'aes-128-gcm';
                 $this->cryptParams['type'] = 'symmetric';
                 $this->cryptParams['method'] = 'http://www.w3.org/2009/xmlenc11#aes128-gcm';
-                $this->cryptParams['keysize'] = 32;
+                $this->cryptParams['keysize'] = 16;
                 $this->cryptParams['blocksize'] = 16;
                 break;
             case (self::AES192_GCM):
@@ -159,7 +160,7 @@ public function __construct($type, $params=null)
                 $this->cryptParams['cipher'] = 'aes-192-gcm';
                 $this->cryptParams['type'] = 'symmetric';
                 $this->cryptParams['method'] = 'http://www.w3.org/2009/xmlenc11#aes192-gcm';
-                $this->cryptParams['keysize'] = 32;
+                $this->cryptParams['keysize'] = 24;
                 $this->cryptParams['blocksize'] = 16;
                 break;
             case (self::AES256_GCM):
@@ -193,6 +194,18 @@ public function __construct($type, $params=null)
                     }
                 }
                 throw new Exception('Certificate "type" (private/public) must be passed via parameters');
+            case (self::RSA_OAEP):
+                $this->cryptParams['library'] = 'openssl';
+                $this->cryptParams['padding'] = OPENSSL_PKCS1_OAEP_PADDING;
+                $this->cryptParams['method'] = 'http://www.w3.org/2009/xmlenc11#rsa-oaep';
+                $this->cryptParams['hash'] = 'http://www.w3.org/2009/xmlenc11#mgf1sha1';
+                if (is_array($params) && ! empty($params['type'])) {
+                    if ($params['type'] == 'public' || $params['type'] == 'private') {
+                        $this->cryptParams['type'] = $params['type'];
+                        break;
+                    }
+                }
+                throw new Exception('Certificate "type" (private/public) must be passed via parameters');
             case (self::RSA_SHA1):
                 $this->cryptParams['library'] = 'openssl';
                 $this->cryptParams['method'] = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1';
@@ -375,7 +388,7 @@ public function loadKey($key, $isFile=false, $isCert = false)
 
                 case'symmetric':
                     if (strlen($this->key) < $this->cryptParams['keysize']) {
-                        throw new Exception('Key must contain at least 25 characters for this cipher');
+                        throw new Exception('Key must contain at least '.$this->cryptParams['keysize'].' characters for this cipher, contains '.strlen($this->key));
                     }
                     break;
 
diff --git a/vendor/robrichards/xmlseclibs/xmlseclibs.php b/vendor/robrichards/xmlseclibs/xmlseclibs.php
index 1859bc23ee..1c10acc73b 100644
--- a/vendor/robrichards/xmlseclibs/xmlseclibs.php
+++ b/vendor/robrichards/xmlseclibs/xmlseclibs.php
@@ -37,7 +37,7 @@
  * @author    Robert Richards <rrichards@cdatazone.org>
  * @copyright 2007-2020 Robert Richards <rrichards@cdatazone.org>
  * @license   http://www.opensource.org/licenses/bsd-license.php  BSD License
- * @version   3.1.0
+ * @version   3.1.1
  */
 
 $xmlseclibs_srcdir = dirname(__FILE__) . '/src/';
diff --git a/vendor/simplesamlphp/composer-module-installer/COPYING b/vendor/simplesamlphp/composer-module-installer/COPYING
new file mode 100644
index 0000000000..8589e3a195
--- /dev/null
+++ b/vendor/simplesamlphp/composer-module-installer/COPYING
@@ -0,0 +1,18 @@
+Copyright 2014-2015 UNINETT AS, http://www.uninett.no
+
+This software is licensed under the CC-GNU LGPL version 2.1.
+http://creativecommons.org/licenses/LGPL/2.1/
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
diff --git a/vendor/simplesamlphp/composer-module-installer/LICENSE b/vendor/simplesamlphp/composer-module-installer/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/composer-module-installer/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/composer-module-installer/README.md b/vendor/simplesamlphp/composer-module-installer/README.md
new file mode 100644
index 0000000000..31310613c9
--- /dev/null
+++ b/vendor/simplesamlphp/composer-module-installer/README.md
@@ -0,0 +1,124 @@
+SimpleSAMLphp Composer module installer
+=======================================
+
+This package is a Composer plugin that allows a SimpleSAMLphp module to be
+installed through Composer. Installation can be as easy as executing:
+
+```
+composer.phar require vendor/simplesamlphp-module-mymodule 1.*
+```
+
+That command would install `vendor/simplesamlphp-module-mymodule` matching
+version `1.*`.
+
+
+Making a module installable through Composer
+--------------------------------------------
+
+To make a module installable through Composer, you need to add a
+`composer.json`-file to the root of the module. It should look
+something like:
+
+```json
+{
+    "name": "vendor/simplesamlphp-module-mymodule",
+    "description": "A description of the module 'mymodule'.",
+    "type": "simplesamlphp-module",
+    "require": {
+        "simplesamlphp/composer-module-installer": "~1.0"
+    }
+}
+```
+
+The package name must be on the form:
+
+```
+<vendor>/simplesamlphp-module-<module name>
+```
+
+`<vendor>` is the vendor name you use, and `<module name>` is the name
+of your module. Your module will be installed in the `modules/<module name>`
+directory in the SimpleSAMLphp installation directory.
+
+
+Installing your custom module
+-----------------------------
+
+If you publish your module on [Packagist](https://packagist.org/), no special
+configuration is required to install your module. However, if your module is
+hosted in a private repository, you need to add a repository for the module to
+your SimpleSAMLphp `composer.json` file. For example, if your module is located
+in a Git repository in `/home/username/mymodule`, you would add something like
+the following to `repositories` in `composer.json`:
+
+```json
+{
+    "type": "vcs",
+    "url": "/home/username/mymodule"
+}
+```
+
+The `repositories array may look something like:
+
+```json
+"repositories": [
+    {
+        "type": "package",
+        "package": {
+            "name": "robrichards/xmlseclibs",
+            "version": "1.3.1",
+            "source": {
+                "type": "svn",
+                "url": "http://xmlseclibs.googlecode.com/svn",
+                "reference": "trunk@50"
+            },
+            "autoload": {
+                "files": ["xmlseclibs.php"]
+            }
+        }
+    },
+    {
+        "type": "vcs",
+        "url": "/home/username/mymodule"
+    }
+]
+```
+
+Once you have added the repository, you should be able to install your module
+by executing:
+
+```
+composer.phar require vendor/simplesamlphp-module-mymodule:dev-master
+```
+
+(`dev-master` instructs Composer to install the `master`-branch from the Git
+repository.)
+
+See the [Composer Repository documentation](https://getcomposer.org/doc/05-repositories.md)
+for more information about adding your own custom repositories to Composer.
+
+
+Module names that contain uppercase letters
+-------------------------------------------
+
+New modules should only have lowercase letters in the module name, however a
+lot of existing module names contain uppercase letters. Since Composer package
+names should only contain lowercase letters, a mixed-case variant of the module
+name can be provided in the `ssp-mixedcase-module-name` extra data option:
+
+```json
+{
+    "name": "vendor/simplesamlphp-module-mymodule",
+    "description": "A description of the module 'MyModule'.",
+    "type": "simplesamlphp-module",
+    "extra": {
+        "ssp-mixedcase-module-name": "myModule"
+    },
+    "require": {
+        "simplesamlphp/composer-module-installer": "~1.1"
+    }
+}
+```
+
+Note that this is only meant for migration of existing modules. New modules
+should only use lowercase letters in the name.
diff --git a/vendor/simplesamlphp/composer-module-installer/composer.json b/vendor/simplesamlphp/composer-module-installer/composer.json
new file mode 100644
index 0000000000..30356d379a
--- /dev/null
+++ b/vendor/simplesamlphp/composer-module-installer/composer.json
@@ -0,0 +1,16 @@
+{
+    "name": "simplesamlphp/composer-module-installer",
+    "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.",
+    "license": "LGPL-2.1-only",
+    "type": "composer-plugin",
+    "autoload": {
+        "psr-0": {"SimpleSamlPhp\\Composer": "src/"}
+    },
+    "extra": {
+        "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin"
+    },
+    "require": {
+        "composer-plugin-api": "^1.1|^2.0",
+        "simplesamlphp/simplesamlphp": "*"
+    }
+}
diff --git a/vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstaller.php b/vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstaller.php
new file mode 100644
index 0000000000..9a183bd52f
--- /dev/null
+++ b/vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstaller.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace SimpleSamlPhp\Composer;
+
+use Composer\Package\PackageInterface;
+use Composer\Installer\LibraryInstaller;
+
+class ModuleInstaller extends LibraryInstaller
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function getInstallPath(PackageInterface $package)
+    {
+        return $this->getPackageBasePath($package);
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function getPackageBasePath(PackageInterface $package)
+    {
+        $ssp_path = '.';
+        $ssp_pack = $this->composer
+            ->getRepositoryManager()
+            ->getLocalRepository()
+            ->findPackage('simplesamlphp/simplesamlphp', '*');
+        if ($ssp_pack !== null) {
+            $ssp_path = $this->composer->getInstallationManager()->getInstallPath($ssp_pack);
+        }
+
+        $name = $package->getPrettyName();
+        if (!preg_match('@^.*/simplesamlphp-module-(.+)$@', $name, $matches)) {
+            throw new \InvalidArgumentException('Unable to install module ' . $name .', package name must be on the form "VENDOR/simplesamlphp-module-MODULENAME".');
+        }
+        $moduleDir = $matches[1];
+
+        if (!preg_match('@^[a-z0-9_.-]*$@', $moduleDir)) {
+            throw new \InvalidArgumentException('Unable to install module ' . $name .', module name must only contain characters from a-z, 0-9, "_", "." and "-".');
+        }
+        if ($moduleDir[0] === '.') {
+            throw new \InvalidArgumentException('Unable to install module ' . $name .', module name cannot start with ".".');
+        }
+
+        /* Composer packages are supposed to only contain lowercase letters, but historically many modules have had names in mixed case.
+         * We must provide a way to handle those. Here we allow the module directory to be overridden with a mixed case name.
+         */
+        $extraData = $package->getExtra();
+        if (isset($extraData['ssp-mixedcase-module-name'])) {
+            $mixedCaseModuleName = $extraData['ssp-mixedcase-module-name'];
+            if (!is_string($mixedCaseModuleName)) {
+                throw new \InvalidArgumentException('Unable to install module ' . $name .', "ssp-mixedcase-module-name" must be a string.');
+            }
+            if (mb_strtolower($mixedCaseModuleName, 'utf-8') !== $moduleDir) {
+                throw new \InvalidArgumentException('Unable to install module ' . $name .', "ssp-mixedcase-module-name" must match the package name except that it can contain uppercase letters.');
+            }
+            $moduleDir = $mixedCaseModuleName;
+        }
+
+        return $ssp_path.'/modules/'.$moduleDir;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public function supports($packageType)
+    {
+        return 'simplesamlphp-module' === $packageType;
+    }
+}
diff --git a/vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstallerPlugin.php b/vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstallerPlugin.php
new file mode 100644
index 0000000000..bfaafe32fa
--- /dev/null
+++ b/vendor/simplesamlphp/composer-module-installer/src/SimpleSamlPhp/Composer/ModuleInstallerPlugin.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace SimpleSamlPhp\Composer;
+
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use Composer\Plugin\PluginInterface;
+
+class ModuleInstallerPlugin implements PluginInterface
+{
+    /**
+     * Apply plugin modifications to Composer
+     *
+     * @param \Composer\Composer $composer
+     * @param \Composer\IO\IOInterface $io
+     */
+    public function activate(Composer $composer, IOInterface $io)
+    {
+        $installer = new ModuleInstaller($io, $composer);
+        $composer->getInstallationManager()->addInstaller($installer);
+    }
+
+
+    /**
+     * Remove any hooks from Composer
+     *
+     * This will be called when a plugin is deactivated before being
+     * uninstalled, but also before it gets upgraded to a new version
+     * so the old one can be deactivated and the new one activated.
+     *
+     * @param \Composer\Composer $composer
+     * @param \Composer\IO\IOInterface $io
+     */
+    public function deactivate(Composer $composer, IOInterface $io)
+    {
+        // Not implemented
+    }
+
+
+    /**
+     * Prepare the plugin to be uninstalled
+     *
+     * This will be called after deactivate.
+     *
+     * @param \Composer\Composer $composer
+     * @param \Composer\IO\IOInterface $io
+     */
+    public function uninstall(Composer $composer, IOInterface $io)
+    {
+        // Not implemented
+    }
+}
diff --git a/vendor/simplesamlphp/saml2/.github/workflows/php.yml b/vendor/simplesamlphp/saml2/.github/workflows/php.yml
new file mode 100644
index 0000000000..bdf261c946
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/.github/workflows/php.yml
@@ -0,0 +1,202 @@
+name: CI
+
+on:
+  push:
+    branches: [ '**' ]
+  pull_request:
+    branches: [ master, release-* ]
+
+jobs:
+  basic-tests:
+    name: Syntax and unit tests, PHP ${{ matrix.php-versions }}, ${{ matrix.operating-system }}
+    runs-on: ${{ matrix.operating-system }}
+    strategy:
+      fail-fast: false
+      matrix:
+        operating-system: [ubuntu-latest, windows-latest]
+        php-versions: ['7.1', '7.2', '7.3', '7.4']
+
+    steps:
+      - name: Setup PHP, with composer and extensions
+        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
+        with:
+          php-version: ${{ matrix.php-versions }}
+          extensions: mbstring, xml
+          coverage: xdebug
+
+      - name: Setup problem matchers for PHP
+        run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
+
+      - name: Setup problem matchers for PHPUnit
+        run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
+
+      - name: Set git to use LF
+        run: |
+          git config --global core.autocrlf false
+          git config --global core.eol lf
+
+      - uses: actions/checkout@v2
+
+      - name: Get composer cache directory
+        id: composer-cache
+        run: echo "::set-output name=dir::$(composer config cache-files-dir)"
+
+      - name: Cache composer dependencies
+        uses: actions/cache@v1
+        with:
+          path: ${{ steps.composer-cache.outputs.dir }}
+          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+          restore-keys: ${{ runner.os }}-composer-
+
+      - name: Validate composer.json and composer.lock
+        run: composer validate
+
+      - name: Install Composer dependencies
+        run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
+
+      - name: Syntax check PHP
+        run: bash vendor/bin/check-syntax-php.sh
+
+      - name: Decide whether to run code coverage or not
+        if: ${{ matrix.php-versions != '7.4' || matrix.operating-system != 'ubuntu-latest' }}
+        run: |
+          echo "NO_COVERAGE=--no-coverage" >> $GITHUB_ENV
+
+      - name: Run unit tests
+        run: |
+          echo $NO_COVERAGE
+          ./vendor/bin/phpunit $NO_COVERAGE
+
+      - name: Save coverage data
+        if: ${{ matrix.php-versions == '7.4' && matrix.operating-system == 'ubuntu-latest' }}
+        uses: actions/upload-artifact@v1
+        with:
+            name: build-data
+            path: ${{ github.workspace }}/build
+
+  security:
+    name: Security checks
+    runs-on: [ubuntu-latest]
+    steps:
+      - name: Setup PHP, with composer and extensions
+        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
+        with:
+            php-version: '7.4'
+            extensions: mbstring, xml
+            coverage: none
+
+      - name: Setup problem matchers for PHP
+        run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
+
+      - uses: actions/checkout@v2
+
+      - name: Get composer cache directory
+        id: composer-cache
+        run: echo "::set-output name=dir::$(composer config cache-files-dir)"
+
+      - name: Cache composer dependencies
+        uses: actions/cache@v1
+        with:
+            path: ${{ steps.composer-cache.outputs.dir }}
+            key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+            restore-keys: ${{ runner.os }}-composer-
+
+      - name: Install Composer dependencies
+        run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
+
+      - name: Security check for locked dependencies
+        run: ./vendor/bin/security-checker security:check
+
+      - name: Update Composer dependencies
+        run: composer update --no-progress --no-suggest --prefer-dist --optimize-autoloader
+
+      - name: Security check for updated dependencies
+        run: ./vendor/bin/security-checker security:check
+
+  sanity-check:
+    name: Sanity checks
+    runs-on: [ubuntu-latest]
+
+    steps:
+      - name: Setup PHP, with composer and extensions
+        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
+        with:
+          php-version: '7.4'
+          extensions: mbstring, xml
+          coverage: none
+
+      - name: Setup problem matchers for PHP
+        run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
+
+      - uses: actions/checkout@v2
+
+      - name: Get composer cache directory
+        id: composer-cache
+        run: echo "::set-output name=dir::$(composer config cache-files-dir)"
+
+      - name: Cache composer dependencies
+        uses: actions/cache@v1
+        with:
+            path: ${{ steps.composer-cache.outputs.dir }}
+            key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+            restore-keys: ${{ runner.os }}-composer-
+
+      - name: Install Composer dependencies
+        run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
+
+      - name: Syntax check YAML / XML / JSON
+        run: |
+          bash vendor/bin/check-syntax-yaml.sh
+          bash vendor/bin/check-syntax-xml.sh
+          bash vendor/bin/check-syntax-json.sh
+
+  quality:
+    name: Quality control
+    runs-on: [ubuntu-latest]
+    needs: [basic-tests]
+
+    steps:
+      - name: Setup PHP, with composer and extensions
+        uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
+        with:
+          php-version: '7.4'
+          extensions: mbstring, xml
+
+      - name: Setup problem matchers for PHP
+        run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
+
+      - uses: actions/checkout@v2
+
+      - name: Get composer cache directory
+        id: composer-cache
+        run: echo "::set-output name=dir::$(composer config cache-files-dir)"
+
+      - name: Cache composer dependencies
+        uses: actions/cache@v1
+        with:
+            path: ${{ steps.composer-cache.outputs.dir }}
+            key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+            restore-keys: ${{ runner.os }}-composer-
+
+      - name: Install Composer dependencies
+        run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
+
+      - uses: actions/download-artifact@v1
+        with:
+          name: build-data
+          path: ${{ github.workspace }}/build
+
+      - name: Codecov
+        uses: codecov/codecov-action@v1
+
+      - name: PHP Code Sniffer
+        continue-on-error: true
+        run: php vendor/bin/phpcs src/
+
+      - name: Psalm
+        continue-on-error: true
+        run: php vendor/bin/psalm --show-info=true
+
+      - name: Psalter
+        continue-on-error: true
+        run: php vendor/bin/psalter --issues=UnnecessaryVarAnnotation --dry-run
diff --git a/vendor/simplesamlphp/saml2/README.md b/vendor/simplesamlphp/saml2/README.md
index 8c09dba172..13c711a83c 100644
--- a/vendor/simplesamlphp/saml2/README.md
+++ b/vendor/simplesamlphp/saml2/README.md
@@ -24,6 +24,9 @@ The latest released version (`3.x` range) is the _only supported version_.
 All other branches (`2.x` and earlier) are no longer supported and will not receive any maintenance or
 (security) fixes. Do not use these versions.
 
+Also be sure to check the [UPGRADING.md](UPGRADING.md) file if you are upgrading from an older version to `>= 4.x`. Here 
+you will find instructions on how to deal with BC breaking changes between versions.
+
 Usage
 -----
 
@@ -51,7 +54,9 @@ Example:
     // Set up an AuthnRequest
     $request = new SAML2\AuthnRequest();
     $request->setId($container->generateId());
-    $request->setIssuer('https://sp.example.edu');
+    $issuer = new SAML2\XML\saml\Issuer();
+    $issuer->setValue('https://sp.example.edu');
+    $request->setIssuer($issuer);
     $request->setDestination('https://idp.example.edu');
 
     // Send it off using the HTTP-Redirect binding
diff --git a/vendor/simplesamlphp/saml2/UPGRADING.md b/vendor/simplesamlphp/saml2/UPGRADING.md
new file mode 100644
index 0000000000..7b8ee6d7b9
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/UPGRADING.md
@@ -0,0 +1,48 @@
+# UPGRADE NOTES
+
+## 4.0 to 4.1
+
+**Assertion processor BC breaking change**
+
+The assertion processor in 4.0 assumed all assertions are encrypted and would try and decrypt twice, causing a fatal error.
+This problem was introduced in [#120](https://github.com/simplesamlphp/saml2/pull/120).
+
+If you are using the assertion processor as a stand-alone component, then you will have to update your code to reflect this
+change, see: [97a7bd0](https://github.com/simplesamlphp/saml2/commit/97a7bd0be4865617048e1ea92aa0b55df488fe4a).
+
+## 3.4 to 4.0 
+
+**Assertion processor BC breaking change**
+
+The response processor in pre 4.0 releases assumed all assertions are decrypted, and caused a fatal error when the response was unsigned.
+This problem was fixed in [#120](https://github.com/simplesamlphp/saml2/pull/120). 
+
+If you are using the assertion processor as a stand-alone component, then you will have to update your code to reflect this
+change, see: [e6c01fa](https://github.com/simplesamlphp/saml2/commit/e6c01fa9b0e815682e24916f03a84d245480c4a0).
+
+**NameID's and Issuers**
+
+In pre 4.0 releases we allowed both objects and arrays to be used for Issuers and nameID's. We know only support objects.
+If in your code you use something like this:
+
+``
+$assertion = new \SAML2\Assertion();
+$assertion->setIssuer('someissuer');
+``
+
+You would now replace that with:
+
+``
+$issuer = new \SAML2\XML\saml\Issuer();
+$issuer->setValue('someissuer');
+
+$assertion = new \SAML2\Assertion();
+$assertion->setIssuer($issuer);
+``
+
+**Class properties**
+All public properies have been replaced by either protected or private properties.
+Public getter/setter methods are available to set/get values.
+
+**Autoloading classes**
+The PSR-0 autoloader has been removed. If your code isn't prepared to use PSR-4 namespaces yet, then you would have to change that before using this version.
diff --git a/vendor/simplesamlphp/saml2/composer.json b/vendor/simplesamlphp/saml2/composer.json
index 5c3800b50c..df357ea8fe 100644
--- a/vendor/simplesamlphp/saml2/composer.json
+++ b/vendor/simplesamlphp/saml2/composer.json
@@ -9,38 +9,36 @@
         }
     ],
     "require": {
-        "php": ">=5.4",
+        "php": ">=7.1",
         "ext-openssl": "*",
         "ext-dom": "*",
         "ext-zlib": "*",
 
-        "psr/log": "~1.0",
-        "robrichards/xmlseclibs": "^3.0.4",
-        "webmozart/assert": "^1.4"
+        "psr/log": "~1.1",
+        "robrichards/xmlseclibs": "^3.1.0",
+        "webmozart/assert": "^1.5"
     },
     "require-dev": {
-        "simplesamlphp/simplesamlphp-test-framework": "0.0.11",
-        "squizlabs/php_codesniffer": "~3.2",
-        "phpunit/phpunit": "~5.7",
-        "phpmd/phpmd": "~2.6",
-        "sensiolabs/security-checker": "~4.1",
-        "sebastian/phpcpd": "~2.0",
-        "mockery/mockery": "~0.9"
+        "mockery/mockery": "~1.2",
+        "phpunit/phpunit": "^7.5",
+        "simplesamlphp/simplesamlphp-test-framework": "~0.1.0",
+        "sensiolabs/security-checker": "~6.0",
+        "sebastian/phpcpd": "~4.1",
+        "squizlabs/php_codesniffer": "~3.5"
     },
     "autoload": {
-        "psr-0": {
-            "SAML2\\": "src/"
-        },
-        "files": ["src/_autoload.php"]
+        "psr-4": {
+            "SAML2\\": "src/SAML2"
+        }
     },
     "autoload-dev": {
-        "psr-0": {
-            "SAML2\\": "tests/"
+        "psr-4": {
+            "SAML2\\": "tests/SAML2/"
         }
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "v3.1.x-dev"
+            "dev-master": "v4.0.x-dev"
         }
     }
 }
diff --git a/vendor/simplesamlphp/saml2/phpcs.xml b/vendor/simplesamlphp/saml2/phpcs.xml
new file mode 100644
index 0000000000..1873484991
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/phpcs.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ruleset name="SimpleSAMLphp SAML2 ruleset">
+    <description>
+        By default it is less stringent about long lines than other coding standards
+    </description>
+
+    <!-- Use this to exclude paths. You can have multiple patterns -->
+    <!--<exclude-pattern>*/tests/*</exclude-pattern>-->
+    <!--<exclude-pattern>*/other/*</exclude-pattern>-->
+
+    <!-- This is the rule we inherit from. If you want to exlude some specific rules, see the docs on how to do that -->
+    <rule ref="PSR12"/>
+
+    <rule ref="Generic.NamingConventions.UpperCaseConstantName.ConstantNotUpperCase">
+        <exclude-pattern>**/Assertion.php</exclude-pattern>
+        <exclude-pattern>**/LogoutRequest.php</exclude-pattern>
+        <exclude-pattern>**/EncryptedAssertion.php</exclude-pattern>
+    </rule>
+
+    <!-- Lines can be a little bit longer before they break the build -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="80"/>
+            <property name="absoluteLineLimit" value="120"/>
+        </properties>
+        <exclude-pattern>**/EntityDescriptor.php</exclude-pattern>
+    </rule>
+</ruleset>
diff --git a/vendor/simplesamlphp/saml2/phpunit.xml b/vendor/simplesamlphp/saml2/phpunit.xml
index 729cdaed27..ff592aed94 100644
--- a/vendor/simplesamlphp/saml2/phpunit.xml
+++ b/vendor/simplesamlphp/saml2/phpunit.xml
@@ -8,7 +8,6 @@
          convertWarningsToExceptions="true"
          processIsolation="false"
          stopOnFailure="false"
-         syntaxCheck="false"
          bootstrap="./tests/autoload.php">
     <testsuites>
         <testsuite name="Test Suite">
@@ -23,4 +22,7 @@
     <listeners>
         <listener class="\Mockery\Adapter\Phpunit\TestListener" />
     </listeners>
+    <logging>
+        <log type="coverage-clover" target="build/logs/clover.xml"/>
+    </logging>
 </phpunit>
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResolve.php b/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResolve.php
index 2e50b36357..651864e927 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResolve.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResolve.php
@@ -1,8 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
-use Webmozart\Assert\Assert;
+use DOMElement;
 
 /**
  * The Artifact is part of the SAML 2.0 IdP code, and it builds an artifact object.
@@ -14,6 +16,7 @@
  */
 class ArtifactResolve extends Request
 {
+    /** @var string */
     private $artifact;
 
 
@@ -22,7 +25,7 @@ class ArtifactResolve extends Request
      *
      * @param \DOMElement|null $xml The input assertion.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('ArtifactResolve', $xml);
 
@@ -37,7 +40,7 @@ public function __construct(\DOMElement $xml = null)
      *
      * @return string artifact.
      */
-    public function getArtifact()
+    public function getArtifact() : string
     {
         return $this->artifact;
     }
@@ -49,9 +52,8 @@ public function getArtifact()
      * @param string $artifact
      * @return void
      */
-    public function setArtifact($artifact)
+    public function setArtifact(string $artifact) : void
     {
-        Assert::string($artifact);
         $this->artifact = $artifact;
     }
 
@@ -61,7 +63,7 @@ public function setArtifact($artifact)
      *
      * @return \DOMElement This response.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $root = parent::toUnsignedXML();
         $artifactelement = $this->document->createElementNS(Constants::NS_SAMLP, 'Artifact', $this->artifact);
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResponse.php b/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResponse.php
index 7d6a42ee58..f398c3d498 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResponse.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/ArtifactResponse.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
-use Webmozart\Assert\Assert;
+use DOMElement;
+use DOMNode;
 
 /**
  * The \SAML2\ArtifactResponse, is the response to the \SAML2\ArtifactResolve.
@@ -18,7 +21,7 @@ class ArtifactResponse extends StatusResponse
      *
      * @var \DOMElement|null
      */
-    private $any;
+    private $any = null;
 
 
     /**
@@ -27,18 +30,17 @@ class ArtifactResponse extends StatusResponse
      * @param \DOMElement|null $xml The input assertion.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('ArtifactResponse', $xml);
 
         if (!is_null($xml)) {
             $status = Utils::xpQuery($xml, './saml_protocol:Status');
-            Assert::notEmpty($status); /* Will have failed during StatusResponse parsing. */
-
             $status = $status[0];
 
-            for ($any = $status->nextSibling; $any !== null; $any = $any->nextSibling) {
-                if ($any instanceof \DOMElement) {
+            /** @psalm-suppress RedundantCondition */
+            for ($any = $status->nextSibling; $any instanceof DOMNode; $any = $any->nextSibling) {
+                if ($any instanceof DOMElement) {
                     $this->any = $any;
                     break;
                 }
@@ -52,7 +54,7 @@ public function __construct(\DOMElement $xml = null)
      * @param \DOMElement|null $any
      * @return void
      */
-    public function setAny(\DOMElement $any = null)
+    public function setAny(DOMElement $any = null) : void
     {
         $this->any = $any;
     }
@@ -60,8 +62,8 @@ public function setAny(\DOMElement $any = null)
 
     /**
      * @return \DOMElement|null
-    */
-    public function getAny()
+     */
+    public function getAny() : ?DOMElement
     {
         return $this->any;
     }
@@ -72,7 +74,7 @@ public function getAny()
      *
      * @return \DOMElement This response.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $root = parent::toUnsignedXML();
         if (isset($this->any)) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion.php
index 6ec45d5124..48f1b4cbc9 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion.php
@@ -1,23 +1,29 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
+use DOMNode;
+use DOMNodeList;
 use RobRichards\XMLSecLibs\XMLSecEnc;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use Webmozart\Assert\Assert;
+
 use SAML2\Exception\RuntimeException;
 use SAML2\Utilities\Temporal;
 use SAML2\XML\Chunk;
-use SAML2\XML\saml\Issuer as Issuer;
+use SAML2\XML\saml\Issuer;
 use SAML2\XML\saml\NameID;
 use SAML2\XML\saml\SubjectConfirmation;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing a SAML 2 assertion.
  *
  * @package SimpleSAMLphp
  */
-class Assertion implements SignedElement
+class Assertion extends SignedElement
 {
     /**
      * The identifier of this assertion.
@@ -39,7 +45,7 @@ class Assertion implements SignedElement
      * If the issuer's format is \SAML2\Constants::NAMEID_ENTITY, this property will just take the issuer's string
      * value.
      *
-     * @var string|\SAML2\XML\saml\Issuer
+     * @var \SAML2\XML\saml\Issuer
      */
     private $issuer;
 
@@ -77,17 +83,17 @@ class Assertion implements SignedElement
      */
     private $encryptionKey;
 
-     /**
+    /**
      * The earliest time this assertion is valid, as an UNIX timestamp.
      *
-     * @var int
+     * @var int|null
      */
     private $notBefore;
 
     /**
      * The time this assertion expires, as an UNIX timestamp.
      *
-     * @var int
+     * @var int|null
      */
     private $notOnOrAfter;
 
@@ -107,7 +113,7 @@ class Assertion implements SignedElement
      *
      * @var int|null
      */
-    private $sessionNotOnOrAfter;
+    private $sessionNotOnOrAfter = null;
 
     /**
      * The session index for this user on the IdP.
@@ -116,21 +122,21 @@ class Assertion implements SignedElement
      *
      * @var string|null
      */
-    private $sessionIndex;
+    private $sessionIndex = null;
 
     /**
      * The timestamp the user was authenticated, as an UNIX timestamp.
      *
-     * @var int
+     * @var int|null
      */
-    private $authnInstant;
+    private $authnInstant = null;
 
     /**
      * The authentication context reference for this assertion.
      *
      * @var string|null
      */
-    private $authnContextClassRef;
+    private $authnContextClassRef = null;
 
     /**
      * Authentication context declaration provided by value.
@@ -138,25 +144,25 @@ class Assertion implements SignedElement
      * See:
      * @url http://docs.oasis-open.org/security/saml/v2.0/saml-authn-context-2.0-os.pdf
      *
-     * @var \SAML2\XML\Chunk
+     * @var \SAML2\XML\Chunk|null
      */
-    private $authnContextDecl;
+    private $authnContextDecl = null;
 
     /**
      * URI reference that identifies an authentication context declaration.
      *
      * The URI reference MAY directly resolve into an XML document containing the referenced declaration.
      *
-     * @var \SAML2\XML\Chunk
+     * @var string|null
      */
-    private $authnContextDeclRef;
+    private $authnContextDeclRef = null;
 
     /**
      * The list of AuthenticatingAuthorities for this assertion.
      *
      * @var array
      */
-    private $AuthenticatingAuthority;
+    private $AuthenticatingAuthority = [];
 
     /**
      * The attributes, as an associative array, indexed by attribute name
@@ -174,7 +180,7 @@ class Assertion implements SignedElement
      *
      * @var array multi-dimensional array of \DOMNodeList|\SAML2\XML\saml\NameID|string|int|array
      */
-    private $attributes;
+    private $attributes = [];
 
     /**
      * The attributes values types as per http://www.w3.org/2001/XMLSchema definitions
@@ -187,59 +193,42 @@ class Assertion implements SignedElement
      * when generating assertion, the varuable can be:
      * - null : backward compatibility
      * - <attribute name> => <xs type> : all values for the given attribute will have the same xs type
-     * - <attribute name> => [<Value1's xs type>|null, <xs type Value2>|null, ...] : Nth value will have type of the Nth in the array
+     * - <attribute name> => [<Value1's xs type>|null, <xs type Value2>|null, ...] : Nth value will have type of the
+     *   Nth in the array
      *
      * @var array multi-dimensional array of array
      */
-    private $attributesValueTypes;
+    private $attributesValueTypes = [];
 
     /**
      * The NameFormat used on all attributes.
      *
-     * If more than one NameFormat is used, this will contain
-     * the unspecified nameformat.
+     * If more than one NameFormat is used, this will contain the unspecified nameformat.
      *
      * @var string
      */
-    private $nameFormat;
-
-    /**
-     * The private key we should use to sign the assertion.
-     *
-     * The private key can be null, in which case the assertion is sent unsigned.
-     *
-     * @var XMLSecurityKey|null
-     */
-    private $signatureKey;
-
-    /**
-     * List of certificates that should be included in the assertion.
-     *
-     * @var array
-     */
-    private $certificates;
+    private $nameFormat = Constants::NAMEFORMAT_UNSPECIFIED;
 
     /**
      * The data needed to verify the signature.
      *
      * @var array|null
      */
-    private $signatureData;
+    private $signatureData = null;
 
     /**
-     * Boolean that indicates if attributes are encrypted in the
-     * assertion or not.
+     * Boolean that indicates if attributes are encrypted in the assertion or not.
      *
      * @var boolean
      */
-    private $requiredEncAttributes;
+    private $requiredEncAttributes = false;
 
     /**
      * The SubjectConfirmation elements of the Subject in the assertion.
      *
-     * @var \SAML2\XML\saml\SubjectConfirmation[].
+     * @var \SAML2\XML\saml\SubjectConfirmation[]
      */
-    private $SubjectConfirmation;
+    private $SubjectConfirmation = [];
 
     /**
      * @var bool
@@ -258,18 +247,16 @@ class Assertion implements SignedElement
      * @param \DOMElement|null $xml The input assertion.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
-        $this->setId(Utils::getContainer()->generateId());
-        $this->setIssueInstant(Temporal::getTime());
-        $this->setIssuer('');
-        $this->setAuthnInstant(Temporal::getTime());
-        $this->setAttributes([]);
-        $this->setAttributeNameFormat(Constants::NAMEFORMAT_UNSPECIFIED);
-        $this->setCertificates([]);
-        $this->setAuthenticatingAuthority([]);
-        $this->setSubjectConfirmation([]);
-        $this->setRequiredEncAttributes(false);
+        // Create an Issuer
+        $issuer = new Issuer();
+        $issuer->setValue('');
+
+        $this->id = Utils::getContainer()->generateId();
+        $this->issueInstant = Temporal::getTime();
+        $this->issuer = $issuer;
+        $this->authnInstant = Temporal::getTime();
 
         if ($xml === null) {
             return;
@@ -287,14 +274,13 @@ public function __construct(\DOMElement $xml = null)
 
         $this->issueInstant = Utils::xsDateTimeToTimestamp($xml->getAttribute('IssueInstant'));
 
+        /** @var \DOMElement[] $issuer */
         $issuer = Utils::xpQuery($xml, './saml_assertion:Issuer');
         if (empty($issuer)) {
             throw new \Exception('Missing <saml:Issuer> in assertion.');
         }
+
         $this->issuer = new Issuer($issuer[0]);
-        if ($this->issuer->Format === Constants::NAMEID_ENTITY) {
-            $this->issuer = $this->issuer->value;
-        }
 
         $this->parseSubject($xml);
         $this->parseConditions($xml);
@@ -312,8 +298,9 @@ public function __construct(\DOMElement $xml = null)
      * @throws \Exception
      * @return void
      */
-    private function parseSubject(\DOMElement $xml)
+    private function parseSubject(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $subject */
         $subject = Utils::xpQuery($xml, './saml_assertion:Subject');
         if (empty($subject)) {
             /* No Subject node. */
@@ -324,6 +311,7 @@ private function parseSubject(\DOMElement $xml)
         }
         $subject = $subject[0];
 
+        /** @var \DOMElement[] $nameId */
         $nameId = Utils::xpQuery(
             $subject,
             './saml_assertion:NameID | ./saml_assertion:EncryptedID/xenc:EncryptedData'
@@ -340,6 +328,7 @@ private function parseSubject(\DOMElement $xml)
             }
         }
 
+        /** @var \DOMElement[] $subjectConfirmation */
         $subjectConfirmation = Utils::xpQuery($subject, './saml_assertion:SubjectConfirmation');
         if (empty($subjectConfirmation) && empty($nameId)) {
             throw new \Exception('Missing <saml:SubjectConfirmation> in <saml:Subject>.');
@@ -358,8 +347,9 @@ private function parseSubject(\DOMElement $xml)
      * @throws \Exception
      * @return void
      */
-    private function parseConditions(\DOMElement $xml)
+    private function parseConditions(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $conditions */
         $conditions = Utils::xpQuery($xml, './saml_assertion:Conditions');
         if (empty($conditions)) {
             /* No <saml:Conditions> node. */
@@ -383,8 +373,8 @@ private function parseConditions(\DOMElement $xml)
             }
         }
 
-        for ($node = $conditions->firstChild; $node !== null; $node = $node->nextSibling) {
-            if ($node instanceof \DOMText) {
+        foreach ($conditions->childNodes as $node) {
+            if (!$node instanceof DOMElement) {
                 continue;
             }
             if ($node->namespaceURI !== Constants::NS_SAML) {
@@ -424,8 +414,9 @@ private function parseConditions(\DOMElement $xml)
      * @throws \Exception
      * @return void
      */
-    private function parseAuthnStatement(\DOMElement $xml)
+    private function parseAuthnStatement(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $authnStatements */
         $authnStatements = Utils::xpQuery($xml, './saml_assertion:AuthnStatement');
         if (empty($authnStatements)) {
             $this->authnInstant = null;
@@ -442,7 +433,9 @@ private function parseAuthnStatement(\DOMElement $xml)
         $this->authnInstant = Utils::xsDateTimeToTimestamp($authnStatement->getAttribute('AuthnInstant'));
 
         if ($authnStatement->hasAttribute('SessionNotOnOrAfter')) {
-            $this->sessionNotOnOrAfter = Utils::xsDateTimeToTimestamp($authnStatement->getAttribute('SessionNotOnOrAfter'));
+            $this->sessionNotOnOrAfter = Utils::xsDateTimeToTimestamp(
+                $authnStatement->getAttribute('SessionNotOnOrAfter')
+            );
         }
 
         if ($authnStatement->hasAttribute('SessionIndex')) {
@@ -460,9 +453,10 @@ private function parseAuthnStatement(\DOMElement $xml)
      * @throws \Exception
      * @return void
      */
-    private function parseAuthnContext(\DOMElement $authnStatementEl)
+    private function parseAuthnContext(DOMElement $authnStatementEl) : void
     {
         // Get the AuthnContext element
+        /** @var \DOMElement[] $authnContexts */
         $authnContexts = Utils::xpQuery($authnStatementEl, './saml_assertion:AuthnContext');
         if (count($authnContexts) > 1) {
             throw new \Exception('More than one <saml:AuthnContext> in <saml:AuthnStatement>.');
@@ -472,6 +466,7 @@ private function parseAuthnContext(\DOMElement $authnStatementEl)
         $authnContextEl = $authnContexts[0];
 
         // Get the AuthnContextDeclRef (if available)
+        /** @var \DOMElement[] $authnContextDeclRefs */
         $authnContextDeclRefs = Utils::xpQuery($authnContextEl, './saml_assertion:AuthnContextDeclRef');
         if (count($authnContextDeclRefs) > 1) {
             throw new \Exception(
@@ -482,6 +477,7 @@ private function parseAuthnContext(\DOMElement $authnStatementEl)
         }
 
         // Get the AuthnContextDecl (if available)
+        /** @var \DOMElement[] $authnContextDecls */
         $authnContextDecls = Utils::xpQuery($authnContextEl, './saml_assertion:AuthnContextDecl');
         if (count($authnContextDecls) > 1) {
             throw new \Exception(
@@ -492,6 +488,7 @@ private function parseAuthnContext(\DOMElement $authnStatementEl)
         }
 
         // Get the AuthnContextClassRef (if available)
+        /** @var \DOMElement[] $authnContextClassRefs */
         $authnContextClassRefs = Utils::xpQuery($authnContextEl, './saml_assertion:AuthnContextClassRef');
         if (count($authnContextClassRefs) > 1) {
             throw new \Exception('More than one <saml:AuthnContextClassRef> in <saml:AuthnContext>.');
@@ -521,9 +518,10 @@ private function parseAuthnContext(\DOMElement $authnStatementEl)
      * @throws \Exception
      * @return void
      */
-    private function parseAttributes(\DOMElement $xml)
+    private function parseAttributes(DOMElement $xml) : void
     {
         $firstAttribute = true;
+        /** @var \DOMElement[] $attributes */
         $attributes = Utils::xpQuery($xml, './saml_assertion:AttributeStatement/saml_assertion:Attribute');
         foreach ($attributes as $attribute) {
             if (!$attribute->hasAttribute('Name')) {
@@ -561,20 +559,23 @@ private function parseAttributes(\DOMElement $xml)
      * @param string   $attributeName
      * @return void
      */
-    private function parseAttributeValue($attribute, $attributeName)
+    private function parseAttributeValue(DOMNode $attribute, string $attributeName) : void
     {
         /** @var \DOMElement[] $values */
         $values = Utils::xpQuery($attribute, './saml_assertion:AttributeValue');
 
         if ($attributeName === Constants::EPTI_URN_MACE || $attributeName === Constants::EPTI_URN_OID) {
             foreach ($values as $index => $eptiAttributeValue) {
+                /** @var \DOMElement[] $eptiNameId */
                 $eptiNameId = Utils::xpQuery($eptiAttributeValue, './saml_assertion:NameID');
 
                 if (count($eptiNameId) === 1) {
                     $this->attributes[$attributeName][] = new NameID($eptiNameId[0]);
                 } else {
                     /* Fall back for legacy IdPs sending string value (e.g. SSP < 1.15) */
-                    Utils::getContainer()->getLogger()->warning(sprintf("Attribute %s (EPTI) value %d is not an XML NameId", $attributeName, $index));
+                    Utils::getContainer()->getLogger()->warning(
+                        sprintf("Attribute %s (EPTI) value %d is not an XML NameId", $attributeName, $index)
+                    );
                     $nameId = new NameID();
                     $nameId->setValue($eptiAttributeValue->textContent);
                     $this->attributes[$attributeName][] = $nameId;
@@ -620,12 +621,13 @@ private function parseAttributeValue($attribute, $attributeName)
      * @param \DOMElement $xml The XML element with the assertion.
      * @return void
      */
-    private function parseEncryptedAttributes(\DOMElement $xml)
+    private function parseEncryptedAttributes(DOMElement $xml) : void
     {
-        $this->setEncryptedAttributes(Utils::xpQuery(
+        /** @var \DOMElement[] encryptedAttributes */
+        $this->encryptedAttributes = Utils::xpQuery(
             $xml,
             './saml_assertion:AttributeStatement/saml_assertion:EncryptedAttribute'
-        ));
+        );
     }
 
 
@@ -635,15 +637,15 @@ private function parseEncryptedAttributes(\DOMElement $xml)
      * @param \DOMElement $xml The assertion XML element.
      * @return void
      */
-    private function parseSignature(\DOMElement $xml)
+    private function parseSignature(DOMElement $xml) : void
     {
-        /** @var null|\DOMAttr $signatureMethod */
+        /** @var \DOMAttr[] $signatureMethod */
         $signatureMethod = Utils::xpQuery($xml, './ds:Signature/ds:SignedInfo/ds:SignatureMethod/@Algorithm');
 
         /* Validate the signature element of the message. */
         $sig = Utils::validateElement($xml);
         if ($sig !== false) {
-            $this->setWasSignedAtConstruction(true);
+            $this->wasSignedAtConstruction = true;
             $this->setCertificates($sig['Certificates']);
             $this->setSignatureData($sig);
             $this->setSignatureMethod($signatureMethod[0]->value);
@@ -661,15 +663,15 @@ private function parseSignature(\DOMElement $xml)
      * @param  XMLSecurityKey $key The key we should check against.
      * @return boolean        true if successful, false if it is unsigned.
      */
-    public function validate(XMLSecurityKey $key)
+    public function validate(XMLSecurityKey $key) : bool
     {
         Assert::same($key->type, XMLSecurityKey::RSA_SHA256);
 
-        if ($this->getSignatureData() === null) {
+        if ($this->signatureData === null) {
             return false;
         }
 
-        Utils::validateSignature($this->getSignatureData(), $key);
+        Utils::validateSignature($this->signatureData, $key);
 
         return true;
     }
@@ -680,7 +682,7 @@ public function validate(XMLSecurityKey $key)
      *
      * @return string The identifier of this assertion.
      */
-    public function getId()
+    public function getId() : string
     {
         return $this->id;
     }
@@ -692,10 +694,8 @@ public function getId()
      * @param string $id The new identifier of this assertion.
      * @return void
      */
-    public function setId($id)
+    public function setId(string $id) : void
     {
-        Assert::string($id);
-
         $this->id = $id;
     }
 
@@ -705,7 +705,7 @@ public function setId($id)
      *
      * @return int The issue timestamp of this assertion, as an UNIX timestamp.
      */
-    public function getIssueInstant()
+    public function getIssueInstant() : int
     {
         return $this->issueInstant;
     }
@@ -717,10 +717,8 @@ public function getIssueInstant()
      * @param int $issueInstant The new issue timestamp of this assertion, as an UNIX timestamp.
      * @return void
      */
-    public function setIssueInstant($issueInstant)
+    public function setIssueInstant(int $issueInstant) : void
     {
-        Assert::integer($issueInstant);
-
         $this->issueInstant = $issueInstant;
     }
 
@@ -728,9 +726,9 @@ public function setIssueInstant($issueInstant)
     /**
      * Retrieve the issuer if this assertion.
      *
-     * @return string|\SAML2\XML\saml\Issuer The issuer of this assertion.
+     * @return \SAML2\XML\saml\Issuer The issuer of this assertion.
      */
-    public function getIssuer()
+    public function getIssuer() : Issuer
     {
         return $this->issuer;
     }
@@ -739,13 +737,11 @@ public function getIssuer()
     /**
      * Set the issuer of this message.
      *
-     * @param string|\SAML2\XML\saml\Issuer $issuer The new issuer of this assertion.
+     * @param \SAML2\XML\saml\Issuer $issuer The new issuer of this assertion.
      * @return void
      */
-    public function setIssuer($issuer)
+    public function setIssuer(Issuer $issuer) : void
     {
-        Assert::true(is_string($issuer) || $issuer instanceof Issuer);
-
         $this->issuer = $issuer;
     }
 
@@ -756,7 +752,7 @@ public function setIssuer($issuer)
      * @throws \Exception
      * @return \SAML2\XML\saml\NameID|null The name identifier of the assertion.
      */
-    public function getNameId()
+    public function getNameId() : ?NameID
     {
         if ($this->encryptedNameId !== null) {
             throw new \Exception('Attempted to retrieve encrypted NameID without decrypting it first.');
@@ -769,21 +765,14 @@ public function getNameId()
     /**
      * Set the NameId of the subject in the assertion.
      *
-     * The NameId must be a \SAML2\XML\saml\NameID object or an array in the format accepted by
-     * \SAML2\Utils::addNameId() (an array, deprecated).
+     * The NameId must be a \SAML2\XML\saml\NameID object.
      *
      * @see \SAML2\Utils::addNameId()
-     * @param \SAML2\XML\saml\NameID|array|null $nameId The name identifier of the assertion.
+     * @param \SAML2\XML\saml\NameID|null $nameId The name identifier of the assertion.
      * @return void
      */
-    public function setNameId($nameId)
+    public function setNameId(NameID $nameId = null) : void
     {
-        Assert::true(is_array($nameId) || is_null($nameId) || $nameId instanceof NameID);
-
-        if (is_array($nameId)) {
-            // @deprecated behaviour
-            $nameId = NameID::fromArray($nameId);
-        }
         $this->nameId = $nameId;
     }
 
@@ -793,7 +782,7 @@ public function setNameId($nameId)
      *
      * @return bool True if the NameId is encrypted, false if not.
      */
-    public function isNameIdEncrypted()
+    public function isNameIdEncrypted() : bool
     {
         return $this->encryptedNameId !== null;
     }
@@ -805,13 +794,17 @@ public function isNameIdEncrypted()
      * @param XMLSecurityKey $key The encryption key.
      * @return void
      */
-    public function encryptNameId(XMLSecurityKey $key)
+    public function encryptNameId(XMLSecurityKey $key) : void
     {
-        /* First create a XML representation of the NameID. */
+        if ($this->nameId === null) {
+            throw new \Exception('Cannot encrypt NameID, no NameID set.');
+        }
+        /* First create an XML representation of the NameID. */
         $doc = DOMDocumentFactory::create();
         $root = $doc->createElement('root');
         $doc->appendChild($root);
         $this->nameId->toXML($root);
+        /** @var \DOMElement $nameId */
         $nameId = $root->firstChild;
 
         Utils::getContainer()->debugMessage($nameId, 'encrypt');
@@ -827,6 +820,10 @@ public function encryptNameId(XMLSecurityKey $key)
         $symmetricKey->generateSessionKey();
         $enc->encryptKey($key, $symmetricKey);
 
+        /**
+         * @var \DOMElement encryptedNameId
+         * @psalm-suppress UndefinedClass
+         */
         $this->encryptedNameId = $enc->encryptNode($symmetricKey);
         $this->nameId = null;
     }
@@ -839,7 +836,7 @@ public function encryptNameId(XMLSecurityKey $key)
      * @param array          $blacklist Blacklisted decryption algorithms.
      * @return void
      */
-    public function decryptNameId(XMLSecurityKey $key, array $blacklist = [])
+    public function decryptNameId(XMLSecurityKey $key, array $blacklist = []) : void
     {
         if ($this->encryptedNameId === null) {
             /* No NameID to decrypt. */
@@ -860,7 +857,7 @@ public function decryptNameId(XMLSecurityKey $key, array $blacklist = [])
      *
      * @return bool
      */
-    public function hasEncryptedAttributes()
+    public function hasEncryptedAttributes() : bool
     {
         return $this->encryptedAttributes !== [];
     }
@@ -874,7 +871,7 @@ public function hasEncryptedAttributes()
      * @throws \Exception
      * @return void
      */
-    public function decryptAttributes(XMLSecurityKey $key, array $blacklist = [])
+    public function decryptAttributes(XMLSecurityKey $key, array $blacklist = []) : void
     {
         if (!$this->hasEncryptedAttributes()) {
             return;
@@ -882,7 +879,7 @@ public function decryptAttributes(XMLSecurityKey $key, array $blacklist = [])
         $firstAttribute = true;
         $attributes = $this->getEncryptedAttributes();
         foreach ($attributes as $attributeEnc) {
-            /*Decrypt node <EncryptedAttribute>*/
+            /* Decrypt node <EncryptedAttribute> */
             $attribute = Utils::decryptElement(
                 $attributeEnc->getElementsByTagName('EncryptedData')->item(0),
                 $key,
@@ -926,7 +923,7 @@ public function decryptAttributes(XMLSecurityKey $key, array $blacklist = [])
      *
      * @return int|null The earliest timestamp this assertion is valid.
      */
-    public function getNotBefore()
+    public function getNotBefore() : ?int
     {
         return $this->notBefore;
     }
@@ -940,10 +937,8 @@ public function getNotBefore()
      * @param int|null $notBefore The earliest timestamp this assertion is valid.
      * @return void
      */
-    public function setNotBefore($notBefore)
+    public function setNotBefore(int $notBefore = null) : void
     {
-        Assert::nullOrInteger($notBefore);
-
         $this->notBefore = $notBefore;
     }
 
@@ -956,7 +951,7 @@ public function setNotBefore($notBefore)
      *
      * @return int|null The latest timestamp this assertion is valid.
      */
-    public function getNotOnOrAfter()
+    public function getNotOnOrAfter() : ?int
     {
         return $this->notOnOrAfter;
     }
@@ -970,10 +965,8 @@ public function getNotOnOrAfter()
      * @param int|null $notOnOrAfter The latest timestamp this assertion is valid.
      * @return void
      */
-    public function setNotOnOrAfter($notOnOrAfter)
+    public function setNotOnOrAfter(int $notOnOrAfter = null) : void
     {
-        Assert::nullOrInteger($notOnOrAfter);
-
         $this->notOnOrAfter = $notOnOrAfter;
     }
 
@@ -981,9 +974,9 @@ public function setNotOnOrAfter($notOnOrAfter)
     /**
      * Retrieve $requiredEncAttributes if attributes will be send encrypted
      *
-     * @return boolean Rrue to encrypt attributes in the assertion.
+     * @return bool True to encrypt attributes in the assertion.
      */
-    public function getRequiredEncAttributes()
+    public function getRequiredEncAttributes() : bool
     {
         return $this->requiredEncAttributes;
     }
@@ -992,12 +985,11 @@ public function getRequiredEncAttributes()
     /**
      * Set $requiredEncAttributes if attributes will be send encrypted
      *
-     * @param boolean $ea true to encrypt attributes in the assertion.
+     * @param bool $ea true to encrypt attributes in the assertion.
      * @return void
      */
-    public function setRequiredEncAttributes($ea)
+    public function setRequiredEncAttributes(bool $ea) : void
     {
-        Assert::boolean($ea);
         $this->requiredEncAttributes = $ea;
     }
 
@@ -1009,7 +1001,7 @@ public function setRequiredEncAttributes($ea)
      *
      * @return array|null The allowed audiences.
      */
-    public function getValidAudiences()
+    public function getValidAudiences() : ?array
     {
         return $this->validAudiences;
     }
@@ -1023,7 +1015,7 @@ public function getValidAudiences()
      * @param array|null $validAudiences The allowed audiences.
      * @return void
      */
-    public function setValidAudiences(array $validAudiences = null)
+    public function setValidAudiences(array $validAudiences = null) : void
     {
         $this->validAudiences = $validAudiences;
     }
@@ -1034,7 +1026,7 @@ public function setValidAudiences(array $validAudiences = null)
      *
      * @return int|null The timestamp the user was authenticated, or NULL if the user isn't authenticated.
      */
-    public function getAuthnInstant()
+    public function getAuthnInstant() : ?int
     {
         return $this->authnInstant;
     }
@@ -1046,10 +1038,8 @@ public function getAuthnInstant()
      * @param int|null $authnInstant Timestamp the user was authenticated, or NULL if we don't want an AuthnStatement.
      * @return void
      */
-    public function setAuthnInstant($authnInstant)
+    public function setAuthnInstant(int $authnInstant = null) : void
     {
-        Assert::nullOrInteger($authnInstant);
-
         $this->authnInstant = $authnInstant;
     }
 
@@ -1062,7 +1052,7 @@ public function setAuthnInstant($authnInstant)
      *
      * @return int|null The latest timestamp this session is valid.
      */
-    public function getSessionNotOnOrAfter()
+    public function getSessionNotOnOrAfter() : ?int
     {
         return $this->sessionNotOnOrAfter;
     }
@@ -1076,10 +1066,8 @@ public function getSessionNotOnOrAfter()
      * @param int|null $sessionNotOnOrAfter The latest timestamp this session is valid.
      * @return void
      */
-    public function setSessionNotOnOrAfter($sessionNotOnOrAfter)
+    public function setSessionNotOnOrAfter(int $sessionNotOnOrAfter = null) : void
     {
-        Assert::nullOrInteger($sessionNotOnOrAfter);
-
         $this->sessionNotOnOrAfter = $sessionNotOnOrAfter;
     }
 
@@ -1089,7 +1077,7 @@ public function setSessionNotOnOrAfter($sessionNotOnOrAfter)
      *
      * @return string|null The session index of the user at the IdP.
      */
-    public function getSessionIndex()
+    public function getSessionIndex() : ?string
     {
         return $this->sessionIndex;
     }
@@ -1104,10 +1092,8 @@ public function getSessionIndex()
      * @param string|null $sessionIndex The session index of the user at the IdP.
      * @return void
      */
-    public function setSessionIndex($sessionIndex)
+    public function setSessionIndex(string $sessionIndex = null) : void
     {
-        Assert::nullOrString($sessionIndex);
-
         $this->sessionIndex = $sessionIndex;
     }
 
@@ -1118,51 +1104,9 @@ public function setSessionIndex($sessionIndex)
      * This will return null if no authentication statement was
      * included in the assertion.
      *
-     * Note that this returns either the AuthnContextClassRef or the AuthnConextDeclRef, whose definition overlaps
-     * but is slightly different (consult the specification for more information).
-     * This was done to work around an old bug of Shibboleth ( https://bugs.internet2.edu/jira/browse/SIDP-187 ).
-     * Should no longer be required, please use either getAuthnConextClassRef or getAuthnContextDeclRef.
-     *
-     * @deprecated use getAuthnContextClassRef
      * @return string|null The authentication method.
      */
-    public function getAuthnContext()
-    {
-        if (!empty($this->authnContextClassRef)) {
-            return $this->authnContextClassRef;
-        }
-        if (!empty($this->authnContextDeclRef)) {
-            return $this->authnContextDeclRef;
-        }
-        return null;
-    }
-
-
-    /**
-     * Set the authentication method used to authenticate the user.
-     *
-     * If this is set to null, no authentication statement will be
-     * included in the assertion. The default is null.
-     *
-     * @deprecated use setAuthnContextClassRef
-     * @param string|null $authnContext The authentication method.
-     * @return void
-     */
-    public function setAuthnContext($authnContext)
-    {
-        $this->setAuthnContextClassRef($authnContext);
-    }
-
-
-    /**
-     * Retrieve the authentication method used to authenticate the user.
-     *
-     * This will return null if no authentication statement was
-     * included in the assertion.
-     *
-     * @return string|null The authentication method.
-     */
-    public function getAuthnContextClassRef()
+    public function getAuthnContextClassRef() : ?string
     {
         return $this->authnContextClassRef;
     }
@@ -1177,10 +1121,8 @@ public function getAuthnContextClassRef()
      * @param string|null $authnContextClassRef The authentication method.
      * @return void
      */
-    public function setAuthnContextClassRef($authnContextClassRef)
+    public function setAuthnContextClassRef(string $authnContextClassRef = null) : void
     {
-        Assert::nullOrString($authnContextClassRef);
-
         $this->authnContextClassRef = $authnContextClassRef;
     }
 
@@ -1190,7 +1132,7 @@ public function setAuthnContextClassRef($authnContextClassRef)
      *
      * @return string|null The signature method.
      */
-    public function getSignatureMethod()
+    public function getSignatureMethod() : ?string
     {
         return $this->signatureMethod;
     }
@@ -1202,10 +1144,8 @@ public function getSignatureMethod()
      * @param string|null $signatureMethod
      * @return void
      */
-    public function setSignatureMethod($signatureMethod)
+    public function setSignatureMethod(string $signatureMethod = null) : void
     {
-        Assert::nullOrString($signatureMethod);
-
         $this->signatureMethod = $signatureMethod;
     }
 
@@ -1217,7 +1157,7 @@ public function setSignatureMethod($signatureMethod)
      * @throws \Exception
      * @return void
      */
-    public function setAuthnContextDecl(Chunk $authnContextDecl)
+    public function setAuthnContextDecl(Chunk $authnContextDecl) : void
     {
         if (!empty($this->authnContextDeclRef)) {
             throw new \Exception(
@@ -1237,7 +1177,7 @@ public function setAuthnContextDecl(Chunk $authnContextDecl)
      *
      * @return \SAML2\XML\Chunk|null
      */
-    public function getAuthnContextDecl()
+    public function getAuthnContextDecl() : ?Chunk
     {
         return $this->authnContextDecl;
     }
@@ -1246,11 +1186,11 @@ public function getAuthnContextDecl()
     /**
      * Set the authentication context declaration reference.
      *
-     * @param string|\SAML2\XML\Chunk $authnContextDeclRef
+     * @param string|null $authnContextDeclRef
      * @throws \Exception
      * @return void
      */
-    public function setAuthnContextDeclRef($authnContextDeclRef)
+    public function setAuthnContextDeclRef(string $authnContextDeclRef = null) : void
     {
         if (!empty($this->authnContextDecl)) {
             throw new \Exception(
@@ -1268,9 +1208,9 @@ public function setAuthnContextDeclRef($authnContextDeclRef)
      *
      * The URI reference MAY directly resolve into an XML document containing the referenced declaration.
      *
-     * @return string
+     * @return string|null
      */
-    public function getAuthnContextDeclRef()
+    public function getAuthnContextDeclRef() : ?string
     {
         return $this->authnContextDeclRef;
     }
@@ -1281,7 +1221,7 @@ public function getAuthnContextDeclRef()
      *
      * @return array
      */
-    public function getAuthenticatingAuthority()
+    public function getAuthenticatingAuthority() : array
     {
         return $this->AuthenticatingAuthority;
     }
@@ -1290,10 +1230,10 @@ public function getAuthenticatingAuthority()
     /**
      * Set the AuthenticatingAuthority
      *
-     * @param array
+     * @param array $authenticatingAuthority
      * @return void
      */
-    public function setAuthenticatingAuthority(array $authenticatingAuthority)
+    public function setAuthenticatingAuthority(array $authenticatingAuthority) : void
     {
         $this->AuthenticatingAuthority = $authenticatingAuthority;
     }
@@ -1304,7 +1244,7 @@ public function setAuthenticatingAuthority(array $authenticatingAuthority)
      *
      * @return array All attributes, as an associative array.
      */
-    public function getAttributes()
+    public function getAttributes() : array
     {
         return $this->attributes;
     }
@@ -1316,15 +1256,15 @@ public function getAttributes()
      * @param array $attributes All new attributes, as an associative array.
      * @return void
      */
-    public function setAttributes(array $attributes)
+    public function setAttributes(array $attributes) : void
     {
         $this->attributes = $attributes;
     }
 
     /**
-     * @return array
+     * @return array|null
      */
-    public function getSignatureData()
+    public function getSignatureData() : ?array
     {
         return $this->signatureData;
     }
@@ -1334,7 +1274,7 @@ public function getSignatureData()
      * @param array|null $signatureData
      * @return void
      */
-    public function setSignatureData(array $signatureData = null)
+    public function setSignatureData(array $signatureData = null) : void
     {
         $this->signatureData = $signatureData;
     }
@@ -1345,7 +1285,7 @@ public function setSignatureData(array $signatureData = null)
      *
      * @return array All attributes value types, as an associative array.
      */
-    public function getAttributesValueTypes()
+    public function getAttributesValueTypes() : array
     {
         return $this->attributesValueTypes;
     }
@@ -1357,7 +1297,7 @@ public function getAttributesValueTypes()
      * @param array $attributesValueTypes All new attribute value types, as an associative array.
      * @return void
      */
-    public function setAttributesValueTypes(array $attributesValueTypes)
+    public function setAttributesValueTypes(array $attributesValueTypes) : void
     {
         $this->attributesValueTypes = $attributesValueTypes;
     }
@@ -1371,7 +1311,7 @@ public function setAttributesValueTypes(array $attributesValueTypes)
      *
      * @return string The NameFormat used on all attributes.
      */
-    public function getAttributeNameFormat()
+    public function getAttributeNameFormat() : string
     {
         return $this->nameFormat;
     }
@@ -1383,10 +1323,8 @@ public function getAttributeNameFormat()
      * @param string $nameFormat The NameFormat used on all attributes.
      * @return void
      */
-    public function setAttributeNameFormat($nameFormat)
+    public function setAttributeNameFormat(string $nameFormat) : void
     {
-        Assert::string($nameFormat);
-
         $this->nameFormat = $nameFormat;
     }
 
@@ -1396,7 +1334,7 @@ public function setAttributeNameFormat($nameFormat)
      *
      * @return array Array of \SAML2\XML\saml\SubjectConfirmation elements.
      */
-    public function getSubjectConfirmation()
+    public function getSubjectConfirmation() : array
     {
         return $this->SubjectConfirmation;
     }
@@ -1408,7 +1346,7 @@ public function getSubjectConfirmation()
      * @param array $SubjectConfirmation Array of \SAML2\XML\saml\SubjectConfirmation elements.
      * @return void
      */
-    public function setSubjectConfirmation(array $SubjectConfirmation)
+    public function setSubjectConfirmation(array $SubjectConfirmation) : void
     {
         $this->SubjectConfirmation = $SubjectConfirmation;
     }
@@ -1419,7 +1357,7 @@ public function setSubjectConfirmation(array $SubjectConfirmation)
      *
      * @return array Array of \DOMElement elements.
      */
-    public function getEncryptedAttributes()
+    public function getEncryptedAttributes() : array
     {
         return $this->encryptedAttributes;
     }
@@ -1431,7 +1369,7 @@ public function getEncryptedAttributes()
      * @param array $encAttrs Array of \DOMElement elements.
      * @return void
      */
-    public function setEncryptedAttributes(array $encAttrs)
+    public function setEncryptedAttributes(array $encAttrs) : void
     {
         $this->encryptedAttributes = $encAttrs;
     }
@@ -1442,7 +1380,7 @@ public function setEncryptedAttributes(array $encAttrs)
      *
      * @return XMLSecurityKey|null The key, or NULL if no key is specified.
      */
-    public function getSignatureKey()
+    public function getSignatureKey() : ?XMLSecurityKey
     {
         return $this->signatureKey;
     }
@@ -1456,7 +1394,7 @@ public function getSignatureKey()
      * @param XMLSecurityKey|null $signatureKey
      * @return void
      */
-    public function setSignatureKey(XMLSecurityKey $signatureKey = null)
+    public function setSignatureKey(XMLSecurityKey $signatureKey = null) : void
     {
         $this->signatureKey = $signatureKey;
     }
@@ -1468,7 +1406,7 @@ public function setSignatureKey(XMLSecurityKey $signatureKey = null)
      * @return XMLSecurityKey|null The key, or NULL if no key is specified..
      *
      */
-    public function getEncryptionKey()
+    public function getEncryptionKey() : ?XMLSecurityKey
     {
         return $this->encryptionKey;
     }
@@ -1480,7 +1418,7 @@ public function getEncryptionKey()
      * @param XMLSecurityKey|null $Key
      * @return void
      */
-    public function setEncryptionKey(XMLSecurityKey $Key = null)
+    public function setEncryptionKey(XMLSecurityKey $Key = null) : void
     {
         $this->encryptionKey = $Key;
     }
@@ -1494,7 +1432,7 @@ public function setEncryptionKey(XMLSecurityKey $Key = null)
      * @param array $certificates An array of certificates.
      * @return void
      */
-    public function setCertificates(array $certificates)
+    public function setCertificates(array $certificates) : void
     {
         $this->certificates = $certificates;
     }
@@ -1505,7 +1443,7 @@ public function setCertificates(array $certificates)
      *
      * @return array An array of certificates.
      */
-    public function getCertificates()
+    public function getCertificates() : array
     {
         return $this->certificates;
     }
@@ -1514,30 +1452,19 @@ public function getCertificates()
     /**
      * @return bool
      */
-    public function getWasSignedAtConstruction()
+    public function wasSignedAtConstruction() : bool
     {
         return $this->wasSignedAtConstruction;
     }
 
 
-    /**
-     * @param bool $flag
-     * @return void
-     */
-    public function setWasSignedAtConstruction($flag)
-    {
-        Assert::boolean($flag);
-        $this->wasSignedAtConstruction = $flag;
-    }
-
-
     /**
      * Convert this assertion to an XML element.
      *
      * @param  \DOMNode|null $parentElement The DOM node the assertion should be created in.
      * @return \DOMElement   This assertion.
      */
-    public function toXML(\DOMNode $parentElement = null)
+    public function toXML(\DOMNode $parentElement = null) : DOMElement
     {
         if ($parentElement === null) {
             $document = DOMDocumentFactory::create();
@@ -1561,11 +1488,7 @@ public function toXML(\DOMNode $parentElement = null)
         $root->setAttribute('Version', '2.0');
         $root->setAttribute('IssueInstant', gmdate('Y-m-d\TH:i:s\Z', $this->issueInstant));
 
-        if (is_string($this->issuer)) {
-            $issuer = Utils::addString($root, Constants::NS_SAML, 'saml:Issuer', $this->issuer);
-        } elseif ($this->issuer instanceof Issuer) {
-            $issuer = $this->issuer->toXML($root);
-        }
+        $issuer = $this->issuer->toXML($root);
 
         $this->addSubject($root);
         $this->addConditions($root);
@@ -1590,7 +1513,7 @@ public function toXML(\DOMNode $parentElement = null)
      * @param \DOMElement $root The assertion element we should add the subject to.
      * @return void
      */
-    private function addSubject(\DOMElement $root)
+    private function addSubject(DOMElement $root) : void
     {
         if ($this->nameId === null && $this->encryptedNameId === null) {
             /* We don't have anything to create a Subject node for. */
@@ -1621,7 +1544,7 @@ private function addSubject(\DOMElement $root)
      * @param \DOMElement $root The assertion element we should add the conditions to.
      * @return void
      */
-    private function addConditions(\DOMElement $root)
+    private function addConditions(DOMElement $root) : void
     {
         $document = $root->ownerDocument;
 
@@ -1650,7 +1573,7 @@ private function addConditions(\DOMElement $root)
      * @param \DOMElement $root The assertion element we should add the authentication statement to.
      * @return void
      */
-    private function addAuthnStatement(\DOMElement $root)
+    private function addAuthnStatement(DOMElement $root) : void
     {
         if ($this->authnInstant === null ||
             (
@@ -1672,7 +1595,10 @@ private function addAuthnStatement(\DOMElement $root)
         $authnStatementEl->setAttribute('AuthnInstant', gmdate('Y-m-d\TH:i:s\Z', $this->authnInstant));
 
         if ($this->sessionNotOnOrAfter !== null) {
-            $authnStatementEl->setAttribute('SessionNotOnOrAfter', gmdate('Y-m-d\TH:i:s\Z', $this->sessionNotOnOrAfter));
+            $authnStatementEl->setAttribute(
+                'SessionNotOnOrAfter',
+                gmdate('Y-m-d\TH:i:s\Z', $this->sessionNotOnOrAfter)
+            );
         }
         if ($this->sessionIndex !== null) {
             $authnStatementEl->setAttribute('SessionIndex', $this->sessionIndex);
@@ -1717,7 +1643,7 @@ private function addAuthnStatement(\DOMElement $root)
      * @param \DOMElement $root The assertion element we should add the subject to.
      * @return void
      */
-    private function addAttributeStatement(\DOMElement $root)
+    private function addAttributeStatement(DOMElement $root) : void
     {
         if (empty($this->attributes)) {
             return;
@@ -1744,8 +1670,10 @@ private function addAttributeStatement(\DOMElement $root)
                     $attribute->appendChild($attributeValue);
                     if ($eptiValue instanceof NameID) {
                         $eptiValue->toXML($attributeValue);
-                    } elseif ($eptiValue instanceof \DOMNodeList) {
-                        $node = $root->ownerDocument->importNode($eptiValue->item(0), true);
+                    } elseif ($eptiValue instanceof DOMNodeList) {
+                        /** @var \DOMElement $value */
+                        $value = $eptiValue->item(0);
+                        $node = $root->ownerDocument->importNode($value, true);
                         $attributeValue->appendChild($node);
                     } else {
                         $attributeValue->textContent = $eptiValue;
@@ -1756,10 +1684,11 @@ private function addAttributeStatement(\DOMElement $root)
             }
 
             // get value type(s) for the current attribute
-            if (is_array($this->attributesValueTypes) && array_key_exists($name, $this->attributesValueTypes)) {
+            if (array_key_exists($name, $this->attributesValueTypes)) {
                 $valueTypes = $this->attributesValueTypes[$name];
                 if (is_array($valueTypes) && count($valueTypes) != count($values)) {
-                    throw new \Exception('Array of value types and array of values have different size for attribute '.var_export($name, true));
+                    throw new \Exception('Array of value types and array of values have different size for attribute '.
+                        var_export($name, true));
                 }
             } else {
                 // if no type(s), default behaviour
@@ -1801,11 +1730,12 @@ private function addAttributeStatement(\DOMElement $root)
                 }
 
                 if ($value instanceof \DOMNodeList) {
-                    for ($i = 0; $i < $value->length; $i++) {
-                        $node = $document->importNode($value->item($i), true);
+                    foreach ($value as $v) {
+                        $node = $document->importNode($v, true);
                         $attributeValue->appendChild($node);
                     }
                 } else {
+                    $value = strval($value);
                     $attributeValue->appendChild($document->createTextNode($value));
                 }
             }
@@ -1819,11 +1749,12 @@ private function addAttributeStatement(\DOMElement $root)
      * @param \DOMElement $root The assertion element we should add the Encrypted Attribute Statement to.
      * @return void
      */
-    private function addEncryptedAttributeStatement(\DOMElement $root)
+    private function addEncryptedAttributeStatement(DOMElement $root) : void
     {
         if ($this->getRequiredEncAttributes() === false) {
             return;
         }
+        Assert::notNull($this->encryptionKey);
 
         $document = $root->ownerDocument;
 
@@ -1855,12 +1786,13 @@ private function addEncryptedAttributeStatement(\DOMElement $root)
                     $attributeValue->setAttributeNS(Constants::NS_XSI, 'xsi:type', $type);
                 }
 
-                if ($value instanceof \DOMNodeList) {
-                    for ($i = 0; $i < $value->length; $i++) {
-                        $node = $document2->importNode($value->item($i), true);
+                if ($value instanceof DOMNodeList) {
+                    foreach ($value as $v) {
+                        $node = $document2->importNode($v, true);
                         $attributeValue->appendChild($node);
                     }
                 } else {
+                    $value = strval($value);
                     $attributeValue->appendChild($document2->createTextNode($value));
                 }
             }
@@ -1874,11 +1806,14 @@ private function addEncryptedAttributeStatement(\DOMElement $root)
              */
             $symmetricKey = new XMLSecurityKey(XMLSecurityKey::AES256_CBC);
             $symmetricKey->generateSessionKey();
+            /** @psalm-suppress PossiblyNullArgument */
             $EncAssert->encryptKey($this->encryptionKey, $symmetricKey);
+            /** @psalm-suppress UndefinedClass */
             $EncrNode = $EncAssert->encryptNode($symmetricKey);
 
             $EncAttribute = $document->createElementNS(Constants::NS_SAML, 'saml:EncryptedAttribute');
             $attributeStatement->appendChild($EncAttribute);
+            /** @psalm-suppress InvalidArgument */
             $n = $document->importNode($EncrNode, true);
             $EncAttribute->appendChild($n);
         }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Decrypter.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Decrypter.php
index a1ec8d5ec5..9a97f97676 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Decrypter.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Decrypter.php
@@ -1,8 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion;
 
 use Psr\Log\LoggerInterface;
+
+use SAML2\Assertion;
 use SAML2\Assertion\Exception\NotDecryptedException;
 use SAML2\Certificate\PrivateKeyLoader;
 use SAML2\Configuration\IdentityProvider;
@@ -58,7 +62,7 @@ public function __construct(
      *
      * @return bool
      */
-    public function isEncryptionRequired()
+    public function isEncryptionRequired() : bool
     {
         return $this->identityProvider->isAssertionEncryptionRequired()
             || $this->serviceProvider->isAssertionEncryptionRequired();
@@ -70,7 +74,7 @@ public function isEncryptionRequired()
      *
      * @return \SAML2\Assertion
      */
-    public function decrypt(EncryptedAssertion $assertion)
+    public function decrypt(EncryptedAssertion $assertion) : Assertion
     {
         $decryptionKeys = $this->privateKeyLoader->loadDecryptionKeys($this->identityProvider, $this->serviceProvider);
         $blacklistedKeys = $this->identityProvider->getBlacklistedAlgorithms();
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidAssertionException.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidAssertionException.php
index 3a4cea3d4b..0ac6bffebe 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidAssertionException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidAssertionException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Exception;
 
 use SAML2\Exception\RuntimeException;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidSubjectConfirmationException.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidSubjectConfirmationException.php
index a6836840a7..7804ab6b21 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidSubjectConfirmationException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/InvalidSubjectConfirmationException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Exception;
 
 use SAML2\Exception\RuntimeException;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/NotDecryptedException.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/NotDecryptedException.php
index a04874f999..5c2cbf1a9a 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/NotDecryptedException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Exception/NotDecryptedException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Exception;
 
 use SAML2\Exception\RuntimeException;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Processor.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Processor.php
index a2494b052a..e131bfa439 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Processor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Processor.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion;
 
 use Psr\Log\LoggerInterface;
@@ -10,14 +12,11 @@
 use SAML2\Assertion\Validation\AssertionValidator;
 use SAML2\Assertion\Validation\SubjectConfirmationValidator;
 use SAML2\Configuration\IdentityProvider;
+use SAML2\EncryptedAssertion;
 use SAML2\Response\Exception\InvalidSignatureException;
-use SAML2\Response\Exception\UnencryptedAssertionFoundException;
 use SAML2\Signature\Validator;
 use SAML2\Utilities\ArrayCollection;
 
-/**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - due to all the named exceptions
- */
 class Processor
 {
     /**
@@ -85,13 +84,35 @@ public function __construct(
 
 
     /**
+     * Decrypt assertions, or do nothing if assertions are already decrypted.
+     *
      * @param \SAML2\Utilities\ArrayCollection $assertions
-     * @return \SAML2\Assertion[] Collection (\SAML2\Utilities\ArrayCollection) of processed assertions
+     * @return \SAML2\Utilities\ArrayCollection Collection of processed assertions
      */
-    public function processAssertions($assertions)
+    public function decryptAssertions(ArrayCollection $assertions)
+    {
+        $decrypted = new ArrayCollection();
+        foreach ($assertions->getIterator() as $assertion) {
+            if ($assertion instanceof EncryptedAssertion) {
+                $decrypted->add($this->decryptAssertion($assertion));
+            } elseif ($assertion instanceof Assertion) {
+                $decrypted->add($assertion);
+            } else {
+                throw new InvalidAssertionException('The assertion must be of type: EncryptedAssertion or Assertion');
+            }
+        }
+
+        return $decrypted;
+    }
+
+    /**
+     * @param \SAML2\Utilities\ArrayCollection $assertions Collection of decrypted assertions
+     * @return \SAML2\Utilities\ArrayCollection Collection of processed assertions
+     */
+    public function processAssertions(ArrayCollection $assertions) : ArrayCollection
     {
         $processed = new ArrayCollection();
-        foreach ($assertions as $assertion) {
+        foreach ($assertions->getIterator() as $assertion) {
             $processed->add($this->process($assertion));
         }
 
@@ -100,14 +121,12 @@ public function processAssertions($assertions)
 
 
     /**
-     * @param \SAML2\Assertion|\SAML2\EncryptedAssertion $assertion
+     * @param \SAML2\Assertion $assertion
      * @return \SAML2\Assertion
      */
-    public function process($assertion)
+    public function process(Assertion $assertion): Assertion
     {
-        $assertion = $this->decryptAssertion($assertion);
-
-        if (!$assertion->getWasSignedAtConstruction()) {
+        if (!$assertion->wasSignedAtConstruction()) {
             $this->logger->info(sprintf(
                 'Assertion with id "%s" was not signed at construction, not verifying the signature',
                 $assertion->getId()
@@ -116,7 +135,9 @@ public function process($assertion)
             $this->logger->info(sprintf('Verifying signature of Assertion with id "%s"', $assertion->getId()));
 
             if (!$this->signatureValidator->hasValidSignature($assertion, $this->identityProviderConfiguration)) {
-                throw new InvalidSignatureException();
+                throw new InvalidSignatureException(
+                    sprintf('The assertion with id "%s" does not have a valid signature', $assertion->getId())
+                );
             }
         }
 
@@ -129,19 +150,11 @@ public function process($assertion)
 
 
     /**
-     * @param \SAML2\Assertion|\SAML2\EncryptedAssertion $assertion
+     * @param \SAML2\EncryptedAssertion $assertion
      * @return \SAML2\Assertion
      */
-    private function decryptAssertion($assertion)
+    private function decryptAssertion(EncryptedAssertion $assertion): Assertion
     {
-        if ($this->decrypter->isEncryptionRequired() && $assertion instanceof Assertion) {
-            throw new UnencryptedAssertionFoundException();
-        }
-
-        if ($assertion instanceof Assertion) {
-            return $assertion;
-        }
-
         return $this->decrypter->decrypt($assertion);
     }
 
@@ -150,12 +163,12 @@ private function decryptAssertion($assertion)
      * @param \SAML2\Assertion $assertion
      * @return void
      */
-    public function validateAssertion(Assertion $assertion)
+    public function validateAssertion(Assertion $assertion) : void
     {
         $assertionValidationResult = $this->assertionValidator->validate($assertion);
         if (!$assertionValidationResult->isValid()) {
             throw new InvalidAssertionException(sprintf(
-                'Invalid Assertion in SAML Response, erorrs: "%s"',
+                'Invalid Assertion in SAML Response, errors: "%s"',
                 implode('", "', $assertionValidationResult->getErrors())
             ));
         }
@@ -178,7 +191,7 @@ public function validateAssertion(Assertion $assertion)
      * @param \SAML2\Assertion $assertion
      * @return \SAML2\Assertion
      */
-    private function transformAssertion(Assertion $assertion)
+    private function transformAssertion(Assertion $assertion) : Assertion
     {
         return $this->transformer->transform($assertion);
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/ProcessorBuilder.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/ProcessorBuilder.php
index f04930cf60..aff5ca709f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/ProcessorBuilder.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/ProcessorBuilder.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion;
 
 use Psr\Log\LoggerInterface;
+
 use SAML2\Assertion\Transformer\DecodeBase64Transformer;
 use SAML2\Assertion\Transformer\NameIdDecryptionTransformer;
 use SAML2\Assertion\Transformer\TransformerChain;
@@ -28,20 +31,17 @@
  * Simple Builder that allows to build a new Assertion Processor.
  *
  * This is an excellent candidate for refactoring towards dependency injection
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class ProcessorBuilder
 {
     /**
-     * Constructor for ProcessorBuilder
-     *
      * @param LoggerInterface $logger
      * @param Validator $signatureValidator
      * @param Destination $currentDestination
      * @param IdentityProvider $identityProvider
      * @param ServiceProvider $serviceProvider
      * @param Response $response
+     * @return Processor
      */
     public static function build(
         LoggerInterface $logger,
@@ -50,7 +50,7 @@ public static function build(
         IdentityProvider $identityProvider,
         ServiceProvider $serviceProvider,
         Response $response
-    ) {
+    ) : Processor {
         $keyloader = new PrivateKeyLoader();
         $decrypter = new Decrypter($logger, $identityProvider, $serviceProvider, $keyloader);
         $assertionValidator = self::createAssertionValidator($identityProvider, $serviceProvider);
@@ -88,7 +88,7 @@ public static function build(
     private static function createAssertionValidator(
         IdentityProvider $identityProvider,
         ServiceProvider $serviceProvider
-    ) {
+    ) : AssertionValidator {
         $validator = new AssertionValidator($identityProvider, $serviceProvider);
         $validator->addConstraintValidator(new NotBefore());
         $validator->addConstraintValidator(new NotOnOrAfter());
@@ -111,7 +111,7 @@ private static function createSubjectConfirmationValidator(
         ServiceProvider $serviceProvider,
         Destination $currentDestination,
         Response $response
-    ) {
+    ) : SubjectConfirmationValidator {
         $validator = new SubjectConfirmationValidator($identityProvider, $serviceProvider);
         $validator->addConstraintValidator(
             new SubjectConfirmationMethod()
@@ -148,7 +148,7 @@ private static function createAssertionTransformerChain(
         PrivateKeyLoader $keyloader,
         IdentityProvider $identityProvider,
         ServiceProvider $serviceProvider
-    ) {
+    ) : TransformerChain {
         $chain = new TransformerChain($identityProvider, $serviceProvider);
         $chain->addTransformerStep(new DecodeBase64Transformer());
         $chain->addTransformerStep(
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/DecodeBase64Transformer.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/DecodeBase64Transformer.php
index e2522d1828..c5aa0e383a 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/DecodeBase64Transformer.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/DecodeBase64Transformer.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Transformer;
 
 use SAML2\Assertion;
@@ -20,7 +22,7 @@ class DecodeBase64Transformer implements
      * @param IdentityProvider $identityProvider
      * @return void
      */
-    public function setIdentityProvider(IdentityProvider $identityProvider)
+    public function setIdentityProvider(IdentityProvider $identityProvider) : void
     {
         $this->identityProvider = $identityProvider;
     }
@@ -30,7 +32,7 @@ public function setIdentityProvider(IdentityProvider $identityProvider)
      * @param Assertion $assertion
      * @return Assertion
      */
-    public function transform(Assertion $assertion)
+    public function transform(Assertion $assertion) : Assertion
     {
         if (!$this->identityProvider->hasBase64EncodedAttributes()) {
             return $assertion;
@@ -48,12 +50,10 @@ public function transform(Assertion $assertion)
 
 
     /**
-     * @param $value
-     *
+     * @param string $value
      * @return array
-     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
      */
-    private function decodeValue($value)
+    private function decodeValue(string $value) : array
     {
         $elements = explode('_', $value);
         return array_map('base64_decode', $elements);
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/NameIdDecryptionTransformer.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/NameIdDecryptionTransformer.php
index 0f4411523f..cdd0a9ccab 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/NameIdDecryptionTransformer.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/NameIdDecryptionTransformer.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Transformer;
 
 use Psr\Log\LoggerInterface;
+
 use SAML2\Assertion;
 use SAML2\Assertion\Exception\NotDecryptedException;
 use SAML2\Certificate\PrivateKeyLoader;
@@ -11,7 +14,7 @@
 use SAML2\Configuration\ServiceProvider;
 use SAML2\Configuration\ServiceProviderAware;
 
-class NameIdDecryptionTransformer implements
+final class NameIdDecryptionTransformer implements
     Transformer,
     IdentityProviderAware,
     ServiceProviderAware
@@ -54,9 +57,10 @@ public function __construct(
 
     /**
      * @param Assertion $assertion
+     * @throws \Exception
      * @return Assertion
      */
-    public function transform(Assertion $assertion)
+    public function transform(Assertion $assertion) : Assertion
     {
         if (!$assertion->isNameIdEncrypted()) {
             return $assertion;
@@ -96,7 +100,7 @@ public function transform(Assertion $assertion)
      * @param IdentityProvider $identityProvider
      * @return void
      */
-    public function setIdentityProvider(IdentityProvider $identityProvider)
+    public function setIdentityProvider(IdentityProvider $identityProvider) : void
     {
         $this->identityProvider = $identityProvider;
     }
@@ -106,7 +110,7 @@ public function setIdentityProvider(IdentityProvider $identityProvider)
      * @param ServiceProvider $serviceProvider
      * @return void
      */
-    public function setServiceProvider(ServiceProvider $serviceProvider)
+    public function setServiceProvider(ServiceProvider $serviceProvider) : void
     {
         $this->serviceProvider = $serviceProvider;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/Transformer.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/Transformer.php
index ad3afab941..4aac469411 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/Transformer.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/Transformer.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Transformer;
 
 use SAML2\Assertion;
@@ -11,5 +13,5 @@ interface Transformer
      *
      * @return \SAML2\Assertion
      */
-    public function transform(Assertion $assertion);
+    public function transform(Assertion $assertion) : Assertion;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/TransformerChain.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/TransformerChain.php
index 8b34d462ed..fb5e2bd543 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/TransformerChain.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Transformer/TransformerChain.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Transformer;
 
 use SAML2\Assertion;
@@ -45,7 +47,7 @@ public function __construct(
      * @param Transformer $transformer
      * @return void
      */
-    public function addTransformerStep(Transformer $transformer)
+    public function addTransformerStep(Transformer $transformer) : void
     {
         if ($transformer instanceof IdentityProviderAware) {
             $transformer->setIdentityProvider($this->identityProvider);
@@ -64,7 +66,7 @@ public function addTransformerStep(Transformer $transformer)
      *
      * @return \SAML2\Assertion
      */
-    public function transform(Assertion $assertion)
+    public function transform(Assertion $assertion) : Assertion
     {
         foreach ($this->transformers as $transformer) {
             $assertion = $transformer->transform($assertion);
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionConstraintValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionConstraintValidator.php
index 9205ea0307..279cf63a45 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionConstraintValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionConstraintValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation;
 
 use SAML2\Assertion;
@@ -11,5 +13,5 @@ interface AssertionConstraintValidator
      * @param Result $result
      * @return void
      */
-    public function validate(Assertion $assertion, Result $result);
+    public function validate(Assertion $assertion, Result $result) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionValidator.php
index 11da8a261e..d4e61f5059 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/AssertionValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation;
 
 use SAML2\Assertion;
@@ -43,7 +45,7 @@ public function __construct(
      * @param AssertionConstraintValidator $constraint
      * @return void
      */
-    public function addConstraintValidator(AssertionConstraintValidator $constraint)
+    public function addConstraintValidator(AssertionConstraintValidator $constraint) : void
     {
         if ($constraint instanceof IdentityProviderAware) {
             $constraint->setIdentityProvider($this->identityProvider);
@@ -61,7 +63,7 @@ public function addConstraintValidator(AssertionConstraintValidator $constraint)
      * @param Assertion $assertion
      * @return Result
      */
-    public function validate(Assertion $assertion)
+    public function validate(Assertion $assertion) : Result
     {
         $result = new Result();
         foreach ($this->constraints as $validator) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotBefore.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotBefore.php
index 5b9ea6dc75..d0046138b8 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotBefore.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotBefore.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion;
@@ -15,7 +17,7 @@ class NotBefore implements
      * @param Result $result
      * @return void
      */
-    public function validate(Assertion $assertion, Result $result)
+    public function validate(Assertion $assertion, Result $result) : void
     {
         $notBeforeTimestamp = $assertion->getNotBefore();
         if (($notBeforeTimestamp !== null) && ($notBeforeTimestamp > (Temporal::getTime() + 60))) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotOnOrAfter.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotOnOrAfter.php
index 83b634ea7d..06baf9d093 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotOnOrAfter.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/NotOnOrAfter.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion;
@@ -15,7 +17,7 @@ class NotOnOrAfter implements
      * @param Result $result
      * @return void
      */
-    public function validate(Assertion $assertion, Result $result)
+    public function validate(Assertion $assertion, Result $result) : void
     {
         $notValidOnOrAfterTimestamp = $assertion->getNotOnOrAfter();
         if (($notValidOnOrAfterTimestamp !== null) && ($notValidOnOrAfterTimestamp <= (Temporal::getTime() - 60))) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SessionNotOnOrAfter.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SessionNotOnOrAfter.php
index 0c9543a9b3..bb570f8a22 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SessionNotOnOrAfter.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SessionNotOnOrAfter.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion;
@@ -15,7 +17,7 @@ class SessionNotOnOrAfter implements
      * @param Result $result
      * @return void
      */
-    public function validate(Assertion $assertion, Result $result)
+    public function validate(Assertion $assertion, Result $result) : void
     {
         $sessionNotOnOrAfterTimestamp = $assertion->getSessionNotOnOrAfter();
         $currentTime = Temporal::getTime();
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SpIsValidAudience.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SpIsValidAudience.php
index 75fe7e0b2f..fd962a7517 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SpIsValidAudience.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SpIsValidAudience.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion;
@@ -22,7 +24,7 @@ class SpIsValidAudience implements
      * @param ServiceProvider $serviceProvider
      * @return void
      */
-    public function setServiceProvider(ServiceProvider $serviceProvider)
+    public function setServiceProvider(ServiceProvider $serviceProvider) : void
     {
         $this->serviceProvider = $serviceProvider;
     }
@@ -33,7 +35,7 @@ public function setServiceProvider(ServiceProvider $serviceProvider)
      * @param Result $result
      * @return void
      */
-    public function validate(Assertion $assertion, Result $result)
+    public function validate(Assertion $assertion, Result $result) : void
     {
         $intendedAudiences = $assertion->getValidAudiences();
         if ($intendedAudiences === null) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationMethod.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationMethod.php
index a0ea751e19..9296114b06 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationMethod.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationMethod.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion\Validation\Result;
@@ -7,8 +9,7 @@
 use SAML2\Constants;
 use SAML2\XML\saml\SubjectConfirmation;
 
-class SubjectConfirmationMethod implements
-    SubjectConfirmationConstraintValidator
+final class SubjectConfirmationMethod implements SubjectConfirmationConstraintValidator
 {
     /**
      * @param SubjectConfirmation $subjectConfirmation
@@ -18,8 +19,8 @@ class SubjectConfirmationMethod implements
     public function validate(
         SubjectConfirmation $subjectConfirmation,
         Result $result
-    ) {
-        if ($subjectConfirmation->Method !== Constants::CM_BEARER) {
+    ) : void {
+        if ($subjectConfirmation->getMethod() !== Constants::CM_BEARER) {
             $result->addError(sprintf(
                 'Invalid Method on SubjectConfirmation, current;y only Bearer (%s) is supported',
                 Constants::CM_BEARER
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotBefore.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotBefore.php
index 3642d7ae9a..4ccd6e7780 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotBefore.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotBefore.php
@@ -1,11 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion\Validation\Result;
 use SAML2\Assertion\Validation\SubjectConfirmationConstraintValidator;
 use SAML2\Utilities\Temporal;
 use SAML2\XML\saml\SubjectConfirmation;
+use Webmozart\Assert\Assert;
 
 class SubjectConfirmationNotBefore implements
     SubjectConfirmationConstraintValidator
@@ -18,8 +21,12 @@ class SubjectConfirmationNotBefore implements
     public function validate(
         SubjectConfirmation $subjectConfirmation,
         Result $result
-    ) {
-        $notBefore = $subjectConfirmation->getSubjectConfirmationData()->getNotBefore();
+    ) : void {
+        $data = $subjectConfirmation->getSubjectConfirmationData();
+        Assert::notNull($data);
+
+        /** @psalm-suppress PossiblyNullReference */
+        $notBefore = $data->getNotBefore();
         if ($notBefore && $notBefore > Temporal::getTime() + 60) {
             $result->addError('NotBefore in SubjectConfirmationData is in the future');
         }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotOnOrAfter.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotOnOrAfter.php
index 4a0fb076aa..e17e388d0d 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotOnOrAfter.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationNotOnOrAfter.php
@@ -1,11 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
 use SAML2\Assertion\Validation\Result;
 use SAML2\Assertion\Validation\SubjectConfirmationConstraintValidator;
 use SAML2\Utilities\Temporal;
 use SAML2\XML\saml\SubjectConfirmation;
+use Webmozart\Assert\Assert;
 
 class SubjectConfirmationNotOnOrAfter implements
     SubjectConfirmationConstraintValidator
@@ -18,8 +21,12 @@ class SubjectConfirmationNotOnOrAfter implements
     public function validate(
         SubjectConfirmation $subjectConfirmation,
         Result $result
-    ) {
-        $notOnOrAfter = $subjectConfirmation->getSubjectConfirmationData()->getNotOnOrAfter();
+    ) : void {
+        $data = $subjectConfirmation->getSubjectConfirmationData();
+        Assert::notNull($data);
+
+        /** @psalm-suppress PossiblyNullReference */
+        $notOnOrAfter = $data->getNotOnOrAfter();
         if ($notOnOrAfter && $notOnOrAfter <= Temporal::getTime() - 60) {
             $result->addError('NotOnOrAfter in SubjectConfirmationData is in the past');
         }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationRecipientMatches.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationRecipientMatches.php
index 81b5002205..b9f1399c8f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationRecipientMatches.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationRecipientMatches.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
+use Webmozart\Assert\Assert;
+
 use SAML2\Assertion\Validation\Result;
 use SAML2\Assertion\Validation\SubjectConfirmationConstraintValidator;
 use SAML2\Configuration\Destination;
@@ -27,20 +31,22 @@ public function __construct(Destination $destination)
 
 
     /**
-     * @param SubjectConfirmation
+     * @param SubjectConfirmation $subjectConfirmation
      * @param Result $result
      * @return void
      */
-    public function validate(
-        SubjectConfirmation $subjectConfirmation,
-        Result $result
-    ) {
-        $recipient = $subjectConfirmation->getSubjectConfirmationData()->getRecipient();
+    public function validate(SubjectConfirmation $subjectConfirmation, Result $result) : void
+    {
+        $data = $subjectConfirmation->getSubjectConfirmationData();
+        Assert::notNull($data);
+
+        /** @psalm-suppress PossiblyNullReference */
+        $recipient = $data->getRecipient();
         if ($recipient && !$this->destination->equals(new Destination($recipient))) {
             $result->addError(sprintf(
                 'Recipient in SubjectConfirmationData ("%s") does not match the current destination ("%s")',
                 $recipient,
-                $this->destination
+                strval($this->destination)
             ));
         }
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationResponseToMatches.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationResponseToMatches.php
index 99dd5d9e1e..e01fefb59b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationResponseToMatches.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/ConstraintValidator/SubjectConfirmationResponseToMatches.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation\ConstraintValidator;
 
+use Webmozart\Assert\Assert;
+
 use SAML2\Assertion\Validation\Result;
 use SAML2\Assertion\Validation\SubjectConfirmationConstraintValidator;
 use SAML2\Response;
@@ -25,15 +29,17 @@ public function __construct(Response $response)
 
 
     /**
-     * @param SubjectConfirmation
+     * @param \SAML2\XML\saml\SubjectConfirmation $subjectConfirmation
      * @param Result $result
      * @return void
      */
-    public function validate(
-        SubjectConfirmation $subjectConfirmation,
-        Result $result
-    ) {
-        $inResponseTo = $subjectConfirmation->getSubjectConfirmationData()->getInResponseTo();
+    public function validate(SubjectConfirmation $subjectConfirmation, Result $result) : void
+    {
+        $data = $subjectConfirmation->getSubjectConfirmationData();
+        Assert::notNull($data);
+
+        /** @psalm-suppress PossiblyNullReference */
+        $inResponseTo = $data->getInResponseTo();
         if ($inResponseTo && ($this->getInResponseTo() !== false) && ($this->getInResponseTo() !== $inResponseTo)) {
             $result->addError(sprintf(
                 'InResponseTo in SubjectConfirmationData ("%s") does not match the Response InResponseTo ("%s")',
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/Result.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/Result.php
index 17bb319466..44d84f9307 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/Result.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/Result.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation;
 
 use SAML2\Exception\InvalidArgumentException;
@@ -19,12 +21,8 @@ class Result
      * @param $message
      * @return void
      */
-    public function addError($message)
+    public function addError(string $message) : void
     {
-        if (!is_string($message)) {
-            throw InvalidArgumentException::invalidType('string', $message);
-        }
-
         $this->errors[] = $message;
     }
 
@@ -32,7 +30,7 @@ public function addError($message)
     /**
      * @return bool
      */
-    public function isValid()
+    public function isValid() : bool
     {
         return empty($this->errors);
     }
@@ -41,7 +39,7 @@ public function isValid()
     /**
      * @return array
      */
-    public function getErrors()
+    public function getErrors() : array
     {
         return $this->errors;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationConstraintValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationConstraintValidator.php
index 02759290f6..a6ce33f950 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationConstraintValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationConstraintValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation;
 
 use SAML2\XML\saml\SubjectConfirmation;
@@ -14,5 +16,5 @@ interface SubjectConfirmationConstraintValidator
     public function validate(
         SubjectConfirmation $subjectConfirmation,
         Result $result
-    );
+    ) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationValidator.php
index 7e65d4105a..fd7c933171 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Assertion/Validation/SubjectConfirmationValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Assertion\Validation;
 
 use SAML2\Configuration\IdentityProvider;
@@ -47,7 +49,7 @@ public function __construct(
      */
     public function addConstraintValidator(
         SubjectConfirmationConstraintValidator $constraint
-    ) {
+    ) : void {
         if ($constraint instanceof IdentityProviderAware) {
             $constraint->setIdentityProvider($this->identityProvider);
         }
@@ -64,7 +66,7 @@ public function addConstraintValidator(
      * @param SubjectConfirmation $subjectConfirmation
      * @return Result
      */
-    public function validate(SubjectConfirmation $subjectConfirmation)
+    public function validate(SubjectConfirmation $subjectConfirmation) : Result
     {
         $result = new Result();
         foreach ($this->constraints as $validator) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/AttributeQuery.php b/vendor/simplesamlphp/saml2/src/SAML2/AttributeQuery.php
index 170f29e7bf..8102aa2363 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/AttributeQuery.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/AttributeQuery.php
@@ -1,8 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
-use Webmozart\Assert\Assert;
+use DOMElement;
 
 /**
  * Class for SAML 2 attribute query messages.
@@ -26,7 +28,7 @@ class AttributeQuery extends SubjectQuery
      *
      * @var array
      */
-    private $attributes;
+    private $attributes = [];
 
     /**
      * The NameFormat used on all attributes.
@@ -45,7 +47,7 @@ class AttributeQuery extends SubjectQuery
      * @param \DOMElement|null $xml The input message.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('AttributeQuery', $xml);
 
@@ -57,6 +59,7 @@ public function __construct(\DOMElement $xml = null)
         }
 
         $firstAttribute = true;
+        /** @var \DOMElement[] $attributes */
         $attributes = Utils::xpQuery($xml, './saml_assertion:Attribute');
         foreach ($attributes as $attribute) {
             if (!$attribute->hasAttribute('Name')) {
@@ -96,7 +99,7 @@ public function __construct(\DOMElement $xml = null)
      *
      * @return array All requested attributes, as an associative array.
      */
-    public function getAttributes()
+    public function getAttributes() : array
     {
         return $this->attributes;
     }
@@ -108,7 +111,7 @@ public function getAttributes()
      * @param array $attributes All requested attributes, as an associative array.
      * @return void
      */
-    public function setAttributes(array $attributes)
+    public function setAttributes(array $attributes) : void
     {
         $this->attributes = $attributes;
     }
@@ -122,7 +125,7 @@ public function setAttributes(array $attributes)
      *
      * @return string The NameFormat used on all attributes.
      */
-    public function getAttributeNameFormat()
+    public function getAttributeNameFormat() : string
     {
         return $this->nameFormat;
     }
@@ -134,10 +137,8 @@ public function getAttributeNameFormat()
      * @param string $nameFormat The NameFormat used on all attributes.
      * @return void
      */
-    public function setAttributeNameFormat($nameFormat)
+    public function setAttributeNameFormat(string $nameFormat) : void
     {
-        Assert::string($nameFormat);
-
         $this->nameFormat = $nameFormat;
     }
 
@@ -147,7 +148,7 @@ public function setAttributeNameFormat($nameFormat)
      *
      * @return \DOMElement This attribute query.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $root = parent::toUnsignedXML();
 
@@ -169,7 +170,12 @@ public function toUnsignedXML()
                     $type = null;
                 }
 
-                $attributeValue = Utils::addString($attribute, Constants::NS_SAML, 'saml:AttributeValue', strval($value));
+                $attributeValue = Utils::addString(
+                    $attribute,
+                    Constants::NS_SAML,
+                    'saml:AttributeValue',
+                    strval($value)
+                );
                 if ($type !== null) {
                     $attributeValue->setAttributeNS(Constants::NS_XSI, 'xsi:type', $type);
                 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/AuthnRequest.php b/vendor/simplesamlphp/saml2/src/SAML2/AuthnRequest.php
index 4c2c8aef41..a3756a46b1 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/AuthnRequest.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/AuthnRequest.php
@@ -1,13 +1,18 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMDocument;
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecEnc;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use Webmozart\Assert\Assert;
+
 use SAML2\XML\saml\NameID;
 use SAML2\XML\saml\SubjectConfirmation;
 use SAML2\Exception\InvalidArgumentException;
-use Webmozart\Assert\Assert;
 
 /**
  * Class for SAML 2 authentication request messages.
@@ -21,28 +26,28 @@ class AuthnRequest extends Request
      *
      * @var array
      */
-    private $nameIdPolicy;
+    private $nameIdPolicy = [];
 
     /**
      * Whether the Identity Provider must authenticate the user again.
      *
      * @var bool
      */
-    private $forceAuthn;
+    private $forceAuthn = false;
 
     /**
      * Optional ProviderID attribute
      *
-     * @var string
+     * @var string|null
      */
-    private $ProviderName;
+    private $ProviderName = null;
 
     /**
      * Set to true if this request is passive.
      *
      * @var bool
      */
-    private $isPassive;
+    private $isPassive = false;
 
     /**
      * The list of providerIDs in this request's scoping element
@@ -54,7 +59,7 @@ class AuthnRequest extends Request
     /**
      * The ProxyCount in this request's scoping element
      *
-     * @var int
+     * @var int|null
      */
     private $ProxyCount = null;
 
@@ -101,7 +106,7 @@ class AuthnRequest extends Request
      * - AuthnContextClassRef (required)
      * - Comparison (optinal)
      *
-     * @var array
+     * @var array|null
      */
     private $requestedAuthnContext;
 
@@ -118,14 +123,14 @@ class AuthnRequest extends Request
     private $subjectConfirmation = [];
 
     /**
-     * @var string
+     * @var \DOMElement|null
      */
-    private $encryptedNameId;
+    private $encryptedNameId = null;
 
     /**
-     * @var \SAML2\XML\saml\NameID
+     * @var \SAML2\XML\saml\NameID|null
      */
-    private $nameId;
+    private $nameId = null;
 
 
     /**
@@ -134,14 +139,10 @@ class AuthnRequest extends Request
      * @param \DOMElement|null $xml The input message.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('AuthnRequest', $xml);
 
-        $this->nameIdPolicy = [];
-        $this->forceAuthn = false;
-        $this->isPassive = false;
-
         if ($xml === null) {
             return;
         }
@@ -158,11 +159,11 @@ public function __construct(\DOMElement $xml = null)
         }
 
         if ($xml->hasAttribute('AttributeConsumingServiceIndex')) {
-            $this->attributeConsumingServiceIndex = (int) $xml->getAttribute('AttributeConsumingServiceIndex');
+            $this->attributeConsumingServiceIndex = intval($xml->getAttribute('AttributeConsumingServiceIndex'));
         }
 
         if ($xml->hasAttribute('AssertionConsumerServiceIndex')) {
-            $this->assertionConsumerServiceIndex = (int) $xml->getAttribute('AssertionConsumerServiceIndex');
+            $this->assertionConsumerServiceIndex = intval($xml->getAttribute('AssertionConsumerServiceIndex'));
         }
 
         if ($xml->hasAttribute('ProviderName')) {
@@ -182,8 +183,9 @@ public function __construct(\DOMElement $xml = null)
      * @throws \Exception
      * @return void
      */
-    private function parseSubject(\DOMElement $xml)
+    private function parseSubject(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $subject */
         $subject = Utils::xpQuery($xml, './saml_assertion:Subject');
         if (empty($subject)) {
             return;
@@ -194,6 +196,7 @@ private function parseSubject(\DOMElement $xml)
         }
         $subject = $subject[0];
 
+        /** @var \DOMElement[] $nameId */
         $nameId = Utils::xpQuery(
             $subject,
             './saml_assertion:NameID | ./saml_assertion:EncryptedID/xenc:EncryptedData'
@@ -204,13 +207,13 @@ private function parseSubject(\DOMElement $xml)
             throw new \Exception('More than one <saml:NameID> or <saml:EncryptedID> in <saml:Subject>.');
         }
         $nameId = $nameId[0];
-        if ($nameId->localName === 'EncryptedData') {
-            /* The NameID element is encrypted. */
+        if ($nameId->localName === 'EncryptedData') { // the NameID element is encrypted
             $this->encryptedNameId = $nameId;
         } else {
             $this->nameId = new NameID($nameId);
         }
 
+        /** @var \DOMElement[] $subjectConfirmation */
         $subjectConfirmation = Utils::xpQuery($subject, './saml_assertion:SubjectConfirmation');
         foreach ($subjectConfirmation as $sc) {
             $this->subjectConfirmation[] = new SubjectConfirmation($sc);
@@ -223,8 +226,9 @@ private function parseSubject(\DOMElement $xml)
      * @throws \Exception
      * @return void
      */
-    protected function parseNameIdPolicy(\DOMElement $xml)
+    protected function parseNameIdPolicy(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $nameIdPolicy */
         $nameIdPolicy = Utils::xpQuery($xml, './saml_protocol:NameIDPolicy');
         if (empty($nameIdPolicy)) {
             return;
@@ -247,8 +251,9 @@ protected function parseNameIdPolicy(\DOMElement $xml)
      * @param \DOMElement $xml
      * @return void
      */
-    protected function parseRequestedAuthnContext(\DOMElement $xml)
+    protected function parseRequestedAuthnContext(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $requestedAuthnContext */
         $requestedAuthnContext = Utils::xpQuery($xml, './saml_protocol:RequestedAuthnContext');
         if (empty($requestedAuthnContext)) {
             return;
@@ -261,6 +266,7 @@ protected function parseRequestedAuthnContext(\DOMElement $xml)
             'Comparison'           => Constants::COMPARISON_EXACT,
         ];
 
+        /** @var \DOMElement[] $accr */
         $accr = Utils::xpQuery($requestedAuthnContext, './saml_assertion:AuthnContextClassRef');
         foreach ($accr as $i) {
             $rac['AuthnContextClassRef'][] = trim($i->textContent);
@@ -279,8 +285,9 @@ protected function parseRequestedAuthnContext(\DOMElement $xml)
      * @throws \Exception
      * @return void
      */
-    protected function parseScoping(\DOMElement $xml)
+    protected function parseScoping(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $scoping */
         $scoping = Utils::xpQuery($xml, './saml_protocol:Scoping');
         if (empty($scoping)) {
             return;
@@ -291,6 +298,7 @@ protected function parseScoping(\DOMElement $xml)
         if ($scoping->hasAttribute('ProxyCount')) {
             $this->ProxyCount = (int) $scoping->getAttribute('ProxyCount');
         }
+        /** @var \DOMElement[] $idpEntries */
         $idpEntries = Utils::xpQuery($scoping, './saml_protocol:IDPList/saml_protocol:IDPEntry');
 
         foreach ($idpEntries as $idpEntry) {
@@ -300,6 +308,7 @@ protected function parseScoping(\DOMElement $xml)
             $this->IDPList[] = $idpEntry->getAttribute('ProviderID');
         }
 
+        /** @var \DOMElement[] $requesterIDs */
         $requesterIDs = Utils::xpQuery($scoping, './saml_protocol:RequesterID');
         foreach ($requesterIDs as $requesterID) {
             $this->RequesterID[] = trim($requesterID->textContent);
@@ -311,20 +320,23 @@ protected function parseScoping(\DOMElement $xml)
      * @param \DOMElement $xml
      * @return void
      */
-    protected function parseConditions(\DOMElement $xml)
+    protected function parseConditions(DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $conditions */
         $conditions = Utils::xpQuery($xml, './saml_assertion:Conditions');
         if (empty($conditions)) {
             return;
         }
         $conditions = $conditions[0];
 
+        /** @var \DOMElement[] $ar */
         $ar = Utils::xpQuery($conditions, './saml_assertion:AudienceRestriction');
         if (empty($ar)) {
             return;
         }
         $ar = $ar[0];
 
+        /** @var \DOMElement[] $audiences */
         $audiences = Utils::xpQuery($ar, './saml_assertion:Audience');
         $this->audiences = array();
         foreach ($audiences as $a) {
@@ -339,7 +351,7 @@ protected function parseConditions(\DOMElement $xml)
      * @see \SAML2\AuthnRequest::setNameIdPolicy()
      * @return array The NameIdPolicy.
      */
-    public function getNameIdPolicy()
+    public function getNameIdPolicy() : array
     {
         return $this->nameIdPolicy;
     }
@@ -356,7 +368,7 @@ public function getNameIdPolicy()
      * @param array $nameIdPolicy The NameIDPolicy.
      * @return void
      */
-    public function setNameIdPolicy(array $nameIdPolicy)
+    public function setNameIdPolicy(array $nameIdPolicy) : void
     {
         if (isset($nameIdPolicy['Format']) && !is_string($nameIdPolicy['Format'])) {
             throw InvalidArgumentException::invalidType('string', $nameIdPolicy['Format']);
@@ -377,7 +389,7 @@ public function setNameIdPolicy(array $nameIdPolicy)
      *
      * @return bool The ForceAuthn attribute.
      */
-    public function getForceAuthn()
+    public function getForceAuthn() : bool
     {
         return $this->forceAuthn;
     }
@@ -389,10 +401,8 @@ public function getForceAuthn()
      * @param bool $forceAuthn The ForceAuthn attribute.
      * @return void
      */
-    public function setForceAuthn($forceAuthn)
+    public function setForceAuthn(bool $forceAuthn) : void
     {
-        Assert::boolean($forceAuthn);
-
         $this->forceAuthn = $forceAuthn;
     }
 
@@ -400,9 +410,9 @@ public function setForceAuthn($forceAuthn)
     /**
      * Retrieve the value of the ProviderName attribute.
      *
-     * @return string The ProviderName attribute.
+     * @return string|null The ProviderName attribute.
      */
-    public function getProviderName()
+    public function getProviderName() : ?string
     {
         return $this->ProviderName;
     }
@@ -414,10 +424,8 @@ public function getProviderName()
      * @param string $ProviderName The ProviderName attribute.
      * @return void
      */
-    public function setProviderName($ProviderName)
+    public function setProviderName(string $ProviderName) : void
     {
-        Assert::string($ProviderName);
-
         $this->ProviderName = $ProviderName;
     }
 
@@ -427,7 +435,7 @@ public function setProviderName($ProviderName)
      *
      * @return bool The IsPassive attribute.
      */
-    public function getIsPassive()
+    public function getIsPassive() : bool
     {
         return $this->isPassive;
     }
@@ -439,21 +447,19 @@ public function getIsPassive()
      * @param bool $isPassive The IsPassive attribute.
      * @return void
      */
-    public function setIsPassive($isPassive)
+    public function setIsPassive(bool $isPassive) : void
     {
-        Assert::boolean($isPassive);
-
         $this->isPassive = $isPassive;
     }
 
 
     /**
      * Retrieve the audiences from the request.
-     * This may be null, in which case no audience is included.
+     * This may be an empty string, in which case no audience is included.
      *
      * @return array The audiences.
      */
-    public function getAudiences()
+    public function getAudiences() : array
     {
         return $this->audiences;
     }
@@ -461,12 +467,12 @@ public function getAudiences()
 
     /**
      * Set the audiences to send in the request.
-     * This may be null, in which case no audience will be sent.
+     * This may be an empty string, in which case no audience will be sent.
      *
-     * @param array|null $audiences The audiences.
+     * @param array $audiences The audiences.
      * @return void
      */
-    public function setAudiences(array $audiences)
+    public function setAudiences(array $audiences) : void
     {
         $this->audiences = $audiences;
     }
@@ -488,7 +494,7 @@ public function setAudiences(array $audiences)
      * @param array $IDPList List of idpEntries to scope the request to.
      * @return void
      */
-    public function setIDPList(array $IDPList)
+    public function setIDPList(array $IDPList) : void
     {
         $this->IDPList = $IDPList;
     }
@@ -500,7 +506,7 @@ public function setIDPList(array $IDPList)
      *
      * @return array List of idp EntityIDs from the request
      */
-    public function getIDPList()
+    public function getIDPList() : array
     {
         return $this->IDPList;
     }
@@ -510,9 +516,8 @@ public function getIDPList()
      * @param int $ProxyCount
      * @return void
      */
-    public function setProxyCount($ProxyCount)
+    public function setProxyCount(int $ProxyCount) : void
     {
-        Assert::integer($ProxyCount);
         $this->ProxyCount = $ProxyCount;
     }
 
@@ -520,7 +525,7 @@ public function setProxyCount($ProxyCount)
     /**
      * @return int|null
      */
-    public function getProxyCount()
+    public function getProxyCount() : ?int
     {
         return $this->ProxyCount;
     }
@@ -530,7 +535,7 @@ public function getProxyCount()
      * @param array $RequesterID
      * @return void
      */
-    public function setRequesterID(array $RequesterID)
+    public function setRequesterID(array $RequesterID) : void
     {
         $this->RequesterID = $RequesterID;
     }
@@ -539,7 +544,7 @@ public function setRequesterID(array $RequesterID)
     /**
      * @return array
      */
-    public function getRequesterID()
+    public function getRequesterID() : array
     {
         return $this->RequesterID;
     }
@@ -550,7 +555,7 @@ public function getRequesterID()
      *
      * @return string|null The AssertionConsumerServiceURL attribute.
      */
-    public function getAssertionConsumerServiceURL()
+    public function getAssertionConsumerServiceURL() : ?string
     {
         return $this->assertionConsumerServiceURL;
     }
@@ -562,10 +567,8 @@ public function getAssertionConsumerServiceURL()
      * @param string|null $assertionConsumerServiceURL The AssertionConsumerServiceURL attribute.
      * @return void
      */
-    public function setAssertionConsumerServiceURL($assertionConsumerServiceURL)
+    public function setAssertionConsumerServiceURL(string $assertionConsumerServiceURL = null) : void
     {
-        Assert::nullOrString($assertionConsumerServiceURL);
-
         $this->assertionConsumerServiceURL = $assertionConsumerServiceURL;
     }
 
@@ -575,7 +578,7 @@ public function setAssertionConsumerServiceURL($assertionConsumerServiceURL)
      *
      * @return string|null The ProtocolBinding attribute.
      */
-    public function getProtocolBinding()
+    public function getProtocolBinding() : ?string
     {
         return $this->protocolBinding;
     }
@@ -587,10 +590,8 @@ public function getProtocolBinding()
      * @param string $protocolBinding The ProtocolBinding attribute.
      * @return void
      */
-    public function setProtocolBinding($protocolBinding)
+    public function setProtocolBinding(string $protocolBinding = null) : void
     {
-        Assert::nullOrString($protocolBinding);
-
         $this->protocolBinding = $protocolBinding;
     }
 
@@ -600,7 +601,7 @@ public function setProtocolBinding($protocolBinding)
      *
      * @return int|null The AttributeConsumingServiceIndex attribute.
      */
-    public function getAttributeConsumingServiceIndex()
+    public function getAttributeConsumingServiceIndex() : ?int
     {
         return $this->attributeConsumingServiceIndex;
     }
@@ -612,10 +613,8 @@ public function getAttributeConsumingServiceIndex()
      * @param int|null $attributeConsumingServiceIndex The AttributeConsumingServiceIndex attribute.
      * @return void
      */
-    public function setAttributeConsumingServiceIndex($attributeConsumingServiceIndex)
+    public function setAttributeConsumingServiceIndex(int $attributeConsumingServiceIndex = null) : void
     {
-        Assert::nullOrInteger($attributeConsumingServiceIndex);
-
         $this->attributeConsumingServiceIndex = $attributeConsumingServiceIndex;
     }
 
@@ -625,7 +624,7 @@ public function setAttributeConsumingServiceIndex($attributeConsumingServiceInde
      *
      * @return int|null The AssertionConsumerServiceIndex attribute.
      */
-    public function getAssertionConsumerServiceIndex()
+    public function getAssertionConsumerServiceIndex() : ?int
     {
         return $this->assertionConsumerServiceIndex;
     }
@@ -637,10 +636,8 @@ public function getAssertionConsumerServiceIndex()
      * @param int|null $assertionConsumerServiceIndex The AssertionConsumerServiceIndex attribute.
      * @return void
      */
-    public function setAssertionConsumerServiceIndex($assertionConsumerServiceIndex)
+    public function setAssertionConsumerServiceIndex(int $assertionConsumerServiceIndex = null) : void
     {
-        Assert::nullOrInteger($assertionConsumerServiceIndex);
-
         $this->assertionConsumerServiceIndex = $assertionConsumerServiceIndex;
     }
 
@@ -650,7 +647,7 @@ public function setAssertionConsumerServiceIndex($assertionConsumerServiceIndex)
      *
      * @return array|null The RequestedAuthnContext.
      */
-    public function getRequestedAuthnContext()
+    public function getRequestedAuthnContext() : ?array
     {
         return $this->requestedAuthnContext;
     }
@@ -659,10 +656,10 @@ public function getRequestedAuthnContext()
     /**
      * Set the RequestedAuthnContext.
      *
-     * @param array $requestedAuthnContext The RequestedAuthnContext.
+     * @param array|null $requestedAuthnContext The RequestedAuthnContext.
      * @return void
      */
-    public function setRequestedAuthnContext(array $requestedAuthnContext)
+    public function setRequestedAuthnContext(array $requestedAuthnContext = null) : void
     {
         $this->requestedAuthnContext = $requestedAuthnContext;
     }
@@ -674,7 +671,7 @@ public function setRequestedAuthnContext(array $requestedAuthnContext)
      * @throws \Exception
      * @return \SAML2\XML\saml\NameID|null The name identifier of the assertion.
      */
-    public function getNameId()
+    public function getNameId() : ?NameID
     {
         if ($this->encryptedNameId !== null) {
             throw new \Exception('Attempted to retrieve encrypted NameID without decrypting it first.');
@@ -690,13 +687,8 @@ public function getNameId()
      * @param \SAML2\XML\saml\NameID|null $nameId The name identifier of the assertion.
      * @return void
      */
-    public function setNameId($nameId)
+    public function setNameId(NameID $nameId = null) : void
     {
-        Assert::true(is_array($nameId) || is_null($nameId) || $nameId instanceof NameID);
-
-        if (is_array($nameId)) {
-            $nameId = NameID::fromArray($nameId);
-        }
         $this->nameId = $nameId;
     }
 
@@ -707,13 +699,17 @@ public function setNameId($nameId)
      * @param XMLSecurityKey $key The encryption key.
      * @return void
      */
-    public function encryptNameId(XMLSecurityKey $key)
+    public function encryptNameId(XMLSecurityKey $key) : void
     {
+        Assert::notNull($this->nameId, 'Cannot encrypt NameID if no NameID has been set.');
+
         /* First create a XML representation of the NameID. */
-        $doc  = new \DOMDocument();
+        $doc  = new DOMDocument();
         $root = $doc->createElement('root');
         $doc->appendChild($root);
+        /** @psalm-suppress PossiblyNullReference */
         $this->nameId->toXML($root);
+        /** @var \DOMElement $nameId */
         $nameId = $root->firstChild;
 
         Utils::getContainer()->debugMessage($nameId, 'encrypt');
@@ -729,6 +725,10 @@ public function encryptNameId(XMLSecurityKey $key)
         $symmetricKey->generateSessionKey();
         $enc->encryptKey($key, $symmetricKey);
 
+        /**
+         * @var \DOMElement encryptedNameId
+         * @psalm-suppress UndefinedClass
+         */
         $this->encryptedNameId = $enc->encryptNode($symmetricKey);
         $this->nameId = null;
     }
@@ -741,7 +741,7 @@ public function encryptNameId(XMLSecurityKey $key)
      * @param array          $blacklist Blacklisted decryption algorithms.
      * @return void
      */
-    public function decryptNameId(XMLSecurityKey $key, array $blacklist = [])
+    public function decryptNameId(XMLSecurityKey $key, array $blacklist = []) : void
     {
         if ($this->encryptedNameId === null) {
             /* No NameID to decrypt. */
@@ -761,7 +761,7 @@ public function decryptNameId(XMLSecurityKey $key, array $blacklist = [])
      *
      * @return \SAML2\XML\saml\SubjectConfirmation[]
      */
-    public function getSubjectConfirmation()
+    public function getSubjectConfirmation() : array
     {
         return $this->subjectConfirmation;
     }
@@ -773,7 +773,7 @@ public function getSubjectConfirmation()
      * @param array \SAML2\XML\saml\SubjectConfirmation[]
      * @return void
      */
-    public function setSubjectConfirmation(array $subjectConfirmation)
+    public function setSubjectConfirmation(array $subjectConfirmation) : void
     {
         $this->subjectConfirmation = $subjectConfirmation;
     }
@@ -784,7 +784,7 @@ public function setSubjectConfirmation(array $subjectConfirmation)
      *
      * @return \DOMElement This authentication request.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $root = parent::toUnsignedXML();
 
@@ -792,7 +792,7 @@ public function toUnsignedXML()
             $root->setAttribute('ForceAuthn', 'true');
         }
 
-        if ($this->ProviderName !== null) {
+        if (!empty($this->ProviderName)) {
             $root->setAttribute('ProviderName', $this->ProviderName);
         }
 
@@ -801,7 +801,7 @@ public function toUnsignedXML()
         }
 
         if ($this->assertionConsumerServiceIndex !== null) {
-            $root->setAttribute('AssertionConsumerServiceIndex', $this->assertionConsumerServiceIndex);
+            $root->setAttribute('AssertionConsumerServiceIndex', strval($this->assertionConsumerServiceIndex));
         } else {
             if ($this->assertionConsumerServiceURL !== null) {
                 $root->setAttribute('AssertionConsumerServiceURL', $this->assertionConsumerServiceURL);
@@ -812,7 +812,7 @@ public function toUnsignedXML()
         }
 
         if ($this->attributeConsumingServiceIndex !== null) {
-            $root->setAttribute('AttributeConsumingServiceIndex', $this->attributeConsumingServiceIndex);
+            $root->setAttribute('AttributeConsumingServiceIndex', strval($this->attributeConsumingServiceIndex));
         }
 
         $this->addSubject($root);
@@ -849,7 +849,7 @@ public function toUnsignedXML()
             $scoping = $this->document->createElementNS(Constants::NS_SAMLP, 'Scoping');
             $root->appendChild($scoping);
             if ($this->ProxyCount !== null) {
-                $scoping->setAttribute('ProxyCount', $this->ProxyCount);
+                $scoping->setAttribute('ProxyCount', strval($this->ProxyCount));
             }
             if (count($this->IDPList) > 0) {
                 $idplist = $this->document->createElementNS(Constants::NS_SAMLP, 'IDPList');
@@ -887,7 +887,7 @@ public function toUnsignedXML()
      * @param \DOMElement $root The assertion element we should add the subject to.
      * @return void
      */
-    private function addSubject(\DOMElement $root)
+    private function addSubject(DOMElement $root) : void
     {
         // If there is no nameId (encrypted or not) there is nothing to create a subject for
         if ($this->nameId === null && $this->encryptedNameId === null) {
@@ -917,7 +917,7 @@ private function addSubject(\DOMElement $root)
      * @param \DOMElement $root The request element we should add the conditions to.
      * @return void
      */
-    private function addConditions(\DOMElement $root)
+    private function addConditions(DOMElement $root) : void
     {
         if ($this->audiences !== []) {
             $document = $root->ownerDocument;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Binding.php b/vendor/simplesamlphp/saml2/src/SAML2/Binding.php
index a4a38fca28..8803c5a17f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Binding.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Binding.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace SAML2;
+declare(strict_types=1);
 
-use Webmozart\Assert\Assert;
+namespace SAML2;
 
 /**
  * Base class for SAML 2 bindings.
@@ -15,8 +15,9 @@ abstract class Binding
      * The destination of messages.
      *
      * This can be null, in which case the destination in the message is used.
+     * @var string|null
      */
-    protected $destination;
+    protected $destination = null;
 
 
     /**
@@ -28,10 +29,8 @@ abstract class Binding
      * @throws \Exception
      * @return \SAML2\Binding The binding.
      */
-    public static function getBinding($urn)
+    public static function getBinding(string $urn) : Binding
     {
-        Assert::string($urn);
-
         switch ($urn) {
             case Constants::BINDING_HTTP_POST:
                 return new HTTPPost();
@@ -63,7 +62,7 @@ public static function getBinding($urn)
      * @throws \Exception
      * @return \SAML2\Binding The binding.
      */
-    public static function getCurrentBinding()
+    public static function getCurrentBinding() : Binding
     {
         switch ($_SERVER['REQUEST_METHOD']) {
             case 'GET':
@@ -86,7 +85,7 @@ public static function getCurrentBinding()
                     return new HTTPPost();
                 } elseif (array_key_exists('SAMLart', $_POST)) {
                     return new HTTPArtifact();
-                } elseif ($contentType === 'text/xml') {
+                } elseif ($contentType === 'text/xml' || $contentType === 'application/soap+xml') {
                     return new SOAP();
                 }
                 break;
@@ -105,16 +104,16 @@ public static function getCurrentBinding()
             $logger->warning('Content-Type: '.var_export($_SERVER['CONTENT_TYPE'], true));
         }
 
-        throw new \Exception('Unable to find the current binding.');
+        throw new \Exception('Unable to find the SAML 2 binding used for this request.');
     }
 
 
     /**
      * Retrieve the destination of a message.
      *
-     * @return string|null $destination  The destination the message will be delivered to.
+     * @return string|null $destination The destination the message will be delivered to.
      */
-    public function getDestination()
+    public function getDestination() : ?string
     {
         return $this->destination;
     }
@@ -128,10 +127,8 @@ public function getDestination()
      * @param string|null $destination The destination the message should be delivered to.
      * @return void
      */
-    public function setDestination($destination)
+    public function setDestination(string $destination = null) : void
     {
-        Assert::nullOrString($destination);
-
         $this->destination = $destination;
     }
 
@@ -145,7 +142,7 @@ public function setDestination($destination)
      * @param \SAML2\Message $message The message which should be sent.
      * @return void
      */
-    abstract public function send(Message $message);
+    abstract public function send(Message $message) : void;
 
 
     /**
@@ -156,5 +153,5 @@ abstract public function send(Message $message);
      *
      * @return \SAML2\Message The received message.
      */
-    abstract public function receive();
+    abstract public function receive(): Message;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidCertificateStructureException.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidCertificateStructureException.php
index 1ac6d5078e..5c6ff17f4d 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidCertificateStructureException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidCertificateStructureException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate\Exception;
 
 use SAML2\Exception\Throwable;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidKeyUsageException.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidKeyUsageException.php
index 65aecf864d..5743025668 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidKeyUsageException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/InvalidKeyUsageException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate\Exception;
 
 use SAML2\Certificate\Key;
@@ -14,11 +16,11 @@ class InvalidKeyUsageException extends \InvalidArgumentException implements
     /**
      * @param string $usage
      */
-    public function __construct($usage)
+    public function __construct(string $usage)
     {
         $message = sprintf(
             'Invalid key usage given: "%s", usages "%s" allowed',
-            is_string($usage) ? $usage : gettype($usage),
+            $usage,
             implode('", "', Key::getValidKeyUsages())
         );
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/NoKeysFoundException.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/NoKeysFoundException.php
index aa1886e213..e6daceffb0 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/NoKeysFoundException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Exception/NoKeysFoundException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate\Exception;
 
 use SAML2\Exception\Throwable;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Fingerprint.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Fingerprint.php
deleted file mode 100644
index 89a0a916bf..0000000000
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Fingerprint.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace SAML2\Certificate;
-
-use SAML2\Exception\InvalidArgumentException;
-
-/**
- * Simple representation of the fingerprint of a certificate
- *
- * @deprecated Please use full certificates instead.
- */
-class Fingerprint
-{
-    /**
-     * @var string
-     */
-    private $contents;
-
-
-    /**
-     * @param string $fingerPrint
-     *
-     * @deprecated Please use full certificates instead.
-     */
-    public function __construct($fingerPrint)
-    {
-        if (!is_string($fingerPrint)) {
-            throw InvalidArgumentException::invalidType('string', $fingerPrint);
-        }
-
-        $this->contents = $fingerPrint;
-    }
-
-
-    /**
-     * Get the raw, unmodified fingerprint value.
-     *
-     * @return string
-     */
-    public function getRaw()
-    {
-        return $this->contents;
-    }
-
-
-    /**
-     * @return string
-     */
-    public function getNormalized()
-    {
-        return strtolower(str_replace(':', '', $this->contents));
-    }
-
-
-    /**
-     * @param \SAML2\Certificate\Fingerprint $fingerprint
-     * @return bool
-     */
-    public function equals(Fingerprint $fingerprint)
-    {
-        return $this->getNormalized() === $fingerprint->getNormalized();
-    }
-}
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintCollection.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintCollection.php
deleted file mode 100644
index 1926663ce8..0000000000
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintCollection.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-namespace SAML2\Certificate;
-
-use SAML2\Exception\InvalidArgumentException;
-use SAML2\Utilities\ArrayCollection;
-
-/**
- * Simple collection object for transporting keys
- * @deprecated Please load full certificates instead.
- */
-class FingerprintCollection extends ArrayCollection
-{
-    /**
-     * Add a key to the collection
-     *
-     * @param \SAML2\Certificate\Fingerprint $fingerprint
-     * @return void
-     *
-     * @deprecated
-     */
-    public function add($fingerprint)
-    {
-        if (!$fingerprint instanceof Fingerprint) {
-            throw InvalidArgumentException::invalidType(
-                'SAML2\Certificate\Fingerprint ',
-                $fingerprint
-            );
-        }
-
-        parent::add($fingerprint);
-    }
-
-
-    /**
-     * @param \SAML2\Certificate\Fingerprint $otherFingerprint
-     * @return bool
-     *
-     * @deprecated
-     */
-    public function contains(Fingerprint $otherFingerprint)
-    {
-        foreach ($this->elements as $fingerprint) {
-            /** @var \SAML2\Certificate\Fingerprint $fingerprint */
-            if ($fingerprint->equals($otherFingerprint)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-}
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintLoader.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintLoader.php
deleted file mode 100644
index 98d2b53a21..0000000000
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/FingerprintLoader.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace SAML2\Certificate;
-
-use SAML2\Configuration\CertificateProvider;
-use SAML2\Exception\InvalidArgumentException;
-
-/**
- * @deprecated Please load full certificates instead.
- */
-class FingerprintLoader
-{
-    /**
-     * Static method mainly for BC, should be replaced with DI.
-     *
-     * @param \SAML2\Configuration\CertificateProvider $configuration
-     * @return \SAML2\Certificate\FingerprintCollection
-     *
-     * @deprecated
-     */
-    public static function loadFromConfiguration(CertificateProvider $configuration)
-    {
-        $loader = new self();
-
-        return $loader->loadFingerprints($configuration);
-    }
-
-
-    /**
-     * Loads the fingerprints from a configurationValue
-     *
-     * @param \SAML2\Configuration\CertificateProvider $configuration
-     * @return \SAML2\Certificate\FingerprintCollection
-     *
-     * @deprecated
-     */
-    public function loadFingerprints(CertificateProvider $configuration)
-    {
-        $fingerprints = $configuration->getCertificateFingerprints();
-        if (!is_array($fingerprints) && !$fingerprints instanceof \Traversable) {
-            throw InvalidArgumentException::invalidType(
-                'array or instanceof \Traversable',
-                $fingerprints
-            );
-        }
-
-        $collection = new FingerprintCollection();
-        foreach ($fingerprints as $fingerprint) {
-            if (!is_string($fingerprint) && !(is_object($fingerprint) && method_exists($fingerprint, '__toString'))) {
-                throw InvalidArgumentException::invalidType(
-                    'fingerprint as string or object that can be casted to string',
-                    $fingerprint
-                );
-            }
-
-            $collection->add(new Fingerprint((string) $fingerprint));
-        }
-
-        return $collection;
-    }
-}
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Key.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Key.php
index 51784b797f..442c6707f2 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Key.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/Key.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate;
 
 use SAML2\Certificate\Exception\InvalidKeyUsageException;
@@ -36,10 +38,10 @@ public function __construct(array $keyData)
     /**
      * Whether or not the key is configured to be used for usage given
      *
-     * @param  string $usage
+     * @param string $usage
      * @return bool
      */
-    public function canBeUsedFor($usage)
+    public function canBeUsedFor(string $usage) : bool
     {
         if (!in_array($usage, static::getValidKeyUsages(), true)) {
             throw new InvalidKeyUsageException($usage);
@@ -53,7 +55,7 @@ public function canBeUsedFor($usage)
      * Returns the list of valid key usage options
      * @return array
      */
-    public static function getValidKeyUsages()
+    public static function getValidKeyUsages() : array
     {
         return [
             self::USAGE_ENCRYPTION,
@@ -66,8 +68,10 @@ public static function getValidKeyUsages()
      * @param mixed $offset
      * @throws InvalidArgumentException
      * @return bool
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function offsetExists($offset)
+    public function offsetExists($offset) : bool
     {
         if (!is_string($offset)) {
             throw InvalidArgumentException::invalidType('string', $offset);
@@ -79,7 +83,9 @@ public function offsetExists($offset)
     /**
      * @param mixed $offset
      * @throws InvalidArgumentException
-     * @return string
+     * @return mixed
+     *
+     * Type hint not possible due to upstream method signature
      */
     public function offsetGet($offset)
     {
@@ -96,7 +102,7 @@ public function offsetGet($offset)
      * @throws InvalidArgumentException
      * @return void
      */
-    public function offsetSet($offset, $value)
+    public function offsetSet($offset, $value) : void
     {
         if (!is_string($offset)) {
             throw InvalidArgumentException::invalidType('string', $offset);
@@ -109,8 +115,10 @@ public function offsetSet($offset, $value)
      * @param mixed $offset
      * @throws InvalidArgumentException
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function offsetUnset($offset)
+    public function offsetUnset($offset) : void
     {
         if (!is_string($offset)) {
             throw InvalidArgumentException::invalidType('string', $offset);
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyCollection.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyCollection.php
index 6df321de16..3b44cbce74 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyCollection.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyCollection.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate;
 
-use SAML2\Exception\InvalidArgumentException;
 use SAML2\Utilities\ArrayCollection;
 
+use Webmozart\Assert\Assert;
+
 /**
  * Simple collection object for transporting keys
  */
@@ -13,18 +16,16 @@ class KeyCollection extends ArrayCollection
     /**
      * Add a key to the collection
      *
+     * @psalm-suppress MoreSpecificImplementedParamType
      * @param \SAML2\Certificate\Key $key
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function add($key)
+    public function add($key) : void
     {
-        if (!($key instanceof Key)) {
-            throw InvalidArgumentException::invalidType(
-                'SAML2\Certificate\Key',
-                $key
-            );
-        }
-
+        /** @psalm-suppress RedundantConditionGivenDocblockType */
+        Assert::isInstanceOf($key, Key::class);
         parent::add($key);
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyLoader.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyLoader.php
index 742de2c46c..679c8b4df7 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyLoader.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/KeyLoader.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate;
 
 use SAML2\Certificate\Exception\InvalidCertificateStructureException;
 use SAML2\Certificate\Exception\NoKeysFoundException;
+use SAML2\Certificate\KeyCollection;
 use SAML2\Configuration\CertificateProvider;
 use SAML2\Exception\InvalidArgumentException;
 use SAML2\Utilities\Certificate;
@@ -40,9 +43,9 @@ public function __construct()
      */
     public static function extractPublicKeys(
         CertificateProvider $config,
-        $usage = null,
-        $required = false
-    ) {
+        string $usage = null,
+        bool $required = false
+    ) : KeyCollection {
         $keyLoader = new self();
 
         return $keyLoader->loadKeysFromConfiguration($config, $usage, $required);
@@ -51,15 +54,15 @@ public static function extractPublicKeys(
 
     /**
      * @param \SAML2\Configuration\CertificateProvider $config
-     * @param null|string                             $usage
-     * @param bool                                    $required
+     * @param null|string $usage
+     * @param bool $required
      * @return \SAML2\Certificate\KeyCollection
      */
     public function loadKeysFromConfiguration(
         CertificateProvider $config,
-        $usage = null,
-        $required = false
-    ) {
+        string $usage = null,
+        bool $required = false
+    ) : KeyCollection {
         $keys = $config->getKeys();
         $certificateData = $config->getCertificateData();
         $certificateFile = $config->getCertificateFile();
@@ -87,11 +90,11 @@ public function loadKeysFromConfiguration(
      * Loads the keys given, optionally excluding keys when a usage is given and they
      * are not configured to be used with the usage given
      *
-     * @param array $configuredKeys
-     * @param string $usage
+     * @param array|\Traversable $configuredKeys
+     * @param string|null $usage
      * @return void
      */
-    public function loadKeys(array $configuredKeys, $usage)
+    public function loadKeys($configuredKeys, string $usage = null) : void
     {
         foreach ($configuredKeys as $keyData) {
             if (isset($keyData['X509Certificate'])) {
@@ -115,12 +118,8 @@ public function loadKeys(array $configuredKeys, $usage)
      * @param string $certificateData
      * @return void
      */
-    public function loadCertificateData($certificateData)
+    public function loadCertificateData(string $certificateData) : void
     {
-        if (!is_string($certificateData)) {
-            throw InvalidArgumentException::invalidType('string', $certificateData);
-        }
-
         $this->loadedKeys->add(X509::createFromCertificateData($certificateData));
     }
 
@@ -131,7 +130,7 @@ public function loadCertificateData($certificateData)
      * @param string $certificateFile the full path to the cert file.
      * @return void
      */
-    public function loadCertificateFile($certificateFile)
+    public function loadCertificateFile(string $certificateFile) : void
     {
         $certificate = File::getFileContents($certificateFile);
 
@@ -151,7 +150,7 @@ public function loadCertificateFile($certificateFile)
     /**
      * @return \SAML2\Certificate\KeyCollection
      */
-    public function getKeys()
+    public function getKeys() : KeyCollection
     {
         return $this->loadedKeys;
     }
@@ -160,8 +159,8 @@ public function getKeys()
     /**
      * @return bool
      */
-    public function hasKeys()
+    public function hasKeys() : bool
     {
-        return !!count($this->loadedKeys);
+        return count($this->loadedKeys) && true;
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKey.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKey.php
index c6c0e9ce8a..3b7f56289c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKey.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKey.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate;
 
 use SAML2\Exception\InvalidArgumentException;
@@ -12,16 +14,8 @@ class PrivateKey extends Key
      * @throws InvalidArgumentException
      * @return PrivateKey
      */
-    public static function create($keyContents, $passphrase = null)
+    public static function create(string $keyContents, string $passphrase = null) : PrivateKey
     {
-        if (!is_string($keyContents)) {
-            throw InvalidArgumentException::invalidType('string', $keyContents);
-        }
-
-        if ($passphrase && !is_string($passphrase)) {
-            throw InvalidArgumentException::invalidType('string', $passphrase);
-        }
-
         $keyData = ['PEM' => $keyContents, self::USAGE_ENCRYPTION => true];
         if ($passphrase) {
             $keyData['passphrase'] = $passphrase;
@@ -34,7 +28,7 @@ public static function create($keyContents, $passphrase = null)
     /**
      * @return string
      */
-    public function getKeyAsString()
+    public function getKeyAsString() : string
     {
         return $this->keyData['PEM'];
     }
@@ -43,7 +37,7 @@ public function getKeyAsString()
     /**
      * @return string|null
      */
-    public function getPassphrase()
+    public function getPassphrase() : ?string
     {
         return isset($this->keyData['passphrase']) ? $this->keyData['passphrase'] : null;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKeyLoader.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKeyLoader.php
index c86f244fac..5b7dd8ca23 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKeyLoader.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/PrivateKeyLoader.php
@@ -1,8 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate;
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+
+use SAML2\Certificate\PrivateKey;
 use SAML2\Configuration\DecryptionProvider;
 use SAML2\Configuration\PrivateKey as PrivateKeyConfiguration;
 use SAML2\Utilities\ArrayCollection;
@@ -16,7 +20,7 @@ class PrivateKeyLoader
      * @param \SAML2\Configuration\PrivateKey $key
      * @return \SAML2\Certificate\PrivateKey
      */
-    public function loadPrivateKey(PrivateKeyConfiguration $key)
+    public function loadPrivateKey(PrivateKeyConfiguration $key) : PrivateKey
     {
         if ($key->isFile()) {
             $privateKey = File::getFileContents($key->getFilePath());
@@ -37,7 +41,7 @@ public function loadPrivateKey(PrivateKeyConfiguration $key)
     public function loadDecryptionKeys(
         DecryptionProvider $identityProvider,
         DecryptionProvider $serviceProvider
-    ) {
+    ) : ArrayCollection {
         $decryptionKeys = new ArrayCollection();
 
         $senderSharedKey = $identityProvider->getSharedKey();
@@ -66,9 +70,9 @@ public function loadDecryptionKeys(
     /**
      * @param \SAML2\Certificate\PrivateKey $privateKey
      * @throws \Exception
-     * @return XMLSecurityKey
+     * @return \RobRichards\XMLSecLibs\XMLSecurityKey
      */
-    private function convertPrivateKeyToRsaKey(PrivateKey $privateKey)
+    private function convertPrivateKeyToRsaKey(PrivateKey $privateKey) : XMLSecurityKey
     {
         $key = new XMLSecurityKey(XMLSecurityKey::RSA_1_5, ['type' => 'private']);
         $passphrase = $privateKey->getPassphrase();
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/X509.php b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/X509.php
index 59cf10dea0..0a43c294af 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Certificate/X509.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Certificate/X509.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Certificate;
 
 /**
@@ -7,17 +9,7 @@
  */
 class X509 extends Key
 {
-    /**
-     * @var \SAML2\Certificate\Fingerprint
-     */
-    private $fingerprint;
-
-
-    /**
-     * @param string $certificateContents
-     * @return X509
-     */
-    public static function createFromCertificateData($certificateContents)
+    public static function createFromCertificateData(string $certificateContents) : X509
     {
         $data = [
             'encryption'      => true,
@@ -32,11 +24,14 @@ public static function createFromCertificateData($certificateContents)
 
     /**
      * {@inheritdoc} Best place to ensure the logic is encapsulated in a single place
+     *
      * @param mixed $offset
      * @param mixed $value
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function offsetSet($offset, $value)
+    public function offsetSet($offset, $value) : void
     {
         if ($offset === 'X509Certificate') {
             $value = preg_replace('~\s+~', '', $value);
@@ -51,27 +46,10 @@ public function offsetSet($offset, $value)
      *
      * @return string
      */
-    public function getCertificate()
+    public function getCertificate() : string
     {
         return "-----BEGIN CERTIFICATE-----\n"
                 . chunk_split($this->keyData['X509Certificate'], 64)
                 . "-----END CERTIFICATE-----\n";
     }
-
-
-    /**
-     * @return \SAML2\Certificate\Fingerprint
-     *
-     * @deprecated Please use full certificates instead.
-     */
-    public function getFingerprint()
-    {
-        if (isset($this->fingerprint)) {
-            return $this->fingerprint;
-        }
-
-        $fingerprint = strtolower(sha1(base64_decode($this->keyData['X509Certificate'])));
-
-        return $this->fingerprint = new Fingerprint($fingerprint);
-    }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Compat/AbstractContainer.php b/vendor/simplesamlphp/saml2/src/SAML2/Compat/AbstractContainer.php
index f77df62cf1..e6b0ac98b0 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Compat/AbstractContainer.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Compat/AbstractContainer.php
@@ -1,21 +1,25 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Compat;
 
+use \Psr\Log\LoggerInterface;
+
 abstract class AbstractContainer
 {
     /**
      * Get a PSR-3 compatible logger.
      * @return \Psr\Log\LoggerInterface
      */
-    abstract public function getLogger();
+    abstract public function getLogger() : LoggerInterface;
 
 
     /**
      * Generate a random identifier for identifying SAML2 documents.
      * @return string
      */
-    abstract public function generateId();
+    abstract public function generateId() : string;
 
 
     /**
@@ -27,11 +31,12 @@ abstract public function generateId();
      * - **encrypt** XML that is about to be encrypted
      * - **decrypt** XML that was just decrypted
      *
-     * @param string|\DOMNode $message
+     * @param \DOMElement|string $message
      * @param string $type
      * @return void
      */
-    abstract public function debugMessage($message, $type);
+    abstract public function debugMessage($message, string $type) : void;
+
 
 
     /**
@@ -41,7 +46,7 @@ abstract public function debugMessage($message, $type);
      * @param array $data
      * @return void
      */
-    abstract public function redirect($url, $data = []);
+    abstract public function redirect(string $url, array $data = []) : void;
 
 
     /**
@@ -51,5 +56,29 @@ abstract public function redirect($url, $data = []);
      * @param array $data
      * @return void
      */
-    abstract public function postRedirect($url, $data = []);
+    abstract public function postRedirect(string $url, array $data = []) : void;
+
+
+    /**
+     * This function retrieves the path to a directory where temporary files can be saved.
+     *
+     * @throws \Exception If the temporary directory cannot be created or it exists and does not belong
+     * to the current user.
+     * @return string Path to a temporary directory, without a trailing directory separator.
+     */
+    abstract public function getTempDir() : string;
+
+
+    /**
+     * Atomically write a file.
+     *
+     * This is a helper function for writing data atomically to a file. It does this by writing the file data to a
+     * temporary file, then renaming it to the required file name.
+     *
+     * @param string $filename The path to the file we want to write to.
+     * @param string $data The data we should write to the file.
+     * @param int $mode The permissions to apply to the file. Defaults to 0600.
+     * @return void
+     */
+    abstract public function writeFile(string $filename, string $data, int $mode = null) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Compat/ContainerSingleton.php b/vendor/simplesamlphp/saml2/src/SAML2/Compat/ContainerSingleton.php
index 806fc6585b..c9094aa41a 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Compat/ContainerSingleton.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Compat/ContainerSingleton.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Compat;
 
 use SAML2\Compat\Ssp\Container;
@@ -15,10 +17,10 @@ class ContainerSingleton
     /**
      * @return \SAML2\Compat\AbstractContainer
      */
-    public static function getInstance()
+    public static function getInstance() : AbstractContainer
     {
         if (!isset(self::$container)) {
-            self::setContainer(self::initSspContainer());
+            self::$container = self::initSspContainer();
         }
         return self::$container;
     }
@@ -28,19 +30,18 @@ public static function getInstance()
      * Set a container to use.
      *
      * @param \SAML2\Compat\AbstractContainer $container
-     * @return \SAML2\Compat\AbstractContainer
+     * @return void
      */
-    public static function setContainer(AbstractContainer $container)
+    public static function setContainer(AbstractContainer $container) : void
     {
         self::$container = $container;
-        return $container;
     }
 
 
     /**
      * @return \SAML2\Compat\Ssp\Container
      */
-    public static function initSspContainer()
+    public static function initSspContainer() : Container
     {
         return new Container();
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Compat/MockContainer.php b/vendor/simplesamlphp/saml2/src/SAML2/Compat/MockContainer.php
index 649dcadca8..bc71076d3c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Compat/MockContainer.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Compat/MockContainer.php
@@ -1,7 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Compat;
 
+use \Psr\Log\LoggerInterface;
+use \Psr\Log\NullLogger;
+
 /**
  * Class \SAML2\Compat\MockContainer
  */
@@ -25,12 +30,12 @@ class MockContainer extends AbstractContainer
     /**
      * @var array
      */
-    private $redirectData;
+    private $redirectData = [];
 
     /**
-     * @var string
+     * @var string|null
      */
-    private $postRedirectUrl;
+    private $postRedirectUrl = null;
 
     /**
      * @var array
@@ -42,9 +47,9 @@ class MockContainer extends AbstractContainer
      * Get a PSR-3 compatible logger.
      * @return \Psr\Log\LoggerInterface
      */
-    public function getLogger()
+    public function getLogger() : LoggerInterface
     {
-        return new \Psr\Log\NullLogger();
+        return new NullLogger();
     }
 
 
@@ -52,7 +57,7 @@ public function getLogger()
      * Generate a random identifier for identifying SAML2 documents.
      * @return string
      */
-    public function generateId()
+    public function generateId() : string
     {
         return $this->id;
     }
@@ -67,11 +72,11 @@ public function generateId()
      * - **encrypt** XML that is about to be encrypted
      * - **decrypt** XML that was just decrypted
      *
-     * @param string $message
+     * @param \DOMElement|string $message
      * @param string $type
      * @return void
      */
-    public function debugMessage($message, $type)
+    public function debugMessage($message, string $type) : void
     {
         $this->debugMessages[$type] = $message;
     }
@@ -84,7 +89,7 @@ public function debugMessage($message, $type)
      * @param array $data
      * @return void
      */
-    public function redirect($url, $data = [])
+    public function redirect(string $url, array $data = []) : void
     {
         $this->redirectUrl = $url;
         $this->redirectData = $data;
@@ -94,13 +99,38 @@ public function redirect($url, $data = [])
     /**
      * Trigger the user to perform a POST to the given URL with the given data.
      *
-     * @param string $url
+     * @param string|null $url
      * @param array $data
      * @return void
      */
-    public function postRedirect($url, $data = [])
+    public function postRedirect(string $url = null, array $data = []) : void
     {
         $this->postRedirectUrl = $url;
         $this->postRedirectData = $data;
     }
+
+
+    /**
+     * @return string
+     */
+    public function getTempDir() : string
+    {
+        return sys_get_temp_dir();
+    }
+
+
+    /**
+     * @param string $filename
+     * @param string $data
+     * @param int|null $mode
+     * @return void
+     */
+    public function writeFile(string $filename, string $data, int $mode = null) : void
+    {
+        if ($mode === null) {
+            $mode = 0600;
+        }
+        file_put_contents($filename, $data);
+        chmod($filename, $mode);
+    }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Container.php b/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Container.php
index efc0f40125..8659b35498 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Container.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Container.php
@@ -1,7 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Compat\Ssp;
 
+use Psr\Log\LoggerInterface;
+use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Utils\Random;
+use SimpleSAML\Utils\System;
+use SimpleSAML\Utils\XML;
+
 use SAML2\Compat\AbstractContainer;
 
 class Container extends AbstractContainer
@@ -25,7 +33,7 @@ public function __construct()
      * {@inheritdoc}
      * @return \Psr\Log\LoggerInterface
      */
-    public function getLogger()
+    public function getLogger() : LoggerInterface
     {
         return $this->logger;
     }
@@ -35,19 +43,23 @@ public function getLogger()
      * {@inheritdoc}
      * @return string
      */
-    public function generateId()
+    public function generateId() : string
     {
-        return \SimpleSAML\Utils\Random::generateID();
+        /** @psalm-suppress UndefinedClass */
+        return Random::generateID();
     }
 
 
     /**
      * {@inheritdoc}
+     * @param mixed $message
+     * @param string $type
      * @return void
      */
-    public function debugMessage($message, $type)
+    public function debugMessage($message, string $type) : void
     {
-        \SimpleSAML\Utils\XML::debugSAMLMessage($message, $type);
+        /** @psalm-suppress UndefinedClass */
+        XML::debugSAMLMessage($message, $type);
     }
 
 
@@ -57,9 +69,10 @@ public function debugMessage($message, $type)
      * @param array $data
      * @return void
      */
-    public function redirect($url, $data = [])
+    public function redirect(string $url, array $data = []) : void
     {
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, $data);
+        /** @psalm-suppress UndefinedClass */
+        HTTP::redirectTrustedURL($url, $data);
     }
 
 
@@ -69,8 +82,37 @@ public function redirect($url, $data = [])
      * @param array $data
      * @return void
      */
-    public function postRedirect($url, $data = [])
+    public function postRedirect(string $url, array $data = []) : void
+    {
+        /** @psalm-suppress UndefinedClass */
+        HTTP::submitPOSTData($url, $data);
+    }
+
+
+    /**
+     * {@inheritdoc}
+     * @return string
+     */
+    public function getTempDir() : string
+    {
+        /** @psalm-suppress UndefinedClass */
+        return System::getTempDir();
+    }
+
+
+    /**
+     * {@inheritdoc}
+     * @param string $filename
+     * @param string $date
+     * @param int|null $mode
+     * @return void
+     */
+    public function writeFile(string $filename, string $data, int $mode = null) : void
     {
-        \SimpleSAML\Utils\HTTP::submitPOSTData($url, $data);
+        if ($mode === null) {
+            $mode = 0600;
+        }
+        /** @psalm-suppress UndefinedClass */
+        System::writeFile($filename, $data, $mode);
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Logger.php b/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Logger.php
index 5d112ad0a2..b318d86aad 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Logger.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Compat/Ssp/Logger.php
@@ -1,9 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Compat\Ssp;
 
+use Psr\Log\InvalidArgumentException;
 use Psr\Log\LoggerInterface;
 use Psr\Log\LogLevel;
+use SimpleSAML\Logger as SspLogger;
+use Webmozart\Assert\Assert;
 
 class Logger implements LoggerInterface
 {
@@ -13,10 +18,13 @@ class Logger implements LoggerInterface
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function emergency($message, array $context = [])
+    public function emergency($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::emergency($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::emergency($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -29,10 +37,13 @@ public function emergency($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function alert($message, array $context = [])
+    public function alert($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::alert($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::alert($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -44,10 +55,13 @@ public function alert($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function critical($message, array $context = [])
+    public function critical($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::critical($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::critical($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -58,10 +72,13 @@ public function critical($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function error($message, array $context = [])
+    public function error($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::error($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::error($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -74,10 +91,13 @@ public function error($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function warning($message, array $context = [])
+    public function warning($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::warning($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::warning($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -87,10 +107,13 @@ public function warning($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function notice($message, array $context = [])
+    public function notice($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::notice($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::notice($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -102,10 +125,13 @@ public function notice($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function info($message, array $context = [])
+    public function info($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::info($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::info($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -115,10 +141,13 @@ public function info($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function debug($message, array $context = [])
+    public function debug($message, array $context = []) : void
     {
-        \SimpleSAML\Logger::debug($message.($context ? " ".var_export($context, true) : ""));
+        /** @psalm-suppress UndefinedClass */
+        SspLogger::debug($message.($context ? " ".var_export($context, true) : ""));
     }
 
 
@@ -129,13 +158,18 @@ public function debug($message, array $context = [])
      * @param string $message
      * @param array $context
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function log($level, $message, array $context = [])
+    public function log($level, $message, array $context = []) : void
     {
+        /** @psalm-suppress RedundantConditionGivenDocblockType */
+        Assert::string($message);
+
         switch ($level) {
             /* From PSR:  Calling this method with one of the log level constants
-            MUST have the same result as calling the level-specific method
-            */
+             * MUST have the same result as calling the level-specific method
+             */
             case LogLevel::ALERT:
                 $this->alert($message, $context);
                 break;
@@ -161,7 +195,7 @@ public function log($level, $message, array $context = [])
                 $this->warning($message, $context);
                 break;
             default:
-                throw new \Psr\Log\InvalidArgumentException("Unrecognized log level '$level''");
+                throw new InvalidArgumentException("Unrecognized log level '$level''");
         }
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ArrayAdapter.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ArrayAdapter.php
index ef79306c5a..493eb10b34 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ArrayAdapter.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ArrayAdapter.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
@@ -23,11 +25,11 @@ public function __construct(array $configuration)
 
 
     /**
-     * @param mixed $key
+     * @param string $key
      * @param mixed|null $defaultValue
      * @return mixed
      */
-    public function get($key, $defaultValue = null)
+    public function get(string $key, $defaultValue = null)
     {
         if (!$this->has($key)) {
             return $defaultValue;
@@ -38,9 +40,10 @@ public function get($key, $defaultValue = null)
 
 
     /**
-     * @param mixed $key
+     * @param string $key
+     * @return bool
      */
-    public function has($key)
+    public function has(string $key) : bool
     {
         return array_key_exists($key, $this->configuration);
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/CertificateProvider.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/CertificateProvider.php
index c436858c23..47d64cec38 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/CertificateProvider.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/CertificateProvider.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
@@ -23,7 +25,7 @@ public function getKeys();
      *
      * @return null|string
      */
-    public function getCertificateData();
+    public function getCertificateData() : ?string;
 
 
     /**
@@ -31,16 +33,5 @@ public function getCertificateData();
      *
      * @return null|string
      */
-    public function getCertificateFile();
-
-
-    /**
-     * Returns an array or \Traversable where each element represents a certificate fingerprint. A certificate
-     * fingerprint is a string containing the certificate fingerprint.
-     *
-     * @return null|array|\Traversable
-     *
-     * @deprecated Please use getCertifiateFile() or getCertificateData()
-     */
-    public function getCertificateFingerprints();
+    public function getCertificateFile() : ?string;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/DecryptionProvider.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/DecryptionProvider.php
index 57d4d3a9a1..408fd01ee8 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/DecryptionProvider.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/DecryptionProvider.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 interface DecryptionProvider
@@ -7,26 +9,27 @@ interface DecryptionProvider
     /**
      * @return null|bool
      */
-    public function isAssertionEncryptionRequired();
+    public function isAssertionEncryptionRequired() : ?bool;
 
 
     /**
      * @return null|string
      */
-    public function getSharedKey();
+    public function getSharedKey() : ?string;
 
 
     /**
-     * @param string  $name     the name of the private key
-     * @param boolean $required whether or not the private key must exist
+     * @param string $name The name of the private key
+     * @param bool $required Whether or not the private key must exist
      *
      * @return mixed
      */
-    public function getPrivateKey($name, $required = false);
+    public function getPrivateKey(string $name, bool $required = null);
+
 
 
     /**
-     * @return array
+     * @return array|null
      */
-    public function getBlacklistedAlgorithms();
+    public function getBlacklistedAlgorithms() : ?array;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Destination.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Destination.php
index 71e6e8aa82..67ebbe9199 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Destination.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Destination.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 use SAML2\Exception\InvalidArgumentException;
@@ -18,12 +20,8 @@ class Destination
     /**
      * @param string $destination
      */
-    public function __construct($destination)
+    public function __construct(string $destination)
     {
-        if (!is_string($destination)) {
-            throw InvalidArgumentException::invalidType('string', $destination);
-        }
-
         $this->destination = $destination;
     }
 
@@ -33,7 +31,7 @@ public function __construct($destination)
      *
      * @return bool
      */
-    public function equals(Destination $otherDestination)
+    public function equals(Destination $otherDestination) : bool
     {
         return $this->destination === $otherDestination->destination;
     }
@@ -42,7 +40,7 @@ public function equals(Destination $otherDestination)
     /**
      * @return string
      */
-    public function __toString()
+    public function __toString() : string
     {
         return $this->destination;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/EntityIdProvider.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/EntityIdProvider.php
index 5457e8b3c5..9a79890dea 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/EntityIdProvider.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/EntityIdProvider.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
@@ -10,5 +12,5 @@ interface EntityIdProvider
     /**
      * @return null|string
      */
-    public function getEntityId();
+    public function getEntityId() : ?string;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProvider.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProvider.php
index 0f6acb2d46..a418dd8b6b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProvider.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProvider.php
@@ -1,17 +1,16 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
  * Basic configuration wrapper
  */
-class IdentityProvider extends ArrayAdapter implements
-    CertificateProvider,
-    DecryptionProvider,
-    EntityIdProvider
+final class IdentityProvider extends ArrayAdapter implements CertificateProvider, DecryptionProvider, EntityIdProvider
 {
     /**
-     * @return mixed
+     * @return array|\Traversable|null
      */
     public function getKeys()
     {
@@ -20,26 +19,25 @@ public function getKeys()
 
 
     /**
-     * @return mixed
+     * @return string|null
      */
-    public function getCertificateData()
+    public function getCertificateData() : ?string
     {
         return $this->get('certificateData');
     }
 
 
     /**
-     * @return mixed
+     * @return string|null
      */
-    public function getCertificateFile()
+    public function getCertificateFile() : ?string
     {
         return $this->get('certificateFile');
     }
 
 
     /**
-     * @return mixed
-     * @deprecated Please use getCertifiateFile() or getCertificateData()
+     * @return array|mixed|\Traversable|null
      */
     public function getCertificateFingerprints()
     {
@@ -48,25 +46,25 @@ public function getCertificateFingerprints()
 
 
     /**
-     * @return mixed
+     * @return bool|null
      */
-    public function isAssertionEncryptionRequired()
+    public function isAssertionEncryptionRequired() : ?bool
     {
         return $this->get('assertionEncryptionEnabled');
     }
 
 
     /**
-     * @return mixed
+     * @return string|null
      */
-    public function getSharedKey()
+    public function getSharedKey() : ?string
     {
         return $this->get('sharedKey');
     }
 
 
     /**
-     * @return mixed
+     * @return mixed|null
      */
     public function hasBase64EncodedAttributes()
     {
@@ -79,8 +77,11 @@ public function hasBase64EncodedAttributes()
      * @param bool $required
      * @return mixed|null
      */
-    public function getPrivateKey($name, $required = false)
+    public function getPrivateKey(string $name, bool $required = null)
     {
+        if ($required === null) {
+            $required = false;
+        }
         $privateKeys = $this->get('privateKeys');
         $key = array_filter($privateKeys, function (PrivateKey $key) use ($name) {
             return $key->getName() === $name;
@@ -105,18 +106,18 @@ public function getPrivateKey($name, $required = false)
 
 
     /**
-     * @return mixed
+     * @return array|null
      */
-    public function getBlacklistedAlgorithms()
+    public function getBlacklistedAlgorithms() : ?array
     {
         return $this->get('blacklistedEncryptionAlgorithms');
     }
 
 
     /**
-     * @return mixed
+     * @return string|null
      */
-    public function getEntityId()
+    public function getEntityId() : ?string
     {
         return $this->get('entityId');
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProviderAware.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProviderAware.php
index b02a5847ac..72c74e8961 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProviderAware.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/IdentityProviderAware.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
@@ -9,7 +11,8 @@ interface IdentityProviderAware
 {
     /**
      * @param IdentityProvider $identityProvider
+     *
      * @return void
      */
-    public function setIdentityProvider(IdentityProvider $identityProvider);
+    public function setIdentityProvider(IdentityProvider $identityProvider) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/PrivateKey.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/PrivateKey.php
index 605307bbb5..5ab00be500 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/PrivateKey.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/PrivateKey.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 use SAML2\Exception\InvalidArgumentException;
@@ -19,7 +21,7 @@ class PrivateKey extends ArrayAdapter
     private $filePathOrContents;
 
     /**
-     * @var string
+     * @var string|null
      */
     private $passphrase;
 
@@ -38,24 +40,11 @@ class PrivateKey extends ArrayAdapter
      *
      * @param string $filePathOrContents
      * @param string $name
-     * @param string|null $passphrase
+     * @param string $passphrase
      * @param bool $isFile
-     * @throws \Exception
      */
-    public function __construct($filePathOrContents, $name, $passphrase = null, $isFile = true)
+    public function __construct(string $filePathOrContents, string $name, string $passphrase = '', bool $isFile = true)
     {
-        if (!is_string($filePathOrContents)) {
-            throw InvalidArgumentException::invalidType('string', $filePathOrContents);
-        }
-
-        if (!is_string($name)) {
-            throw InvalidArgumentException::invalidType('string', $name);
-        }
-
-        if ($passphrase && !is_string($passphrase)) {
-            throw InvalidArgumentException::invalidType('string', $passphrase);
-        }
-
         $this->filePathOrContents = $filePathOrContents;
         $this->passphrase = $passphrase;
         $this->name = $name;
@@ -66,7 +55,7 @@ public function __construct($filePathOrContents, $name, $passphrase = null, $isF
     /**
      * @return string
      */
-    public function getFilePath()
+    public function getFilePath() : string
     {
         if (!$this->isFile()) {
             throw new RuntimeException('No path provided.');
@@ -79,16 +68,16 @@ public function getFilePath()
     /**
      * @return bool
      */
-    public function hasPassPhrase()
+    public function hasPassPhrase() : bool
     {
-        return (bool) $this->passphrase;
+        return $this->passphrase !== null;
     }
 
 
     /**
-     * @return string
+     * @return string|null
      */
-    public function getPassPhrase()
+    public function getPassPhrase() : ?string
     {
         return $this->passphrase;
     }
@@ -97,7 +86,7 @@ public function getPassPhrase()
     /**
      * @return string
      */
-    public function getName()
+    public function getName() : string
     {
         return $this->name;
     }
@@ -105,7 +94,7 @@ public function getName()
     /**
      * @return string
      */
-    public function getContents()
+    public function getContents() : string
     {
         if ($this->isFile()) {
             throw new RuntimeException('No contents provided');
@@ -117,7 +106,7 @@ public function getContents()
     /**
      * @return bool
      */
-    public function isFile()
+    public function isFile() : bool
     {
         return $this->isFile;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Queryable.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Queryable.php
index 8a16281138..26d97fea45 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Queryable.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/Queryable.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
@@ -13,7 +15,7 @@ interface Queryable
      * @param string $key
      * @return bool
      */
-    public function has($key);
+    public function has(string $key) : bool;
 
 
     /**
@@ -25,5 +27,5 @@ public function has($key);
      *
      * @return mixed
      */
-    public function get($key, $default = null);
+    public function get(string $key, $default = null);
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProvider.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProvider.php
index c70be74d47..72c40a3cb9 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProvider.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProvider.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
@@ -7,13 +9,10 @@
 /**
  * Basic Configuration Wrapper
  */
-class ServiceProvider extends ArrayAdapter implements
-    CertificateProvider,
-    DecryptionProvider,
-    EntityIdProvider
+class ServiceProvider extends ArrayAdapter implements CertificateProvider, DecryptionProvider, EntityIdProvider
 {
     /**
-     * @return mixed
+     * @return null|array|\Traversable
      */
     public function getKeys()
     {
@@ -22,26 +21,25 @@ public function getKeys()
 
 
     /**
-     * @return mixed
+     * @return null|string
      */
-    public function getCertificateData()
+    public function getCertificateData() : ?string
     {
         return $this->get('certificateData');
     }
 
 
     /**
-     * @return mixed
+     * @return null|string
      */
-    public function getCertificateFile()
+    public function getCertificateFile() : ?string
     {
         return $this->get('certificateFile');
     }
 
 
     /**
-     * @return mixed
-     * @deprecated Please use getCertificateData() or getCertificateFile().
+     * @return array|\Traversable|null
      */
     public function getCertificateFingerprints()
     {
@@ -50,27 +48,27 @@ public function getCertificateFingerprints()
 
 
     /**
-     * @return mixed
+     * @return string|null
      */
-    public function getEntityId()
+    public function getEntityId() : ?string
     {
         return $this->get('entityId');
     }
 
 
     /**
-     * @return mixed
+     * @return null|bool
      */
-    public function isAssertionEncryptionRequired()
+    public function isAssertionEncryptionRequired() : ?bool
     {
         return $this->get('assertionEncryptionEnabled');
     }
 
 
     /**
-     * @return mixed
+     * @return null|string
      */
-    public function getSharedKey()
+    public function getSharedKey() : ?string
     {
         return $this->get('sharedKey');
     }
@@ -81,10 +79,13 @@ public function getSharedKey()
      * @param bool $required
      * @return mixed|null
      */
-    public function getPrivateKey($name, $required = false)
+    public function getPrivateKey(string $name, bool $required = null)
     {
+        if ($required === null) {
+            $required = false;
+        }
         $privateKeys = $this->get('privateKeys');
-        $key         = array_filter($privateKeys, function (PrivateKey $key) use ($name) {
+        $key = array_filter($privateKeys, function (PrivateKey $key) use ($name) {
             return $key->getName() === $name;
         });
 
@@ -107,9 +108,9 @@ public function getPrivateKey($name, $required = false)
 
 
     /**
-     * @return mixed
+     * @return array
      */
-    public function getBlacklistedAlgorithms()
+    public function getBlacklistedAlgorithms() : array
     {
         return $this->get('blacklistedEncryptionAlgorithms', [XMLSecurityKey::RSA_1_5]);
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProviderAware.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProviderAware.php
index db453fa4f1..f569bd23ee 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProviderAware.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/ServiceProviderAware.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
 /**
@@ -11,5 +13,5 @@ interface ServiceProviderAware
      * @param ServiceProvider $serviceProvider
      * @return void
      */
-    public function setServiceProvider(ServiceProvider $serviceProvider);
+    public function setServiceProvider(ServiceProvider $serviceProvider) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/SimpleSAMLConverter.php b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/SimpleSAMLConverter.php
index 1c2bfb872f..1470ea9dfb 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Configuration/SimpleSAMLConverter.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Configuration/SimpleSAMLConverter.php
@@ -1,8 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Configuration;
 
-use \SimpleSAML\Configuration;
+use SimpleSAML\Configuration;
 
 /**
  * Backwards compatibility helper for SimpleSAMLphp
@@ -14,11 +16,13 @@ class SimpleSAMLConverter
      * @param string                    $certificatePrefix
      *
      * @return \SAML2\Configuration\IdentityProvider
+     *
+     * @psalm-suppress UndefinedClass
      */
     public static function convertToIdentityProvider(
         Configuration $configuration,
-        $certificatePrefix = ''
-    ) {
+        string $certificatePrefix = ''
+    ) : IdentityProvider {
         $pluckedConfiguration = static::pluckConfiguration($configuration, $certificatePrefix);
         static::enrichForDecryptionProvider($configuration, $pluckedConfiguration);
         static::enrichForIdentityProvider($configuration, $pluckedConfiguration);
@@ -32,11 +36,13 @@ public static function convertToIdentityProvider(
      * @param string                    $certificatePrefix
      *
      * @return \SAML2\Configuration\ServiceProvider
+     *
+     * @psalm-suppress UndefinedClass
      */
     public static function convertToServiceProvider(
         Configuration $configuration,
-        $certificatePrefix = ''
-    ) {
+        string $certificatePrefix = ''
+    ) : ServiceProvider {
         $pluckedConfiguration = static::pluckConfiguration($configuration, $certificatePrefix);
         static::enrichForServiceProvider($configuration, $pluckedConfiguration);
         static::enrichForDecryptionProvider($configuration, $pluckedConfiguration);
@@ -50,8 +56,10 @@ public static function convertToServiceProvider(
      * @param string                    $prefix
      *
      * @return array
+     *
+     * @psalm-suppress UndefinedClass
      */
-    protected static function pluckConfiguration(Configuration $configuration, $prefix = '')
+    protected static function pluckConfiguration(Configuration $configuration, string $prefix = '') : array
     {
         $extracted = [];
 
@@ -73,15 +81,9 @@ protected static function pluckConfiguration(Configuration $configuration, $pref
             $extracted['certificateData'] = $configuration->getString($prefix.'certificate');
         }
 
-        // ported from
-        // https://github.com/simplesamlphp/simplesamlphp/blob/3d735912342767d391297cc5e13272a76730aca0/modules/saml/lib/Message.php#L161
-        if ($configuration->hasValue($prefix.'certFingerprint')) {
-            $extracted['certificateFingerprint'] = $configuration->getArrayizeString('certFingerprint');
-        }
-
         $extracted['assertionEncryptionEnabled'] = $configuration->getBoolean('assertion.encryption', false);
 
-        if ($configuration->has('sharedKey')) {
+        if ($configuration->hasValue('sharedKey')) {
             $extracted['sharedKey'] = $configuration->getString('sharedKey');
         }
 
@@ -94,8 +96,10 @@ protected static function pluckConfiguration(Configuration $configuration, $pref
      * @param array                     $baseConfiguration
      *
      * @return void
+     *
+     * @psalm-suppress UndefinedClass
      */
-    protected static function enrichForIdentityProvider(Configuration $configuration, array &$baseConfiguration)
+    protected static function enrichForIdentityProvider(Configuration $configuration, array &$baseConfiguration) : void
     {
         $baseConfiguration['base64EncodedAttributes'] = $configuration->getBoolean('base64attributes', false);
         $baseConfiguration['entityId'] = $configuration->getString('entityid');
@@ -107,8 +111,10 @@ protected static function enrichForIdentityProvider(Configuration $configuration
      * @param array                     $baseConfiguration
      *
      * @return void
+     *
+     * @psalm-suppress UndefinedClass
      */
-    protected static function enrichForServiceProvider(Configuration $configuration, array &$baseConfiguration)
+    protected static function enrichForServiceProvider(Configuration $configuration, array &$baseConfiguration) : void
     {
         $baseConfiguration['entityId'] = $configuration->getString('entityid');
     }
@@ -119,16 +125,18 @@ protected static function enrichForServiceProvider(Configuration $configuration,
      * @param array                     $baseConfiguration
      *
      * @return void
+     *
+     * @psalm-suppress UndefinedClass
      */
     protected static function enrichForDecryptionProvider(
         Configuration $configuration,
         array &$baseConfiguration
-    ) {
-        if ($configuration->has('sharedKey')) {
+    ) : void {
+        if ($configuration->hasValue('sharedKey')) {
             $baseConfiguration['sharedKey'] = $configuration->getString('sharedKey', null);
         }
 
-        if ($configuration->has('new_privatekey')) {
+        if ($configuration->hasValue('new_privatekey')) {
             $baseConfiguration['privateKeys'][] = new PrivateKey(
                 $configuration->getString('new_privatekey'),
                 PrivateKey::NAME_NEW,
@@ -143,9 +151,9 @@ protected static function enrichForDecryptionProvider(
                 $configuration->getString('privatekey_pass', null)
             );
 
-            if ($configuration->has('encryption.blacklisted-algorithms')) {
+            if ($configuration->hasValue('encryption.blacklisted-algorithms')) {
                 $baseConfiguration['blacklistedEncryptionAlgorithms'] = $configuration
-                    ->get('encryption.blacklisted-algorithms');
+                    ->getValue('encryption.blacklisted-algorithms');
             }
         }
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Constants.php b/vendor/simplesamlphp/saml2/src/SAML2/Constants.php
index 35c5193775..a7f66e2655 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Constants.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Constants.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 /**
@@ -24,6 +26,16 @@ class Constants
      */
     const AC_UNSPECIFIED = 'urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified';
 
+    /**
+     * Subject identifier attribute
+     */
+    const ATTR_SUBJECT_ID = 'urn:oasis:names:tc:SAML:attribute:subject-id';
+
+    /**
+     * Pairwise identifier attribute
+     */
+    const ATTR_PAIRWISE_ID = 'urn:oasis:names:tc:SAML:attribute:pairwise-id';
+
     /**
      * The URN for the HTTP-POST binding.
      */
@@ -420,9 +432,4 @@ class Constants
      * Second-level status code.
      */
     const STATUS_UNSUPPORTED_BINDING = 'urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding';
-
-    /**
-     * The name of the EntityAttribute used to indicate the subject-id needs of a Service Provider.
-     */
-    const SUBJECT_ID_REQ = 'urn:oasis:names:tc:SAML:profiles:subject-id:req';
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/DOMDocumentFactory.php b/vendor/simplesamlphp/saml2/src/SAML2/DOMDocumentFactory.php
index 4c5d9ac4ca..9db9c62e1d 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/DOMDocumentFactory.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/DOMDocumentFactory.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMDocument;
+
 use SAML2\Exception\InvalidArgumentException;
 use SAML2\Exception\RuntimeException;
 use SAML2\Exception\UnparseableXmlException;
@@ -22,13 +26,13 @@ private function __construct()
      *
      * @return \DOMDocument
      */
-    public static function fromString($xml)
+    public static function fromString(string $xml) : DOMDocument
     {
-        if (!is_string($xml) || trim($xml) === '') {
+        if (trim($xml) === '') {
             throw InvalidArgumentException::invalidType('non-empty string', $xml);
         }
 
-        $entityLoader   = libxml_disable_entity_loader(true);
+        $entityLoader = libxml_disable_entity_loader(true);
         $internalErrors = libxml_use_internal_errors(true);
         libxml_clear_errors();
 
@@ -65,16 +69,12 @@ public static function fromString($xml)
 
 
     /**
-     * @param $file
+     * @param string $file
      *
      * @return \DOMDocument
      */
-    public static function fromFile($file)
+    public static function fromFile(string $file) : DOMDocument
     {
-        if (!is_string($file)) {
-            throw InvalidArgumentException::invalidType('string', $file);
-        }
-
         if (!is_file($file)) {
             throw new InvalidArgumentException(sprintf('Path "%s" is not a file', $file));
         }
@@ -104,8 +104,8 @@ public static function fromFile($file)
     /**
      * @return \DOMDocument
      */
-    public static function create()
+    public static function create() : DOMDocument
     {
-        return new \DOMDocument();
+        return new DOMDocument();
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/EncryptedAssertion.php b/vendor/simplesamlphp/saml2/src/SAML2/EncryptedAssertion.php
index 823bf7ee22..fde149ac24 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/EncryptedAssertion.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/EncryptedAssertion.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
+use DOMNode;
 use RobRichards\XMLSecLibs\XMLSecEnc;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
 
@@ -20,20 +24,26 @@ class EncryptedAssertion
     private $encryptedData;
 
 
+    /**
+     * @var bool
+     */
+    protected $wasSignedAtConstruction = false;
+
     /**
      * Constructor for SAML 2 encrypted assertions.
      *
      * @param \DOMElement|null $xml The encrypted assertion XML element.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
+        /** @var \DOMElement[] $data */
         $data = Utils::xpQuery($xml, './xenc:EncryptedData');
-        if (count($data) === 0) {
+        if (empty($data)) {
             throw new \Exception('Missing encrypted data in <saml:EncryptedAssertion>.');
         } elseif (count($data) > 1) {
             throw new \Exception('More than one encrypted data element in <saml:EncryptedAssertion>.');
@@ -42,6 +52,14 @@ public function __construct(\DOMElement $xml = null)
     }
 
 
+    /**
+     * @return bool
+     */
+    public function wasSignedAtConstruction() : bool
+    {
+        return $this->wasSignedAtConstruction;
+    }
+
     /**
      * Set the assertion.
      *
@@ -50,7 +68,7 @@ public function __construct(\DOMElement $xml = null)
      * @throws \Exception
      * @return void
      */
-    public function setAssertion(Assertion $assertion, XMLSecurityKey $key)
+    public function setAssertion(Assertion $assertion, XMLSecurityKey $key) : void
     {
         $xml = $assertion->toXML();
 
@@ -65,6 +83,9 @@ public function setAssertion(Assertion $assertion, XMLSecurityKey $key)
             case XMLSecurityKey::AES128_CBC:
             case XMLSecurityKey::AES192_CBC:
             case XMLSecurityKey::AES256_CBC:
+            case XMLSecurityKey::AES128_GCM:
+            case XMLSecurityKey::AES192_GCM:
+            case XMLSecurityKey::AES256_GCM:
                 $symmetricKey = $key;
                 break;
 
@@ -81,6 +102,10 @@ public function setAssertion(Assertion $assertion, XMLSecurityKey $key)
                 throw new \Exception('Unknown key type for encryption: '.$key->type);
         }
 
+        /**
+         * @var \DOMElement encryptedData
+         * @psalm-suppress UndefinedClass
+         */
         $this->encryptedData = $enc->encryptNode($symmetricKey);
     }
 
@@ -92,7 +117,7 @@ public function setAssertion(Assertion $assertion, XMLSecurityKey $key)
      * @param  array           $blacklist Blacklisted decryption algorithms.
      * @return \SAML2\Assertion The decrypted assertion.
      */
-    public function getAssertion(XMLSecurityKey $inputKey, array $blacklist = [])
+    public function getAssertion(XMLSecurityKey $inputKey, array $blacklist = []) : Assertion
     {
         $assertionXML = Utils::decryptElement($this->encryptedData, $inputKey, $blacklist);
 
@@ -108,7 +133,7 @@ public function getAssertion(XMLSecurityKey $inputKey, array $blacklist = [])
      * @param  \DOMNode|null $parentElement The DOM node the assertion should be created in.
      * @return \DOMElement   This encrypted assertion.
      */
-    public function toXML(\DOMNode $parentElement = null)
+    public function toXML(DOMNode $parentElement = null) : DOMElement
     {
         if ($parentElement === null) {
             $document = DOMDocumentFactory::create();
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Exception/InvalidArgumentException.php b/vendor/simplesamlphp/saml2/src/SAML2/Exception/InvalidArgumentException.php
index c3e9f8e185..9daebe837f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Exception/InvalidArgumentException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Exception/InvalidArgumentException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Exception;
 
 class InvalidArgumentException extends \InvalidArgumentException implements Throwable
@@ -10,7 +12,7 @@ class InvalidArgumentException extends \InvalidArgumentException implements Thro
      *
      * @return \SAML2\Exception\InvalidArgumentException
      */
-    public static function invalidType($expected, $parameter)
+    public static function invalidType(string $expected, $parameter) : InvalidArgumentException
     {
         $message = sprintf(
             'Invalid Argument type: "%s" expected, "%s" given',
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Exception/RuntimeException.php b/vendor/simplesamlphp/saml2/src/SAML2/Exception/RuntimeException.php
index 26c8c4e485..6e96d3658f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Exception/RuntimeException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Exception/RuntimeException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Exception;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Exception/Throwable.php b/vendor/simplesamlphp/saml2/src/SAML2/Exception/Throwable.php
index 5384fbac79..3242b32203 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Exception/Throwable.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Exception/Throwable.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Exception;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Exception/UnparseableXmlException.php b/vendor/simplesamlphp/saml2/src/SAML2/Exception/UnparseableXmlException.php
index dac6d549b1..b41b3bb2c0 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Exception/UnparseableXmlException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Exception/UnparseableXmlException.php
@@ -1,9 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Exception;
 
+use \LibXMLError;
+
 final class UnparseableXmlException extends RuntimeException
 {
+    /** @var array */
     private static $levelMap = [
         LIBXML_ERR_WARNING => 'WARNING',
         LIBXML_ERR_ERROR   => 'ERROR',
@@ -16,7 +21,7 @@ final class UnparseableXmlException extends RuntimeException
      *
      * @param \LibXMLError $error
      */
-    public function __construct(\LibXMLError $error)
+    public function __construct(LibXMLError $error)
     {
         $message = sprintf(
             'Unable to parse XML - "%s[%d]": "%s" in "%s" at line %d on column %d"',
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/HTTPArtifact.php b/vendor/simplesamlphp/saml2/src/SAML2/HTTPArtifact.php
index 44fa4bc423..23e26e02e0 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/HTTPArtifact.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/HTTPArtifact.php
@@ -1,25 +1,29 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
-use SAML2\Utilities\Temporal;
 use SimpleSAML\Configuration;
 use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Module\saml\Message as MSG;
 use SimpleSAML\Store;
+use SimpleSAML\Utils\HTTP;
+
+use SAML2\Utilities\Temporal;
+use SAML2\XML\saml\Issuer;
 
 /**
  * Class which implements the HTTP-Artifact binding.
  *
  * @author  Danny Bollaert, UGent AS. <danny.bollaert@ugent.be>
  * @package SimpleSAMLphp
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class HTTPArtifact extends Binding
 {
     /**
-     * @var \SimpleSAML\Configuration
+     * @var mixed
      */
     private $spMetadata;
 
@@ -31,15 +35,20 @@ class HTTPArtifact extends Binding
      * @throws \Exception
      * @return string        The URL the user should be redirected to in order to send a message.
      */
-    public function getRedirectURL(Message $message)
+    public function getRedirectURL(Message $message) : string
     {
+        /** @psalm-suppress UndefinedClass */
         $store = Store::getInstance();
         if ($store === false) {
             throw new \Exception('Unable to send artifact without a datastore configured.');
         }
 
         $generatedId = pack('H*', bin2hex(openssl_random_pseudo_bytes(20)));
-        $artifact = base64_encode("\x00\x04\x00\x00".sha1($message->getIssuer(), true).$generatedId);
+        $issuer = $message->getIssuer();
+        if ($issuer === null) {
+            throw new \Exception('Cannot get redirect URL, no Issuer set in the message.');
+        }
+        $artifact = base64_encode("\x00\x04\x00\x00".sha1($issuer->getValue(), true).$generatedId);
         $artifactData = $message->toUnsignedXML();
         $artifactDataString = $artifactData->ownerDocument->saveXML($artifactData);
 
@@ -53,7 +62,12 @@ public function getRedirectURL(Message $message)
             $params['RelayState'] = $relayState;
         }
 
-        return \SimpleSAML\Utils\HTTP::addURLparameter($message->getDestination(), $params);
+        $destination = $message->getDestination();
+        if ($destination === null) {
+            throw new \Exception('Cannot get redirect URL, no destination set in the message.');
+        }
+        /** @psalm-suppress UndefinedClass */
+        return HTTP::addURLparameters($destination, $params);
     }
 
 
@@ -63,9 +77,9 @@ public function getRedirectURL(Message $message)
      * Note: This function never returns.
      *
      * @param \SAML2\Message $message The message we should send.
-     * @retrun void
+     * @return void
      */
-    public function send(Message $message)
+    public function send(Message $message) : void
     {
         $destination = $this->getRedirectURL($message);
         Utils::getContainer()->redirect($destination);
@@ -80,7 +94,7 @@ public function send(Message $message)
      * @throws \Exception
      * @return \SAML2\Message The received message.
      */
-    public function receive()
+    public function receive(): Message
     {
         if (array_key_exists('SAMLart', $_REQUEST)) {
             $artifact = base64_decode($_REQUEST['SAMLart']);
@@ -90,6 +104,7 @@ public function receive()
             throw new \Exception('Missing SAMLart parameter.');
         }
 
+        /** @psalm-suppress UndefinedClass */
         $metadataHandler = MetaDataStorageHandler::getMetadataHandler();
 
         $idpMetadata = $metadataHandler->getMetaDataConfigForSha1($sourceId, 'saml20-idp-remote');
@@ -116,13 +131,16 @@ public function receive()
         $ar = new ArtifactResolve();
 
         /* Set the request attributes */
+        $issuer = new Issuer();
+        $issuer->setValue($this->spMetadata->getString('entityid'));
 
-        $ar->setIssuer($this->spMetadata->getString('entityid'));
+        $ar->setIssuer($issuer);
         $ar->setArtifact($_REQUEST['SAMLart']);
         $ar->setDestination($endpoint['Location']);
 
-        /* Sign the request */
-        \SimpleSAML\Module\saml\Message::addSign($this->spMetadata, $idpMetadata, $ar); // Shoaib - moved from the SOAPClient.
+        // sign the request
+        /** @psalm-suppress UndefinedClass */
+        MSG::addSign($this->spMetadata, $idpMetadata, $ar); // Shoaib - moved from the SOAPClient.
 
         $soap = new SOAPClient();
 
@@ -138,7 +156,7 @@ public function receive()
         if ($xml === null) {
             /* Empty ArtifactResponse - possibly because of Artifact replay? */
 
-            return null;
+            throw new \Exception('Empty ArtifactResponse received, maybe a replay?');
         }
 
         $samlResponse = Message::fromXML($xml);
@@ -154,9 +172,12 @@ public function receive()
 
     /**
      * @param \SimpleSAML\Configuration $sp
+     *
      * @return void
+     *
+     * @psalm-suppress UndefinedClass
      */
-    public function setSPMetadata(Configuration $sp)
+    public function setSPMetadata(Configuration $sp) : void
     {
         $this->spMetadata = $sp;
     }
@@ -169,7 +190,7 @@ public function setSPMetadata(Configuration $sp)
      * @param XMLSecurityKey $key
      * @return bool
      */
-    public static function validateSignature(ArtifactResponse $message, XMLSecurityKey $key)
+    public static function validateSignature(ArtifactResponse $message, XMLSecurityKey $key) : bool
     {
         return $message->validate($key);
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/HTTPPost.php b/vendor/simplesamlphp/saml2/src/SAML2/HTTPPost.php
index 3109f15fbf..f775aa8e83 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/HTTPPost.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/HTTPPost.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 /**
@@ -15,20 +17,24 @@ class HTTPPost extends Binding
      * Note: This function never returns.
      *
      * @param \SAML2\Message $message The message we should send.
+     * @return void
      */
-    public function send(Message $message)
+    public function send(Message $message) : void
     {
         if ($this->destination === null) {
             $destination = $message->getDestination();
+            if ($destination === null) {
+                throw new \Exception('Cannot send message, no destination set.');
+            }
         } else {
             $destination = $this->destination;
         }
         $relayState = $message->getRelayState();
 
         $msgStr = $message->toSignedXML();
-        $msgStr = $msgStr->ownerDocument->saveXML($msgStr);
 
         Utils::getContainer()->debugMessage($msgStr, 'out');
+        $msgStr = $msgStr->ownerDocument->saveXML($msgStr);
 
         $msgStr = base64_encode($msgStr);
 
@@ -57,24 +63,29 @@ public function send(Message $message)
      * @return \SAML2\Message The received message.
      * @throws \Exception
      */
-    public function receive()
+    public function receive(): Message
     {
         if (array_key_exists('SAMLRequest', $_POST)) {
-            $msg = $_POST['SAMLRequest'];
+            $msgStr = $_POST['SAMLRequest'];
         } elseif (array_key_exists('SAMLResponse', $_POST)) {
-            $msg = $_POST['SAMLResponse'];
+            $msgStr = $_POST['SAMLResponse'];
         } else {
             throw new \Exception('Missing SAMLRequest or SAMLResponse parameter.');
         }
 
-        $msg = base64_decode($msg);
+        $msgStr = base64_decode($msgStr);
 
-        Utils::getContainer()->debugMessage($msg, 'in');
+        $xml = new \DOMDocument();
+        $xml->loadXML($msgStr);
+        $msgStr = $xml->saveXML();
 
-        $document = DOMDocumentFactory::fromString($msg);
-        $xml = $document->firstChild;
+        $document = DOMDocumentFactory::fromString($msgStr);
+        Utils::getContainer()->debugMessage($document->documentElement, 'in');
+        if (!$document->firstChild instanceof \DOMElement) {
+            throw new \Exception('Malformed SAML message received.');
+        }
 
-        $msg = Message::fromXML($xml);
+        $msg = Message::fromXML($document->firstChild);
 
         if (array_key_exists('RelayState', $_POST)) {
             $msg->setRelayState($_POST['RelayState']);
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/HTTPRedirect.php b/vendor/simplesamlphp/saml2/src/SAML2/HTTPRedirect.php
index 18533dbed1..adff7293fb 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/HTTPRedirect.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/HTTPRedirect.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
@@ -14,17 +16,19 @@ class HTTPRedirect extends Binding
 {
     const DEFLATE = 'urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE';
 
-
     /**
      * Create the redirect URL for a message.
      *
-     * @param  \SAML2\Message $message The message.
-     * @return string        The URL the user should be redirected to in order to send a message.
+     * @param \SAML2\Message $message The message.
+     * @return string The URL the user should be redirected to in order to send a message.
      */
-    public function getRedirectURL(Message $message)
+    public function getRedirectURL(Message $message) : string
     {
         if ($this->destination === null) {
             $destination = $message->getDestination();
+            if ($destination === null) {
+                throw new \Exception('Cannot build a redirect URL, no destination set.');
+            }
         } else {
             $destination = $this->destination;
         }
@@ -34,9 +38,9 @@ public function getRedirectURL(Message $message)
         $key = $message->getSignatureKey();
 
         $msgStr = $message->toUnsignedXML();
-        $msgStr = $msgStr->ownerDocument->saveXML($msgStr);
 
         Utils::getContainer()->debugMessage($msgStr, 'out');
+        $msgStr = $msgStr->ownerDocument->saveXML($msgStr);
 
         $msgStr = gzdeflate($msgStr);
         $msgStr = base64_encode($msgStr);
@@ -54,8 +58,8 @@ public function getRedirectURL(Message $message)
             $msg .= '&RelayState='.urlencode($relayState);
         }
 
-        if ($key !== null) {
-            /* Add the signature. */
+        if ($key !== null) { // add the signature
+            /** @psalm-suppress PossiblyInvalidArgument */
             $msg .= '&SigAlg='.urlencode($key->type);
 
             $signature = $key->signData($msg);
@@ -79,7 +83,7 @@ public function getRedirectURL(Message $message)
      * @param \SAML2\Message $message The message we should send.
      * @return void
      */
-    public function send(Message $message)
+    public function send(Message $message) : void
     {
         $destination = $this->getRedirectURL($message);
         Utils::getContainer()->getLogger()->debug('Redirect to '.strlen($destination).' byte URL: '.$destination);
@@ -96,9 +100,8 @@ public function send(Message $message)
      * @return \SAML2\Message The received message.
      *
      * NPath is currently too high but solving that just moves code around.
-     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function receive()
+    public function receive(): Message
     {
         $data = self::parseQuery();
         if (array_key_exists('SAMLRequest', $data)) {
@@ -123,10 +126,12 @@ public function receive()
             throw new \Exception('Error while inflating SAML message.');
         }
 
-        Utils::getContainer()->debugMessage($message, 'in');
         $document = DOMDocumentFactory::fromString($message);
-        $xml      = $document->firstChild;
-        $message  = Message::fromXML($xml);
+        Utils::getContainer()->debugMessage($document->documentElement, 'in');
+        if (!$document->firstChild instanceof \DOMElement) {
+            throw new \Exception('Malformed SAML message received.');
+        }
+        $message = Message::fromXML($document->firstChild);
 
         if (array_key_exists('RelayState', $data)) {
             $message->setRelayState($data['RelayState']);
@@ -161,7 +166,7 @@ public function receive()
      *
      * @return array The query data that is signed.
      */
-    private static function parseQuery()
+    private static function parseQuery() : array
     {
         /*
          * Parse the query string. We need to do this ourself, so that we get access
@@ -214,7 +219,7 @@ private static function parseQuery()
      * @throws \Exception
      * @return void
      */
-    public static function validateSignature(array $data, XMLSecurityKey $key)
+    public static function validateSignature(array $data, XMLSecurityKey $key) : void
     {
         Assert::keyExists($data, "Query");
         Assert::keyExists($data, "SigAlg");
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/LogoutRequest.php b/vendor/simplesamlphp/saml2/src/SAML2/LogoutRequest.php
index 88c1340421..4e0694b0d8 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/LogoutRequest.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/LogoutRequest.php
@@ -1,11 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecEnc;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+
 use SAML2\XML\saml\NameID;
-use Webmozart\Assert\Assert;
 
 /**
  * Class for SAML 2 logout request messages.
@@ -19,7 +22,7 @@ class LogoutRequest extends Request
      *
      * @var int|null
      */
-    private $notOnOrAfter;
+    private $notOnOrAfter = null;
 
     /**
      * The encrypted NameID in the request.
@@ -28,21 +31,21 @@ class LogoutRequest extends Request
      *
      * @var \DOMElement|null
      */
-    private $encryptedNameId;
+    private $encryptedNameId = null;
 
     /**
      * The name identifier of the session that should be terminated.
      *
-     * @var \SAML2\XML\saml\NameID
+     * @var \SAML2\XML\saml\NameID|null
      */
-    private $nameId;
+    private $nameId = null;
 
     /**
      * The SessionIndexes of the sessions that should be terminated.
      *
      * @var array
      */
-    private $sessionIndexes;
+    private $sessionIndexes = [];
 
 
     /**
@@ -51,7 +54,7 @@ class LogoutRequest extends Request
      * @param \DOMElement|null $xml The input message.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('LogoutRequest', $xml);
 
@@ -62,23 +65,24 @@ public function __construct(\DOMElement $xml = null)
         }
 
         if ($xml->hasAttribute('NotOnOrAfter')) {
-            $this->setNotOnOrAfter(Utils::xsDateTimeToTimestamp($xml->getAttribute('NotOnOrAfter')));
+            $this->notOnOrAfter = Utils::xsDateTimeToTimestamp($xml->getAttribute('NotOnOrAfter'));
         }
 
+        /** @var \DOMElement[] $nameId */
         $nameId = Utils::xpQuery($xml, './saml_assertion:NameID | ./saml_assertion:EncryptedID/xenc:EncryptedData');
         if (empty($nameId)) {
             throw new \Exception('Missing <saml:NameID> or <saml:EncryptedID> in <samlp:LogoutRequest>.');
         } elseif (count($nameId) > 1) {
             throw new \Exception('More than one <saml:NameID> or <saml:EncryptedD> in <samlp:LogoutRequest>.');
         }
-        $nameId = $nameId[0];
-        if ($nameId->localName === 'EncryptedData') {
+        if ($nameId[0]->localName === 'EncryptedData') {
             /* The NameID element is encrypted. */
-            $this->setEncryptedNameId($nameId);
+            $this->encryptedNameId = $nameId[0];
         } else {
-            $this->setNameId(new NameID($nameId));
+            $this->nameId = new NameID($nameId[0]);
         }
 
+        /** @var \DOMElement[] $sessionIndexes */
         $sessionIndexes = Utils::xpQuery($xml, './saml_protocol:SessionIndex');
         foreach ($sessionIndexes as $sessionIndex) {
             $this->sessionIndexes[] = trim($sessionIndex->textContent);
@@ -91,7 +95,7 @@ public function __construct(\DOMElement $xml = null)
      *
      * @return int|null The expiration time of this request.
      */
-    public function getNotOnOrAfter()
+    public function getNotOnOrAfter() : ?int
     {
         return $this->notOnOrAfter;
     }
@@ -103,10 +107,8 @@ public function getNotOnOrAfter()
      * @param int|null $notOnOrAfter The expiration time of this request.
      * @return void
      */
-    public function setNotOnOrAfter($notOnOrAfter)
+    public function setNotOnOrAfter(int $notOnOrAfter = null) : void
     {
-        Assert::nullOrInteger($notOnOrAfter);
-
         $this->notOnOrAfter = $notOnOrAfter;
     }
 
@@ -116,9 +118,9 @@ public function setNotOnOrAfter($notOnOrAfter)
      *
      * @return bool True if the NameId is encrypted, false if not.
      */
-    public function isNameIdEncrypted()
+    public function isNameIdEncrypted() : bool
     {
-        if ($this->getEncryptedNameId() !== null) {
+        if ($this->encryptedNameId !== null) {
             return true;
         }
 
@@ -132,13 +134,17 @@ public function isNameIdEncrypted()
      * @param XMLSecurityKey $key The encryption key.
      * @return void
      */
-    public function encryptNameId(XMLSecurityKey $key)
+    public function encryptNameId(XMLSecurityKey $key) : void
     {
+        if ($this->nameId === null) {
+            throw new \Exception('Cannot encrypt NameID without a NameID set.');
+        }
         /* First create a XML representation of the NameID. */
         $doc = DOMDocumentFactory::create();
         $root = $doc->createElement('root');
         $doc->appendChild($root);
-        $this->getNameId()->toXML($root);
+        $this->nameId->toXML($root);
+        /** @var \DOMElement $nameId */
         $nameId = $root->firstChild;
 
         Utils::getContainer()->debugMessage($nameId, 'encrypt');
@@ -152,30 +158,33 @@ public function encryptNameId(XMLSecurityKey $key)
         $symmetricKey->generateSessionKey();
         $enc->encryptKey($key, $symmetricKey);
 
-        $this->setEncryptedNameId($enc->encryptNode($symmetricKey));
-        $this->setNameId(null);
+        /**
+         * @var \DOMElement encryptedNameId
+         * @psalm-suppress UndefinedClass
+         */
+        $this->encryptedNameId = $enc->encryptNode($symmetricKey);
+        $this->nameId = null;
     }
 
 
     /**
      * Decrypt the NameID in the LogoutRequest.
      *
-     * @param XMLSecurityKey $key       The decryption key.
-     * @param array          $blacklist Blacklisted decryption algorithms.
+     * @param XMLSecurityKey $key The decryption key.
+     * @param array $blacklist Blacklisted decryption algorithms.
      * @return void
      */
-    public function decryptNameId(XMLSecurityKey $key, array $blacklist = [])
+    public function decryptNameId(XMLSecurityKey $key, array $blacklist = []) : void
     {
-        if ($this->getEncryptedNameId() === null) {
+        if ($this->encryptedNameId === null) {
             /* No NameID to decrypt. */
             return;
         }
 
-        $nameId = Utils::decryptElement($this->getEncryptedNameId(), $key, $blacklist);
+        $nameId = Utils::decryptElement($this->encryptedNameId, $key, $blacklist);
         Utils::getContainer()->debugMessage($nameId, 'decrypt');
-        $this->setNameId(new NameID($nameId));
-
-        $this->setEncryptedNameId(null);
+        $this->nameId = new NameID($nameId);
+        $this->encryptedNameId = null;
     }
 
 
@@ -183,11 +192,11 @@ public function decryptNameId(XMLSecurityKey $key, array $blacklist = [])
      * Retrieve the name identifier of the session that should be terminated.
      *
      * @throws \Exception
-     * @return \SAML2\XML\saml\NameID The name identifier of the session that should be terminated.
+     * @return \SAML2\XML\saml\NameID|null The name identifier of the session that should be terminated.
      */
-    public function getNameId()
+    public function getNameId() : ?NameID
     {
-        if ($this->getEncryptedNameId() !== null) {
+        if ($this->encryptedNameId !== null) {
             throw new \Exception('Attempted to retrieve encrypted NameID without decrypting it first.');
         }
 
@@ -198,49 +207,21 @@ public function getNameId()
     /**
      * Set the name identifier of the session that should be terminated.
      *
-     * @param \SAML2\XML\saml\NameID|array|null $nameId The name identifier of the session that should be terminated.
+     * @param \SAML2\XML\saml\NameID $nameId The name identifier of the session that should be terminated.
      * @return void
      */
-    public function setNameId($nameId)
+    public function setNameId(NameID $nameId) : void
     {
-        Assert::true(is_array($nameId) || $nameId instanceof NameID || is_null($nameId));
-
-        if (is_array($nameId)) {
-            $nameId = NameID::fromArray($nameId);
-        }
         $this->nameId = $nameId;
     }
 
 
-    /**
-     * Retrieve the encrypted name identifier.
-     *
-     * @return \DOMElement|null
-     */
-    private function getEncryptedNameId()
-    {
-        return $this->encryptedNameId;
-    }
-
-
-    /**
-     * Set the encrypted name identifier.
-     *
-     * @param \DOMElement|null $nameId The name identifier of the session that should be terminated.
-     * @return void
-     */
-    private function setEncryptedNameId(\DOMElement $nameId = null)
-    {
-        $this->encryptedNameId = $nameId;
-    }
-
-
     /**
      * Retrieve the SessionIndexes of the sessions that should be terminated.
      *
      * @return array The SessionIndexes, or an empty array if all sessions should be terminated.
      */
-    public function getSessionIndexes()
+    public function getSessionIndexes() : array
     {
         return $this->sessionIndexes;
     }
@@ -252,7 +233,7 @@ public function getSessionIndexes()
      * @param array $sessionIndexes The SessionIndexes, or an empty array if all sessions should be terminated.
      * @return void
      */
-    public function setSessionIndexes(array $sessionIndexes)
+    public function setSessionIndexes(array $sessionIndexes) : void
     {
         $this->sessionIndexes = $sessionIndexes;
     }
@@ -263,7 +244,7 @@ public function setSessionIndexes(array $sessionIndexes)
      *
      * @return string|null The sesion index of the session that should be terminated.
      */
-    public function getSessionIndex()
+    public function getSessionIndex() : ?string
     {
         if (empty($this->sessionIndexes)) {
             return null;
@@ -279,10 +260,8 @@ public function getSessionIndex()
      * @param string|null $sessionIndex The sesion index of the session that should be terminated.
      * @return void
      */
-    public function setSessionIndex($sessionIndex)
+    public function setSessionIndex(string $sessionIndex = null) : void
     {
-        Assert::nullOrString($sessionIndex);
-
         if (is_null($sessionIndex)) {
             $this->sessionIndexes = [];
         } else {
@@ -296,20 +275,24 @@ public function setSessionIndex($sessionIndex)
      *
      * @return \DOMElement This logout request.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
+        if ($this->encryptedNameId === null && $this->nameId === null) {
+            throw new \Exception('Cannot convert LogoutRequest to XML without a NameID set.');
+        }
+
         $root = parent::toUnsignedXML();
 
         if ($this->notOnOrAfter !== null) {
-            $root->setAttribute('NotOnOrAfter', gmdate('Y-m-d\TH:i:s\Z', $this->getNotOnOrAfter()));
+            $root->setAttribute('NotOnOrAfter', gmdate('Y-m-d\TH:i:s\Z', $this->notOnOrAfter));
         }
 
-        if ($this->getEncryptedNameId() === null) {
+        if ($this->encryptedNameId === null) {
             $this->nameId->toXML($root);
         } else {
             $eid = $root->ownerDocument->createElementNS(Constants::NS_SAML, 'saml:'.'EncryptedID');
             $root->appendChild($eid);
-            $eid->appendChild($root->ownerDocument->importNode($this->getEncryptedNameId(), true));
+            $eid->appendChild($root->ownerDocument->importNode($this->encryptedNameId, true));
         }
 
         foreach ($this->sessionIndexes as $sessionIndex) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/LogoutResponse.php b/vendor/simplesamlphp/saml2/src/SAML2/LogoutResponse.php
index 214e305e05..c588fad846 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/LogoutResponse.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/LogoutResponse.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
+
 /**
  * Class for SAML 2 LogoutResponse messages.
  *
@@ -14,7 +18,7 @@ class LogoutResponse extends StatusResponse
      *
      * @param \DOMElement|null $xml     The input message.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('LogoutResponse', $xml);
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Message.php b/vendor/simplesamlphp/saml2/src/SAML2/Message.php
index 1dace0cd27..76bbbee4f2 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Message.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Message.php
@@ -1,24 +1,23 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+
 use SAML2\Utilities\Temporal;
 use SAML2\XML\saml\Issuer;
 use SAML2\XML\samlp\Extensions;
-use Webmozart\Assert\Assert;
 
 /**
  * Base class for all SAML 2 messages.
  *
  * Implements what is common between the samlp:RequestAbstractType and
  * samlp:StatusResponseType element types.
- *
- *
- * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-abstract class Message implements SignedElement
+abstract class Message extends SignedElement
 {
     /**
      * Request extensions.
@@ -55,28 +54,28 @@ abstract class Message implements SignedElement
      *
      * @var string|null
      */
-    private $destination;
+    private $destination = null;
 
     /**
      * The destination URL of this message if it is known.
      *
-     * @var string|null
+     * @var string
      */
     private $consent = Constants::CONSENT_UNSPECIFIED;
 
     /**
      * The entity id of the issuer of this message, or null if unknown.
      *
-     * @var string|\SAML2\XML\saml\Issuer|null
+     * @var \SAML2\XML\saml\Issuer|null
      */
-    private $issuer;
+    private $issuer = null;
 
     /**
      * The RelayState associated with this message.
      *
      * @var string|null
      */
-    private $relayState;
+    private $relayState = null;
 
     /**
      * The \DOMDocument we are currently building.
@@ -95,7 +94,7 @@ abstract class Message implements SignedElement
      *
      * @var XMLSecurityKey|null
      */
-    private $signatureKey;
+    protected $signatureKey;
 
     /**
      * @var bool
@@ -107,7 +106,7 @@ abstract class Message implements SignedElement
      *
      * @var array
      */
-    private $certificates;
+    protected $certificates;
 
     /**
      * Available methods for validating this message.
@@ -119,7 +118,7 @@ abstract class Message implements SignedElement
     /**
      * @var null|string
      */
-    private $signatureMethod;
+    private $signatureMethod = null;
 
 
     /**
@@ -132,14 +131,13 @@ abstract class Message implements SignedElement
      * If no XML element is given, the message is initialized with suitable
      * default values.
      *
-     * @param string           $tagName The tag name of the root element
-     * @param \DOMElement|null $xml     The input message
+     * @param string $tagName The tag name of the root element
+     * @param \DOMElement|null $xml The input message
      *
      * @throws \Exception
      */
-    protected function __construct($tagName, \DOMElement $xml = null)
+    protected function __construct(string $tagName, DOMElement $xml = null)
     {
-        Assert::string($tagName);
         $this->tagName = $tagName;
 
         $this->id = Utils::getContainer()->generateId();
@@ -171,12 +169,10 @@ protected function __construct($tagName, \DOMElement $xml = null)
             $this->consent = $xml->getAttribute('Consent');
         }
 
+        /** @var \DOMElement[] $issuer */
         $issuer = Utils::xpQuery($xml, './saml_assertion:Issuer');
         if (!empty($issuer)) {
             $this->issuer = new Issuer($issuer[0]);
-            if ($this->issuer->Format === Constants::NAMEID_ENTITY) {
-                $this->issuer = $this->issuer->value;
-            }
         }
 
         $this->validateSignature($xml);
@@ -195,11 +191,14 @@ protected function __construct($tagName, \DOMElement $xml = null)
      * @param \DOMElement $xml The SAML message whose signature we want to validate.
      * @return void
      */
-    private function validateSignature(\DOMElement $xml)
+    private function validateSignature(DOMElement $xml) : void
     {
         try {
-            /** @var null|\DOMAttr $signatureMethod */
+            /** @var \DOMAttr[] $signatureMethod */
             $signatureMethod = Utils::xpQuery($xml, './ds:Signature/ds:SignedInfo/ds:SignatureMethod/@Algorithm');
+            if (empty($signatureMethod)) {
+                throw new \Exception('No Algorithm specified in signature.');
+            }
 
             $sig = Utils::validateElement($xml);
 
@@ -224,11 +223,11 @@ private function validateSignature(\DOMElement $xml)
      * This function is used by the HTTP-Redirect binding, to make it possible to
      * check the signature against the one included in the query string.
      *
-     * @param callback $function The function which should be called
-     * @param mixed    $data     The data that should be included as the first parameter to the function
+     * @param callable $function The function which should be called
+     * @param mixed $data The data that should be included as the first parameter to the function
      * @return void
      */
-    public function addValidator(callable $function, $data)
+    public function addValidator(callable $function, $data) : void
     {
         $this->validators[] = [
             'Function' => $function,
@@ -248,7 +247,7 @@ public function addValidator(callable $function, $data)
      * @throws \Exception
      * @return bool true on success, false when we don't have a signature
      */
-    public function validate(XMLSecurityKey $key)
+    public function validate(XMLSecurityKey $key) : bool
     {
         if (count($this->validators) === 0) {
             return false;
@@ -280,7 +279,7 @@ public function validate(XMLSecurityKey $key)
      *
      * @return string The identifier of this message
      */
-    public function getId()
+    public function getId() : string
     {
         return $this->id;
     }
@@ -292,10 +291,8 @@ public function getId()
      * @param string $id The new identifier of this message
      * @return void
      */
-    public function setId($id)
+    public function setId(string $id) : void
     {
-        Assert::string($id);
-
         $this->id = $id;
     }
 
@@ -305,7 +302,7 @@ public function setId($id)
      *
      * @return int The issue timestamp of this message, as an UNIX timestamp
      */
-    public function getIssueInstant()
+    public function getIssueInstant() : int
     {
         return $this->issueInstant;
     }
@@ -317,10 +314,8 @@ public function getIssueInstant()
      * @param int $issueInstant The new issue timestamp of this message, as an UNIX timestamp
      * @return void
      */
-    public function setIssueInstant($issueInstant)
+    public function setIssueInstant(int $issueInstant) : void
     {
-        Assert::integer($issueInstant);
-
         $this->issueInstant = $issueInstant;
     }
 
@@ -330,7 +325,7 @@ public function setIssueInstant($issueInstant)
      *
      * @return string|null The destination of this message, or NULL if no destination is given
      */
-    public function getDestination()
+    public function getDestination() : ?string
     {
         return $this->destination;
     }
@@ -342,10 +337,8 @@ public function getDestination()
      * @param string|null $destination The new destination of this message
      * @return void
      */
-    public function setDestination($destination)
+    public function setDestination(string $destination = null) : void
     {
-        Assert::nullOrString($destination);
-
         $this->destination = $destination;
     }
 
@@ -358,10 +351,8 @@ public function setDestination($destination)
      * @param string $consent
      * @return void
      */
-    public function setConsent($consent)
+    public function setConsent(string $consent) : void
     {
-        Assert::string($consent);
-
         $this->consent = $consent;
     }
 
@@ -371,9 +362,9 @@ public function setConsent($consent)
      * Most likely (though not required) a value of urn:oasis:names:tc:SAML:2.0:consent.
      *
      * @see \SAML2\Constants
-     * @return string Consent
+     * @return string|null Consent
      */
-    public function getConsent()
+    public function getConsent() : ?string
     {
         return $this->consent;
     }
@@ -382,28 +373,22 @@ public function getConsent()
     /**
      * Retrieve the issuer if this message.
      *
-     * @return string|\SAML2\XML\saml\Issuer|null The issuer of this message, or NULL if no issuer is given
+     * @return \SAML2\XML\saml\Issuer|null The issuer of this message, or NULL if no issuer is given
      */
-    public function getIssuer()
+    public function getIssuer() : ?Issuer
     {
-        if (is_string($this->issuer) || $this->issuer instanceof Issuer) {
-            return $this->issuer;
-        }
-
-        return null;
+        return $this->issuer;
     }
 
 
     /**
      * Set the issuer of this message.
      *
-     * @param string|\SAML2\XML\saml\Issuer|null $issuer The new issuer of this message
+     * @param \SAML2\XML\saml\Issuer|null $issuer The new issuer of this message
      * @return void
      */
-    public function setIssuer($issuer)
+    public function setIssuer(Issuer $issuer = null) : void
     {
-        Assert::true(is_string($issuer) || $issuer instanceof Issuer || is_null($issuer));
-
         $this->issuer = $issuer;
     }
 
@@ -413,7 +398,7 @@ public function setIssuer($issuer)
      *
      * @return bool
      */
-    public function isMessageConstructedWithSignature()
+    public function isMessageConstructedWithSignature() : bool
     {
         return $this->messageContainedSignatureUponConstruction;
     }
@@ -424,7 +409,7 @@ public function isMessageConstructedWithSignature()
      *
      * @return string|null The RelayState, or NULL if no RelayState is given
      */
-    public function getRelayState()
+    public function getRelayState() : ?string
     {
         return $this->relayState;
     }
@@ -436,10 +421,8 @@ public function getRelayState()
      * @param string|null $relayState The new RelayState
      * @return void
      */
-    public function setRelayState($relayState)
+    public function setRelayState(string $relayState = null) : void
     {
-        Assert::nullOrString($relayState);
-
         $this->relayState = $relayState;
     }
 
@@ -450,7 +433,7 @@ public function setRelayState($relayState)
      *
      * @return \DOMElement The root element of the DOM tree
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $this->document = DOMDocumentFactory::create();
 
@@ -468,21 +451,15 @@ public function toUnsignedXML()
         if ($this->destination !== null) {
             $root->setAttribute('Destination', $this->destination);
         }
-        if ($this->consent !== null && $this->consent !== Constants::CONSENT_UNSPECIFIED) {
+        if ($this->consent !== Constants::CONSENT_UNSPECIFIED) {
             $root->setAttribute('Consent', $this->consent);
         }
 
         if ($this->issuer !== null) {
-            if (is_string($this->issuer)) {
-                Utils::addString($root, Constants::NS_SAML, 'saml:Issuer', $this->issuer);
-            } elseif ($this->issuer instanceof Issuer) {
-                $this->issuer->toXML($root);
-            }
+            $this->issuer->toXML($root);
         }
 
-        if (!empty($this->extensions)) {
-            Extensions::addList($root, $this->extensions);
-        }
+        Extensions::addList($root, $this->extensions);
 
         return $root;
     }
@@ -495,7 +472,7 @@ public function toUnsignedXML()
      *
      * @return \DOMElement The root element of the DOM tree
      */
-    public function toSignedXML()
+    public function toSignedXML() : DOMElement
     {
         $root = $this->toUnsignedXML();
 
@@ -512,6 +489,7 @@ public function toSignedXML()
              * after the issuer node.
              */
             $issuerNode = $root->firstChild;
+            /** @psalm-suppress PossiblyNullPropertyFetch */
             $insertBefore = $issuerNode->nextSibling;
         } else {
             /* No issuer node - the signature element should be the first element. */
@@ -529,7 +507,7 @@ public function toSignedXML()
      *
      * @return XMLSecurityKey|null The key, or NULL if no key is specified
      */
-    public function getSignatureKey()
+    public function getSignatureKey() : ?XMLSecurityKey
     {
         return $this->signatureKey;
     }
@@ -542,7 +520,7 @@ public function getSignatureKey()
      * @param XMLSecurityKey|null $signatureKey
      * @return void
      */
-    public function setSignatureKey(XMLSecurityKey $signatureKey = null)
+    public function setSignatureKey(XMLSecurityKey $signatureKey = null) : void
     {
         $this->signatureKey = $signatureKey;
     }
@@ -555,7 +533,7 @@ public function setSignatureKey(XMLSecurityKey $signatureKey = null)
      * @param array $certificates An array of certificates
      * @return void
      */
-    public function setCertificates(array $certificates)
+    public function setCertificates(array $certificates) : void
     {
         $this->certificates = $certificates;
     }
@@ -566,7 +544,7 @@ public function setCertificates(array $certificates)
      *
      * @return array An array of certificates
      */
-    public function getCertificates()
+    public function getCertificates() : array
     {
         return $this->certificates;
     }
@@ -579,7 +557,7 @@ public function getCertificates()
      * @throws \Exception
      * @return \SAML2\Message The message
      */
-    public static function fromXML(\DOMElement $xml)
+    public static function fromXML(\DOMElement $xml) : Message
     {
         if ($xml->namespaceURI !== Constants::NS_SAMLP) {
             throw new \Exception('Unknown namespace of SAML message: '.var_export($xml->namespaceURI, true));
@@ -611,7 +589,7 @@ public static function fromXML(\DOMElement $xml)
      *
      * @return \SAML2\XML\samlp\Extensions[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->extensions;
     }
@@ -623,7 +601,7 @@ public function getExtensions()
      * @param array $extensions The Extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->extensions = $extensions;
     }
@@ -635,7 +613,7 @@ public function setExtensions(array $extensions)
      * @param \SAML2\XML\samlp\Extensions $extensions The Extensions
      * @return void
      */
-    public function addExtension(Extensions $extension)
+    public function addExtension(Extensions $extension) : void
     {
         $this->extensions[] = $extension;
     }
@@ -644,7 +622,7 @@ public function addExtension(Extensions $extension)
     /**
      * @return null|string
      */
-    public function getSignatureMethod()
+    public function getSignatureMethod() : ?string
     {
         return $this->signatureMethod;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Request.php b/vendor/simplesamlphp/saml2/src/SAML2/Request.php
index a18a704265..1ba202db1e 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Request.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Request.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response.php b/vendor/simplesamlphp/saml2/src/SAML2/Response.php
index 76076e6671..fc50787506 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
+
 /**
  * Class for SAML 2 Response messages.
  *
@@ -11,6 +15,8 @@ class Response extends StatusResponse
 {
     /**
      * The assertions in this response.
+     *
+     * @var (Assertion|EncryptedAssertion)[]
      */
     private $assertions;
 
@@ -20,7 +26,7 @@ class Response extends StatusResponse
      *
      * @param \DOMElement|null $xml The input message.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('Response', $xml);
 
@@ -30,9 +36,11 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
-        for ($node = $xml->firstChild; $node !== null; $node = $node->nextSibling) {
+        foreach ($xml->childNodes as $node) {
             if ($node->namespaceURI !== Constants::NS_SAML) {
                 continue;
+            } else if (!($node instanceof DOMElement)) {
+                continue;
             }
 
             if ($node->localName === 'Assertion') {
@@ -49,7 +57,7 @@ public function __construct(\DOMElement $xml = null)
      *
      * @return \SAML2\Assertion[]|\SAML2\EncryptedAssertion[]
      */
-    public function getAssertions()
+    public function getAssertions() : array
     {
         return $this->assertions;
     }
@@ -61,7 +69,7 @@ public function getAssertions()
      * @param \SAML2\Assertion[]|\SAML2\EncryptedAssertion[] $assertions The assertions.
      * @return void
      */
-    public function setAssertions(array $assertions)
+    public function setAssertions(array $assertions) : void
     {
         $this->assertions = $assertions;
     }
@@ -72,7 +80,7 @@ public function setAssertions(array $assertions)
      *
      * @return \DOMElement This response.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $root = parent::toUnsignedXML();
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidResponseException.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidResponseException.php
index 4bbc2e3088..56491a1bcf 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidResponseException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidResponseException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Exception;
 
 use SAML2\Exception\Throwable;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidSignatureException.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidSignatureException.php
index fdcc6c5027..bc0457689b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidSignatureException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/InvalidSignatureException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Exception;
 
 class InvalidSignatureException extends InvalidResponseException
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/NoAssertionsFoundException.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/NoAssertionsFoundException.php
index c357223dda..9ae6bd4e5c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/NoAssertionsFoundException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/NoAssertionsFoundException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Exception;
 
 class NoAssertionsFoundException extends InvalidResponseException
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/PreconditionNotMetException.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/PreconditionNotMetException.php
index fe0a14c1e7..3b7767059f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/PreconditionNotMetException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/PreconditionNotMetException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Exception;
 
 use SAML2\Response\Validation\Result;
@@ -13,7 +15,7 @@ class PreconditionNotMetException extends InvalidResponseException
      * @param Result $result
      * @return PreconditionNotMetException
      */
-    public static function createFromValidationResult(Result $result)
+    public static function createFromValidationResult(Result $result) : PreconditionNotMetException
     {
         $message = sprintf(
             'Cannot process response, preconditions not met: "%s"',
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnencryptedAssertionFoundException.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnencryptedAssertionFoundException.php
index c2d4266862..de4d2e8813 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnencryptedAssertionFoundException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnencryptedAssertionFoundException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Exception;
 
 use SAML2\Exception\Throwable;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnsignedResponseException.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnsignedResponseException.php
index 09aac9591f..90f34890c7 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnsignedResponseException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Exception/UnsignedResponseException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Exception;
 
 use SAML2\Exception\Throwable;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Processor.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Processor.php
index 666de8198b..68a3e6e150 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Processor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Processor.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response;
 
 use Psr\Log\LoggerInterface;
+
 use SAML2\Assertion\ProcessorBuilder;
 use SAML2\Configuration\Destination;
 use SAML2\Configuration\IdentityProvider;
@@ -14,10 +17,8 @@
 use SAML2\Response\Exception\UnsignedResponseException;
 use SAML2\Response\Validation\PreconditionValidator;
 use SAML2\Signature\Validator;
+use SAML2\Utilities\ArrayCollection;
 
-/**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - due to specific exceptions
- */
 class Processor
 {
     /**
@@ -63,17 +64,17 @@ public function __construct(LoggerInterface $logger)
     /**
      * @param \SAML2\Configuration\ServiceProvider  $serviceProviderConfiguration
      * @param \SAML2\Configuration\IdentityProvider $identityProviderConfiguration
-     * @param \SAML2\Configuration\Destination      $currentDestination
-     * @param \SAML2\Response                       $response
+     * @param \SAML2\Configuration\Destination $currentDestination
+     * @param \SAML2\Response $response
      *
-     * @return \SAML2\Assertion[] Collection (\SAML2\Utilities\ArrayCollection) of \SAML2\Assertion objects
+     * @return \SAML2\Utilities\ArrayCollection Collection of \SAML2\Assertion objects
      */
     public function process(
         ServiceProvider $serviceProviderConfiguration,
         IdentityProvider $identityProviderConfiguration,
         Destination $currentDestination,
         Response $response
-    ) {
+    ) : ArrayCollection {
         $this->preconditionValidator = new PreconditionValidator($currentDestination);
         $this->assertionProcessor = ProcessorBuilder::build(
             $this->logger,
@@ -97,7 +98,7 @@ public function process(
      * @throws PreconditionNotMetException
      * @return void
      */
-    private function enforcePreconditions(Response $response)
+    private function enforcePreconditions(Response $response) : void
     {
         $result = $this->preconditionValidator->validate($response);
 
@@ -108,15 +109,13 @@ private function enforcePreconditions(Response $response)
 
 
     /**
-     * @param \SAML2\Response                       $response
+     * @param \SAML2\Response $response
      * @param \SAML2\Configuration\IdentityProvider $identityProviderConfiguration
      * @throws InvalidResponseException
      * @return void
      */
-    private function verifySignature(
-        Response $response,
-        IdentityProvider $identityProviderConfiguration
-    ) {
+    private function verifySignature(Response $response, IdentityProvider $identityProviderConfiguration) : void
+    {
         if (!$response->isMessageConstructedWithSignature()) {
             $this->logger->info(sprintf(
                 'SAMLResponse with id "%s" was not signed at root level, not attempting to verify the signature of the'
@@ -135,7 +134,9 @@ private function verifySignature(
         $this->responseIsSigned = true;
 
         if (!$this->signatureValidator->hasValidSignature($response, $identityProviderConfiguration)) {
-            throw new InvalidResponseException();
+            throw new InvalidResponseException(
+                sprintf('The SAMLResponse with id "%s", does not have a valid signature', $response->getId())
+            );
         }
     }
 
@@ -144,18 +145,22 @@ private function verifySignature(
      * @param \SAML2\Response $response
      * @throws UnsignedResponseException
      * @throws NoAssertionsFoundException
-     * @return \SAML2\Assertion[]
+     * @return \SAML2\Utilities\ArrayCollection
      */
-    private function processAssertions(Response $response)
+    private function processAssertions(Response $response) : ArrayCollection
     {
         $assertions = $response->getAssertions();
         if (empty($assertions)) {
             throw new NoAssertionsFoundException('No assertions found in response from IdP.');
         }
 
+        $decryptedAssertions = $this->assertionProcessor->decryptAssertions(
+            new ArrayCollection($assertions)
+        );
+
         if (!$this->responseIsSigned) {
             foreach ($assertions as $assertion) {
-                if (!$assertion->getWasSignedAtConstruction()) {
+                if (!$assertion->wasSignedAtConstruction()) {
                     throw new UnsignedResponseException(
                         'Both the response and the assertion it contains are not signed.'
                     );
@@ -163,6 +168,6 @@ private function processAssertions(Response $response)
             }
         }
 
-        return $this->assertionProcessor->processAssertions($assertions);
+        return $this->assertionProcessor->processAssertions($decryptedAssertions);
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator.php
index 2b761d6731..c4c20df50c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Validation;
 
 use SAML2\Response;
@@ -11,5 +13,5 @@ interface ConstraintValidator
      * @param Result $result
      * @return void
      */
-    public function validate(Response $response, Result $result);
+    public function validate(Response $response, Result $result) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/DestinationMatches.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/DestinationMatches.php
index 4e20831509..cc27445515 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/DestinationMatches.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/DestinationMatches.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Validation\ConstraintValidator;
 
 use SAML2\Configuration\Destination;
@@ -7,7 +9,7 @@
 use SAML2\Response\Validation\ConstraintValidator;
 use SAML2\Response\Validation\Result;
 
-class DestinationMatches implements
+final class DestinationMatches implements
     ConstraintValidator
 {
     /**
@@ -16,7 +18,8 @@ class DestinationMatches implements
     private $expectedDestination;
 
     /**
-     * Constructor for DestinationMatches
+     * DestinationMatches constructor.
+     *
      * @param Destination $destination
      */
     public function __construct(Destination $destination)
@@ -30,14 +33,17 @@ public function __construct(Destination $destination)
      * @param Result $result
      * @return void
      */
-    public function validate(Response $response, Result $result)
+    public function validate(Response $response, Result $result) : void
     {
         $destination = $response->getDestination();
+        if ($destination === null) {
+            throw new \Exception('No destination set in the response.');
+        }
         if (!$this->expectedDestination->equals(new Destination($destination))) {
             $result->addError(sprintf(
                 'Destination in response "%s" does not match the expected destination "%s"',
                 $destination,
-                $this->expectedDestination
+                strval($this->expectedDestination)
             ));
         }
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/IsSuccessful.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/IsSuccessful.php
index 1f17ae3409..06440c7b6b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/IsSuccessful.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/ConstraintValidator/IsSuccessful.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Validation\ConstraintValidator;
 
 use SAML2\Constants;
@@ -12,12 +14,12 @@ class IsSuccessful implements ConstraintValidator
     /**
      * @param \SAML2\Response $response
      * @param \SAML2\Response\Validation\Result $result
-     *
+     * @return void
      */
     public function validate(
         Response $response,
         Result $result
-    ) {
+    ) : void {
         if (!$response->isSuccess()) {
             $result->addError($this->buildMessage($response->getStatus()));
         }
@@ -29,7 +31,7 @@ public function validate(
      *
      * @return string
      */
-    private function buildMessage(array $responseStatus)
+    private function buildMessage(array $responseStatus) : string
     {
         return sprintf(
             '%s%s%s',
@@ -46,7 +48,7 @@ private function buildMessage(array $responseStatus)
      *
      * @return string
      */
-    private function truncateStatus($status)
+    private function truncateStatus(string $status) : string
     {
         $prefixLength = strlen(Constants::STATUS_PREFIX);
         if (strpos($status, Constants::STATUS_PREFIX) !== 0) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/PreconditionValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/PreconditionValidator.php
index 54230ea570..2f61468ddf 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/PreconditionValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/PreconditionValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Validation;
 
 use SAML2\Configuration\Destination;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Result.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Result.php
index 3310a4443c..a0d352ec00 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Result.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Result.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Validation;
 
 use SAML2\Exception\InvalidArgumentException;
@@ -16,16 +18,12 @@ class Result
 
 
     /**
-     * @param $message
+     * @param string $message
      * @throws InvalidArgumentException
      * @return void
      */
-    public function addError($message)
+    public function addError(string $message) : void
     {
-        if (!is_string($message)) {
-            throw InvalidArgumentException::invalidType('string', $message);
-        }
-
         $this->errors[] = $message;
     }
 
@@ -33,7 +31,7 @@ public function addError($message)
     /**
      * @return bool
      */
-    public function isValid()
+    public function isValid() : bool
     {
         return empty($this->errors);
     }
@@ -42,7 +40,7 @@ public function isValid()
     /**
      * @return array
      */
-    public function getErrors()
+    public function getErrors() : array
     {
         return $this->errors;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Validator.php b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Validator.php
index 07ab3f79a9..1f5f4021fe 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Validator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Response/Validation/Validator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Response\Validation;
 
 use SAML2\Response;
@@ -16,7 +18,7 @@ class Validator
      * @param ConstraintValidator $constraint
      * @return void
      */
-    public function addConstraintValidator(ConstraintValidator $constraint)
+    public function addConstraintValidator(ConstraintValidator $constraint) : void
     {
         $this->constraints[] = $constraint;
     }
@@ -26,7 +28,7 @@ public function addConstraintValidator(ConstraintValidator $constraint)
      * @param Response $response
      * @return Result
      */
-    public function validate(Response $response)
+    public function validate(Response $response) : Result
     {
         $result = new Result();
         foreach ($this->constraints as $validator) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/SOAP.php b/vendor/simplesamlphp/saml2/src/SAML2/SOAP.php
index a7686e151f..e54b27b419 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/SOAP.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/SOAP.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 use DOMDocument;
+
 use SAML2\XML\ecp\Response as ECPResponse;
 
 /**
@@ -14,7 +17,8 @@ class SOAP extends Binding
 {
     /**
      * @param Message $message
-     * @return string|bool The XML or false on error
+     * @throws \Exception
+     * @return string|false The XML or false on error
      */
     public function getOutputToSend(Message $message)
     {
@@ -34,10 +38,15 @@ public function getOutputToSend(Message $message)
         // containing another message (e.g. a Response), however in the ECP
         // profile, this is the Response itself.
         if ($message instanceof Response) {
+            /** @var \DOMElement $header */
             $header = $doc->getElementsByTagNameNS(Constants::NS_SOAP, 'Header')->item(0);
 
-            $response = new ECPResponse;
-            $response->setAssertionConsumerServiceURL($this->getDestination() ?: $message->getDestination());
+            $response = new ECPResponse();
+            $destination = $this->destination ?: $message->getDestination();
+            if ($destination === null) {
+                throw new \Exception('No destination available for SOAP message.');
+            }
+            $response->setAssertionConsumerServiceURL($destination);
 
             $response->toXML($header);
 
@@ -50,6 +59,7 @@ public function getOutputToSend(Message $message)
             // See Section 2.3.6.1
         }
 
+        /** @var \DOMElement $body */
         $body = $doc->getElementsByTagNameNs(Constants::NS_SOAP, 'Body')->item(0);
 
         $body->appendChild($doc->importNode($message->toSignedXML(), true));
@@ -65,17 +75,18 @@ public function getOutputToSend(Message $message)
      *
      * @param \SAML2\Message $message The message we should send.
      * @return void
-     *
-     * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function send(Message $message)
+    public function send(Message $message) : void
     {
         header('Content-Type: text/xml', true);
 
         $xml = $this->getOutputToSend($message);
-        Utils::getContainer()->debugMessage($xml, 'out');
-        echo $xml;
+        if ($xml !== false) {
+            Utils::getContainer()->debugMessage($xml, 'out');
+            echo $xml;
+        }
 
+        // DOMDocument::saveXML() returned false. Something is seriously wrong here. Not much we can do.
         exit(0);
     }
 
@@ -86,24 +97,26 @@ public function send(Message $message)
      * @throws \Exception If unable to receive the message
      * @return \SAML2\Message The received message.
      */
-    public function receive()
+    public function receive() : Message
     {
         $postText = $this->getInputStream();
 
-        if (empty($postText)) {
+        if ($postText === false) {
             throw new \Exception('Invalid message received to AssertionConsumerService endpoint.');
         }
 
         $document = DOMDocumentFactory::fromString($postText);
+        /** @var \DOMNode $xml */
         $xml = $document->firstChild;
-        Utils::getContainer()->debugMessage($xml, 'in');
+        Utils::getContainer()->debugMessage($document->documentElement, 'in');
+        /** @var \DOMElement[] $results */
         $results = Utils::xpQuery($xml, '/soap-env:Envelope/soap-env:Body/*[1]');
 
         return Message::fromXML($results[0]);
     }
 
     /**
-     * @return string|bool
+     * @return string|false
      */
     protected function getInputStream()
     {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/SOAPClient.php b/vendor/simplesamlphp/saml2/src/SAML2/SOAPClient.php
index 2bd9e8819f..3bb08639e9 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/SOAPClient.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/SOAPClient.php
@@ -1,11 +1,19 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMDocument;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
-use SAML2\Exception\RuntimeException;
+use SAML2\Exception\InvalidArgumentException;
+use SAML2\Exception\UnparseableXmlException;
 use SimpleSAML\Configuration;
-use Webmozart\Assert\Assert;
+use SimpleSAML\Utils\Config;
+use SimpleSAML\Utils\Crypto;
+
+use SAML2\Compat\ContainerSingleton;
+use SAML2\Exception\RuntimeException;
 
 /**
  * Implementation of the SAML 2.0 SOAP binding.
@@ -15,20 +23,23 @@
  */
 class SOAPClient
 {
-    const START_SOAP_ENVELOPE = '<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"><soap-env:Header/><soap-env:Body>';
+    const START_SOAP_ENVELOPE = '<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">\
+        <soap-env:Header/><soap-env:Body>';
     const END_SOAP_ENVELOPE = '</soap-env:Body></soap-env:Envelope>';
 
 
     /**
      * This function sends the SOAP message to the service location and returns SOAP response
      *
-     * @param  \SAML2\Message            $msg         The request that should be sent.
-     * @param  \SimpleSAML\Configuration $srcMetadata The metadata of the issuer of the message.
-     * @param  \SimpleSAML\Configuration $dstMetadata The metadata of the destination of the message.
+     * @param \SAML2\Message $msg The request that should be sent.
+     * @param \SimpleSAML\Configuration $srcMetadata The metadata of the issuer of the message.
+     * @param \SimpleSAML\Configuration $dstMetadata The metadata of the destination of the message.
      * @throws \Exception
-     * @return \SAML2\Message            The response we received.
+     * @return \SAML2\Message The response we received.
+     *
+     * @psalm-suppress UndefinedClass
      */
-    public function send(Message $msg, Configuration $srcMetadata, Configuration $dstMetadata = null)
+    public function send(Message $msg, Configuration $srcMetadata, Configuration $dstMetadata = null) : Message
     {
         $issuer = $msg->getIssuer();
 
@@ -39,11 +50,13 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
             ],
         ];
 
+        $container = ContainerSingleton::getInstance();
+
         // Determine if we are going to do a MutualSSL connection between the IdP and SP  - Shoaib
         if ($srcMetadata->hasValue('saml.SOAPClient.certificate')) {
             $cert = $srcMetadata->getValue('saml.SOAPClient.certificate');
             if ($cert !== false) {
-                $ctxOpts['ssl']['local_cert'] = \SimpleSAML\Utils\Config::resolveCert(
+                $ctxOpts['ssl']['local_cert'] = Config::getCertPath(
                     $srcMetadata->getString('saml.SOAPClient.certificate')
                 );
                 if ($srcMetadata->hasValue('saml.SOAPClient.privatekey_pass')) {
@@ -52,13 +65,13 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
             }
         } else {
             /* Use the SP certificate and privatekey if it is configured. */
-            $privateKey = \SimpleSAML\Utils\Crypto::loadPrivateKey($srcMetadata);
-            $publicKey = \SimpleSAML\Utils\Crypto::loadPublicKey($srcMetadata);
+            $privateKey = Crypto::loadPrivateKey($srcMetadata);
+            $publicKey = Crypto::loadPublicKey($srcMetadata);
             if ($privateKey !== null && $publicKey !== null && isset($publicKey['PEM'])) {
                 $keyCertData = $privateKey['PEM'].$publicKey['PEM'];
-                $file = \SimpleSAML\Utils\System::getTempDir().'/'.sha1($keyCertData).'.pem';
+                $file = $container->getTempDir().'/'.sha1($keyCertData).'.pem';
                 if (!file_exists($file)) {
-                    \SimpleSAML\Utils\System::writeFile($file, $keyCertData);
+                    $container->writeFile($file, $keyCertData);
                 }
                 $ctxOpts['ssl']['local_cert'] = $file;
                 if (isset($privateKey['password'])) {
@@ -79,9 +92,9 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
                     chunk_split($key['X509Certificate'], 64).
                     "-----END CERTIFICATE-----\n";
             }
-            $peerCertFile = \SimpleSAML\Utils\System::getTempDir().'/'.sha1($certData).'.pem';
+            $peerCertFile = $container->getTempDir().'/'.sha1($certData).'.pem';
             if (!file_exists($peerCertFile)) {
-                \SimpleSAML\Utils\System::writeFile($peerCertFile, $certData);
+                $container->writeFile($peerCertFile, $certData);
             }
             // create ssl context
             $ctxOpts['ssl']['verify_peer'] = true;
@@ -94,12 +107,9 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
         }
 
         $context = stream_context_create($ctxOpts);
-        if ($context === null) {
-            throw new \Exception('Unable to create SSL stream context');
-        }
 
         $options = [
-            'uri' => $issuer,
+            'uri' => $issuer->getValue(),
             'location' => $msg->getDestination(),
             'stream_context' => $context,
         ];
@@ -118,15 +128,18 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
         $request = $msg->toSignedXML();
         $request = self::START_SOAP_ENVELOPE.$request->ownerDocument->saveXML($request).self::END_SOAP_ENVELOPE;
 
-        Utils::getContainer()->debugMessage($request, 'out');
+        $container->debugMessage($request, 'out');
 
         $action = 'http://www.oasis-open.org/committees/security';
         $version = SOAP_1_1;
         $destination = $msg->getDestination();
+        if ($destination === null) {
+            throw new \Exception('Cannot send SOAP message, no destination set.');
+        }
 
         /* Perform SOAP Request over HTTP */
         $soapresponsexml = $x->__doRequest($request, $destination, $action, $version);
-        if ($soapresponsexml === null || $soapresponsexml === "") {
+        if (empty($soapresponsexml)) {
             throw new \Exception('Empty SOAP response, check peer certificate.');
         }
 
@@ -135,22 +148,28 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
         // Convert to SAML2\Message (\DOMElement)
         try {
             $dom = DOMDocumentFactory::fromString($soapresponsexml);
-        } catch (RuntimeException $e) {
-            throw new \Exception('Not a SOAP response.', 0, $e);
+        } catch (InvalidArgumentException | UnparseableXmlException | RuntimeException $e) {
+            throw new \Exception($e->getMessage(), 0, $e);
+        }
+        $soapresponse = Utils::xpQuery($dom->firstChild, '/soap-env:Envelope/soap-env:Body/*[1]');
+        if (empty($soapresponse)) {
+            throw new \Exception('Not a SOAP response', 0);
         }
+        $container->debugMessage($dom->documentElement, 'in');
 
         $soapfault = $this->getSOAPFault($dom);
         if (isset($soapfault)) {
             throw new \Exception($soapfault);
         }
         //Extract the message from the response
+        /** @var \DOMElement[] $samlresponse */
         $samlresponse = Utils::xpQuery($dom->firstChild, '/soap-env:Envelope/soap-env:Body/*[1]');
         $samlresponse = Message::fromXML($samlresponse[0]);
 
         /* Add validator to message which uses the SSL context. */
         self::addSSLValidator($samlresponse, $context);
 
-        Utils::getContainer()->getLogger()->debug("Valid ArtifactResponse received from IdP");
+        $container->getLogger()->debug("Valid ArtifactResponse received from IdP");
 
         return $samlresponse;
     }
@@ -159,55 +178,54 @@ public function send(Message $msg, Configuration $srcMetadata, Configuration $ds
     /**
      * Add a signature validator based on a SSL context.
      *
-     * @param \SAML2\Message $msg     The message we should add a validator to.
-     * @param resource      $context The stream context.
+     * @param \SAML2\Message $msg The message we should add a validator to.
+     * @param resource $context The stream context.
      * @return void
      */
-    private static function addSSLValidator(Message $msg, $context)
+    private static function addSSLValidator(Message $msg, $context) : void
     {
         $options = stream_context_get_options($context);
         if (!isset($options['ssl']['peer_certificate'])) {
             return;
         }
 
-        //$out = '';
-        //openssl_x509_export($options['ssl']['peer_certificate'], $out);
-
+        $container = ContainerSingleton::getInstance();
         $key = openssl_pkey_get_public($options['ssl']['peer_certificate']);
         if ($key === false) {
-            Utils::getContainer()->getLogger()->warning('Unable to get public key from peer certificate.');
+            $container->getLogger()->warning('Unable to get public key from peer certificate.');
 
             return;
         }
 
         $keyInfo = openssl_pkey_get_details($key);
         if ($keyInfo === false) {
-            Utils::getContainer()->getLogger()->warning('Unable to get key details from public key.');
+            $container->getLogger()->warning('Unable to get key details from public key.');
 
             return;
         }
 
         if (!isset($keyInfo['key'])) {
-            Utils::getContainer()->getLogger()->warning('Missing key in public key details.');
+            $container->getLogger()->warning('Missing key in public key details.');
 
             return;
         }
 
-        $msg->addValidator(['\SAML2\SOAPClient', 'validateSSL'], $keyInfo['key']);
+        $msg->addValidator([SOAPClient::class, 'validateSSL'], $keyInfo['key']);
     }
 
 
     /**
      * Validate a SOAP message against the certificate on the SSL connection.
      *
-     * @param string         $data The public key that was used on the connection.
-     * @param XMLSecurityKey $key  The key we should validate the certificate against.
+     * @param string $data The public key that was used on the connection.
+     * @param XMLSecurityKey $key The key we should validate the certificate against.
      * @throws \Exception
+     * @return void
      */
-    public static function validateSSL($data, XMLSecurityKey $key)
+    public static function validateSSL(string $data, XMLSecurityKey $key) : void
     {
-        Assert::string($data);
-
+        $container = ContainerSingleton::getInstance();
+        /** @psalm-suppress PossiblyNullArgument */
         $keyInfo = openssl_pkey_get_details($key->key);
         if ($keyInfo === false) {
             throw new \Exception('Unable to get key details from XMLSecurityKey.');
@@ -218,23 +236,24 @@ public static function validateSSL($data, XMLSecurityKey $key)
         }
 
         if ($keyInfo['key'] !== $data) {
-            Utils::getContainer()->getLogger()->debug('Key on SSL connection did not match key we validated against.');
+            $container->getLogger()->debug('Key on SSL connection did not match key we validated against.');
 
             return;
         }
 
-        Utils::getContainer()->getLogger()->debug('Message validated based on SSL certificate.');
+        $container->getLogger()->debug('Message validated based on SSL certificate.');
     }
 
 
-    /*
+    /**
      * Extracts the SOAP Fault from SOAP message
      *
-     * @param $soapmessage Soap response needs to be type DOMDocument
+     * @param \DOMDocument $soapMessage Soap response needs to be type DOMDocument
      * @return string|null $soapfaultstring
      */
-    private function getSOAPFault($soapMessage)
+    private function getSOAPFault(DOMDocument $soapMessage) : ?string
     {
+        /** @psalm-suppress PossiblyNullArgument */
         $soapFault = Utils::xpQuery($soapMessage->firstChild, '/soap-env:Envelope/soap-env:Body/soap-env:Fault');
 
         if (empty($soapFault)) {
@@ -242,6 +261,7 @@ private function getSOAPFault($soapMessage)
 
             return null;
         }
+        /** @var \DOMNode $soapFaultElement */
         $soapFaultElement = $soapFault[0];
         // There is a fault element but we haven't found out what the fault string is
         $soapFaultString = "Unknown fault string found";
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/AbstractChainedValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/AbstractChainedValidator.php
index 1ae888db68..0481d77017 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/AbstractChainedValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/AbstractChainedValidator.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use Psr\Log\LoggerInterface;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+
 use SAML2\SignedElement;
 
 abstract class AbstractChainedValidator implements ChainedValidator
@@ -29,14 +32,16 @@ public function __construct(LoggerInterface $logger)
      * BC compatible version of the signature check
      *
      * @param \SAML2\SignedElement      $element
-     * @param \SAML2\Certificate\X509[] $pemCandidates
+     * @param \SAML2\Utilities\ArrayCollection $pemCandidates
      *
      * @throws \Exception
      *
      * @return bool
      */
-    protected function validateElementWithKeys(SignedElement $element, $pemCandidates)
-    {
+    protected function validateElementWithKeys(
+        SignedElement $element,
+        \SAML2\Utilities\ArrayCollection $pemCandidates
+    ) : bool {
         $lastException = null;
         foreach ($pemCandidates as $index => $candidateKey) {
             $key = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, ['type' => 'public']);
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/ChainedValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/ChainedValidator.php
index 4058de13ef..e008483035 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/ChainedValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/ChainedValidator.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use SAML2\Configuration\CertificateProvider;
@@ -23,5 +25,5 @@ interface ChainedValidator extends ValidatorInterface
     public function canValidate(
         SignedElement $signedElement,
         CertificateProvider $configuration
-    );
+    ) : bool;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/FingerprintValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/FingerprintValidator.php
deleted file mode 100644
index 10d5f1df64..0000000000
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/FingerprintValidator.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-namespace SAML2\Signature;
-
-use Psr\Log\LoggerInterface;
-use SAML2\Certificate\FingerprintLoader;
-use SAML2\Certificate\X509;
-use SAML2\Configuration\CertificateProvider;
-use SAML2\SignedElement;
-
-/**
- * Validates the signature based on the fingerprint of the certificate
- *
- * @deprecated Please use full certificates instead.
- */
-class FingerprintValidator extends AbstractChainedValidator
-{
-    /**
-     * @var array
-     */
-    private $certificates;
-
-    /**
-     * @var \SAML2\Certificate\FingerprintLoader
-     */
-    private $fingerprintLoader;
-
-
-    /**
-     * @param LoggerInterface $logger
-     * @param FingerprintLoader $fingerprintLoader
-     * @deprecated Please use full certificates instead.
-     */
-    public function __construct(
-        LoggerInterface $logger,
-        FingerprintLoader $fingerprintLoader
-    ) {
-        $this->fingerprintLoader = $fingerprintLoader;
-        parent::__construct($logger);
-    }
-
-
-    /**
-     * @param SignedElement $signedElement
-     * @param CertificateProvider $configuration
-     *
-     * @return bool
-     */
-    public function canValidate(
-        SignedElement $signedElement,
-        CertificateProvider $configuration
-    ) {
-        if ($configuration->getCertificateFingerprints() === null) {
-            $this->logger->debug(
-                'Configuration does not have "certFingerprint" value, cannot validate signature with fingerprint'
-            );
-            return false;
-        }
-
-        // use internal cache to prevent doing certificate extraction twice.
-        $this->certificates = $signedElement->getCertificates();
-        if (empty($this->certificates)) {
-            $this->logger->debug(
-                'Signed element does not have certificates, cannot validate signature with fingerprint'
-            );
-            return false;
-        }
-
-        return true;
-    }
-
-
-    /**
-     * @param \SAML2\SignedElement             $signedElement
-     * @param \SAML2\Configuration\CertificateProvider $configuration
-     *
-     * @return bool
-     */
-    public function hasValidSignature(
-        SignedElement $signedElement,
-        CertificateProvider $configuration
-    ) {
-        $this->certificates = array_map(function ($certificate) {
-            return X509::createFromCertificateData($certificate);
-        }, $this->certificates);
-
-        $fingerprintCollection = $this->fingerprintLoader->loadFromConfiguration($configuration);
-
-        $pemCandidates = [];
-        foreach ($this->certificates as $certificate) {
-            /** @var \SAML2\Certificate\X509 $certificate */
-            $certificateFingerprint = $certificate->getFingerprint();
-            if ($fingerprintCollection->contains($certificateFingerprint)) {
-                $pemCandidates[] = $certificate;
-            }
-        }
-
-        if (empty($pemCandidates)) {
-            $this->logger->debug(
-                'Unable to match a certificate of the SignedElement matching a configured fingerprint'
-            );
-
-            return false;
-        }
-
-        return $this->validateElementWithKeys($signedElement, $pemCandidates);
-    }
-}
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/MissingConfigurationException.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/MissingConfigurationException.php
index 8014b0b322..c9307caa62 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/MissingConfigurationException.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/MissingConfigurationException.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use SAML2\Exception\Throwable;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/PublicKeyValidator.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/PublicKeyValidator.php
index 0e13feba95..038185b494 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/PublicKeyValidator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/PublicKeyValidator.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use Psr\Log\LoggerInterface;
+
 use SAML2\Certificate\Key;
 use SAML2\Certificate\KeyLoader;
 use SAML2\Certificate\X509;
@@ -37,7 +40,7 @@ public function __construct(LoggerInterface $logger, KeyLoader $keyLoader)
 
 
     /**
-     * @param \SAML2\SignedElement             $signedElement
+     * @param \SAML2\SignedElement $signedElement
      * @param \SAML2\Configuration\CertificateProvider $configuration
      *
      * @return bool
@@ -45,7 +48,7 @@ public function __construct(LoggerInterface $logger, KeyLoader $keyLoader)
     public function canValidate(
         SignedElement $signedElement,
         CertificateProvider $configuration
-    ) {
+    ) : bool {
         $this->configuredKeys = $this->keyLoader->extractPublicKeys($configuration);
 
         return !!count($this->configuredKeys);
@@ -53,7 +56,7 @@ public function canValidate(
 
 
     /**
-     * @param \SAML2\SignedElement             $signedElement
+     * @param \SAML2\SignedElement $signedElement
      * @param \SAML2\Configuration\CertificateProvider $configuration
      *
      * @return bool
@@ -61,7 +64,7 @@ public function canValidate(
     public function hasValidSignature(
         SignedElement $signedElement,
         CertificateProvider $configuration
-    ) {
+    ) : bool {
         $logger = $this->logger;
         $pemCandidates = $this->configuredKeys->filter(function (Key $key) use ($logger) {
             if (!$key instanceof X509) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/Validator.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/Validator.php
index 361e033d22..1d416ceed8 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/Validator.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/Validator.php
@@ -1,9 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use Psr\Log\LoggerInterface;
-use SAML2\Certificate\FingerprintLoader;
+
 use SAML2\Certificate\KeyLoader;
 use SAML2\Configuration\CertificateProvider;
 use SAML2\SignedElement;
@@ -32,19 +34,19 @@ public function __construct(LoggerInterface $logger)
 
     /**
      * @param SignedElement $signedElement
-     * @oaram CertificateProvider $configuration
+     * @param CertificateProvider $configuration
+     *
      * @return bool
      */
     public function hasValidSignature(
         SignedElement $signedElement,
         CertificateProvider $configuration
-    ) {
+    ) : bool {
         // should be DI
         $validator = new ValidatorChain(
             $this->logger,
             [
-                new PublicKeyValidator($this->logger, new KeyLoader()),
-                new FingerprintValidator($this->logger, new FingerprintLoader())
+                new PublicKeyValidator($this->logger, new KeyLoader())
             ]
         );
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorChain.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorChain.php
index 8cb4ec7f25..4987c52012 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorChain.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorChain.php
@@ -1,8 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use Psr\Log\LoggerInterface;
+
 use SAML2\Configuration\CertificateProvider;
 use SAML2\SignedElement;
 
@@ -26,7 +29,7 @@ class ValidatorChain implements ValidatorInterface
 
 
     /**
-     * @param \Psr\Log\LoggerInterface           $logger
+     * @param \Psr\Log\LoggerInterface $logger
      * @param \SAML2\Signature\ChainedValidator[] $validators
      */
     public function __construct(LoggerInterface $logger, array $validators)
@@ -44,14 +47,14 @@ public function __construct(LoggerInterface $logger, array $validators)
      * @param \SAML2\Signature\ChainedValidator $validator
      * @return void
      */
-    public function appendValidator(ChainedValidator $validator)
+    public function appendValidator(ChainedValidator $validator) : void
     {
         $this->validators[] = $validator;
     }
 
 
     /**
-     * @param \SAML2\SignedElement             $signedElement
+     * @param \SAML2\SignedElement $signedElement
      * @param \SAML2\Configuration\CertificateProvider $configuration
      *
      * @return bool
@@ -59,7 +62,7 @@ public function appendValidator(ChainedValidator $validator)
     public function hasValidSignature(
         SignedElement $signedElement,
         CertificateProvider $configuration
-    ) {
+    ) : bool {
         foreach ($this->validators as $validator) {
             if ($validator->canValidate($signedElement, $configuration)) {
                 $this->logger->debug(sprintf(
@@ -77,7 +80,7 @@ public function hasValidSignature(
         }
 
         throw new MissingConfigurationException(sprintf(
-            'No certificates or fingerprints have been configured%s',
+            'No certificates have been configured%s',
             $configuration->has('entityid') ? ' for "'.$configuration->get('entityid').'"' : ''
         ));
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorInterface.php b/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorInterface.php
index 47dd4e5a9a..6e8552c549 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorInterface.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Signature/ValidatorInterface.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Signature;
 
 use SAML2\Configuration\CertificateProvider;
@@ -18,5 +20,5 @@ interface ValidatorInterface
     public function hasValidSignature(
         SignedElement $signedElement,
         CertificateProvider $configuration
-    );
+    ) : bool;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/SignedElement.php b/vendor/simplesamlphp/saml2/src/SAML2/SignedElement.php
index 261b7192c8..b7a683584b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/SignedElement.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/SignedElement.php
@@ -1,16 +1,35 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
 
 /**
- * Interface to a SAML 2 element which may be signed.
+ * Abstract class to a SAML 2 element which may be signed.
  *
  * @package SimpleSAMLphp
  */
-interface SignedElement
+abstract class SignedElement
 {
+    /**
+     * The private key we should use to sign the message.
+     *
+     * The private key can be null, in which case the message is sent unsigned.
+     *
+     * @var XMLSecurityKey|null
+     */
+    protected $signatureKey;
+
+    /**
+     * List of certificates that should be included in the message.
+     *
+     * @var array
+     */
+    protected $certificates = [];
+
+
     /**
      * Validate this element against a public key.
      *
@@ -18,9 +37,9 @@ interface SignedElement
      * but cannot be verified, an exception will be thrown.
      *
      * @param  XMLSecurityKey $key The key we should check against.
-     * @return boolean        true if successful, false if we don't have a signature that can be verified.
+     * @return bool True if successful, false if we don't have a signature that can be verified.
      */
-    public function validate(XMLSecurityKey $key);
+    abstract public function validate(XMLSecurityKey $key) : bool;
 
 
     /**
@@ -30,31 +49,44 @@ public function validate(XMLSecurityKey $key);
      * @param array $certificates An array of certificates.
      * @return void
      */
-    public function setCertificates(array $certificates);
+    public function setCertificates(array $certificates) : void
+    {
+        $this->certificates = $certificates;
+    }
 
 
     /**
-     * Retrieve the certificates that are included in the element (if any).
+     * Retrieve the certificates that are included in the message.
      *
-     * @return array An array of certificates.
+     * @return array An array of certificates
      */
-    public function getCertificates();
+    public function getCertificates() : array
+    {
+        return $this->certificates;
+    }
 
 
     /**
-     * Retrieve the private key we should use to sign the element.
+     * Retrieve the private key we should use to sign the message.
      *
-     * @return XMLSecurityKey|null The key, or NULL if no key is specified.
+     * @return XMLSecurityKey|null The key, or NULL if no key is specified
      */
-    public function getSignatureKey();
+    public function getSignatureKey() : ?XMLSecurityKey
+    {
+        return $this->signatureKey;
+    }
 
 
     /**
-     * Set the private key we should use to sign the element.
+     * Set the private key we should use to sign the message.
+     *
      * If the key is null, the message will be sent unsigned.
      *
      * @param XMLSecurityKey|null $signatureKey
      * @return void
      */
-    public function setSignatureKey(XMLSecurityKey $signatureKey = null);
+    public function setSignatureKey(XMLSecurityKey $signatureKey = null) : void
+    {
+        $this->signatureKey = $signatureKey;
+    }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/SignedElementHelper.php b/vendor/simplesamlphp/saml2/src/SAML2/SignedElementHelper.php
index d6f8c02a0e..47e87d97fa 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/SignedElementHelper.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/SignedElementHelper.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
+use DOMNode;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
 
 /**
@@ -11,30 +15,28 @@
  *
  * @package SimpleSAMLphp
  */
-class SignedElementHelper implements SignedElement
+class SignedElementHelper extends SignedElement
 {
     /**
-     * The private key we should use to sign the message.
-     *
-     * The private key can be null, in which case the message is sent unsigned.
+     * Available methods for validating this message.
      *
-     * @var XMLSecurityKey|null
+     * @var array
      */
-    private $signatureKey;
+    private $validators;
 
     /**
-     * List of certificates that should be included in the message.
+     * How long this element is valid, as a unix timestamp.
      *
-     * @var array
+     * @var int|null
      */
-    private $certificates;
+    public $validUntil;
 
     /**
-     * Available methods for validating this message.
+     * The length of time this element can be cached, as string.
      *
-     * @var array
+     * @var string|null
      */
-    private $validators;
+    public $cacheDuration;
 
 
     /**
@@ -42,7 +44,7 @@ class SignedElementHelper implements SignedElement
      *
      * @param \DOMElement|null $xml The XML element which may be signed.
      */
-    protected function __construct(\DOMElement $xml = null)
+    protected function __construct(DOMElement $xml = null)
     {
         $this->certificates = [];
         $this->validators = [];
@@ -55,10 +57,10 @@ protected function __construct(\DOMElement $xml = null)
         try {
             $sig = Utils::validateElement($xml);
 
-            if ($sig !== false) {
+            if ($sig) {
                 $this->certificates = $sig['Certificates'];
                 $this->validators[] = [
-                    'Function' => ['\SAML2\Utils', 'validateSignature'],
+                    'Function' => [Utils::class, 'validateSignature'],
                     'Data' => $sig,
                 ];
             }
@@ -73,11 +75,11 @@ protected function __construct(\DOMElement $xml = null)
      *
      * This function is used for custom validation extensions
      *
-     * @param callback $function The function which should be called.
-     * @param mixed    $data     The data that should be included as the first parameter to the function.
+     * @param callable $function The function which should be called.
+     * @param mixed $data The data that should be included as the first parameter to the function.
      * @return void
      */
-    public function addValidator(callable $function, $data)
+    public function addValidator(callable $function, $data) : void
     {
         $this->validators[] = [
             'Function' => $function,
@@ -94,10 +96,11 @@ public function addValidator(callable $function, $data)
      * validation fails.
      *
      * @param  XMLSecurityKey $key The key we should check against.
+     * @return bool True on success, false when we don't have a signature.
      * @throws \Exception
-     * @return boolean        true on success, false when we don't have a signature.
+     * @return bool        true on success, false when we don't have a signature.
      */
-    public function validate(XMLSecurityKey $key)
+    public function validate(XMLSecurityKey $key) : bool
     {
         if (count($this->validators) === 0) {
             return false;
@@ -129,7 +132,7 @@ public function validate(XMLSecurityKey $key)
      *
      * @return XMLSecurityKey|null The key, or NULL if no key is specified.
      */
-    public function getSignatureKey()
+    public function getSignatureKey() : ?XMLSecurityKey
     {
         return $this->signatureKey;
     }
@@ -143,7 +146,7 @@ public function getSignatureKey()
      * @param XMLSecurityKey|null $signatureKey
      * @return void
      */
-    public function setSignatureKey(XMLSecurityKey $signatureKey = null)
+    public function setSignatureKey(XMLSecurityKey $signatureKey = null) : void
     {
         $this->signatureKey = $signatureKey;
     }
@@ -157,7 +160,7 @@ public function setSignatureKey(XMLSecurityKey $signatureKey = null)
      * @param array $certificates An array of certificates.
      * @return void
      */
-    public function setCertificates(array $certificates)
+    public function setCertificates(array $certificates) : void
     {
         $this->certificates = $certificates;
     }
@@ -168,7 +171,7 @@ public function setCertificates(array $certificates)
      *
      * @return array An array of certificates.
      */
-    public function getCertificates()
+    public function getCertificates() : array
     {
         return $this->certificates;
     }
@@ -179,7 +182,7 @@ public function getCertificates()
      *
      * @return array Array with certificates.
      */
-    public function getValidatingCertificates()
+    public function getValidatingCertificates() : array
     {
         $ret = [];
         foreach ($this->certificates as $cert) {
@@ -206,14 +209,59 @@ public function getValidatingCertificates()
     }
 
 
+    /**
+     * Collect the value of the validUntil property.
+     *
+     * @return int|null
+     */
+    public function getValidUntil() : ?int
+    {
+        return $this->validUntil;
+    }
+
+    /**
+     * Set the value of the validUntil property.
+     *
+     * @param int|null $validUntil
+     * @return void
+     */
+    public function setValidUntil(int $validUntil = null) : void
+    {
+        $this->validUntil = $validUntil;
+    }
+
+
+    /**
+     * Collect the value of the cacheDuration property.
+     *
+     * @return string|null
+     */
+    public function getCacheDuration() : ?string
+    {
+        return $this->cacheDuration;
+    }
+
+
+    /**
+     * Set the value of the cacheDuration property.
+     *
+     * @param string|null $cacheDuration
+     * @return void
+     */
+    public function setCacheDuration(string $cacheDuration = null) : void
+    {
+        $this->cacheDuration = $cacheDuration;
+    }
+
+
     /**
      * Sign the given XML element.
      *
-     * @param \DOMElement      $root         The element we should sign.
-     * @param \DOMElement|null $insertBefore The element we should insert the signature node before.
+     * @param \DOMElement $root The element we should sign.
+     * @param \DOMNode|null $insertBefore The element we should insert the signature node before.
      * @return \DOMElement|null
      */
-    protected function signElement(\DOMElement $root, \DOMElement $insertBefore = null)
+    protected function signElement(DOMElement $root, DOMNode $insertBefore = null) : ?DOMElement
     {
         if ($this->signatureKey === null) {
             /* We cannot sign this element. */
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/StatusResponse.php b/vendor/simplesamlphp/saml2/src/SAML2/StatusResponse.php
index 44b6712c36..885bbc4b33 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/StatusResponse.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/StatusResponse.php
@@ -1,7 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
 use Webmozart\Assert\Assert;
 
 /**
@@ -45,11 +48,11 @@ abstract class StatusResponse extends Message
     /**
      * Constructor for SAML 2 response messages.
      *
-     * @param string          $tagName The tag name of the root element.
-     * @param \DOMElement|null $xml     The input message.
+     * @param string $tagName The tag name of the root element.
+     * @param \DOMElement|null $xml The input message.
      * @throws \Exception
      */
-    protected function __construct($tagName, \DOMElement $xml = null)
+    protected function __construct(string $tagName, DOMElement $xml = null)
     {
         parent::__construct($tagName, $xml);
 
@@ -67,26 +70,27 @@ protected function __construct($tagName, \DOMElement $xml = null)
             $this->inResponseTo = $xml->getAttribute('InResponseTo');
         }
 
+        /** @var \DOMElement[] $status */
         $status = Utils::xpQuery($xml, './saml_protocol:Status');
         if (empty($status)) {
             throw new \Exception('Missing status code on response.');
         }
-        $status = $status[0];
 
-        $statusCode = Utils::xpQuery($status, './saml_protocol:StatusCode');
+        /** @var \DOMElement[] $statusCode */
+        $statusCode = Utils::xpQuery($status[0], './saml_protocol:StatusCode');
         if (empty($statusCode)) {
             throw new \Exception('Missing status code in status element.');
         }
-        $statusCode = $statusCode[0];
-
-        $this->status['Code'] = $statusCode->getAttribute('Value');
+        $this->status['Code'] = $statusCode[0]->getAttribute('Value');
 
-        $subCode = Utils::xpQuery($statusCode, './saml_protocol:StatusCode');
+        /** @var \DOMElement[] $subCode */
+        $subCode = Utils::xpQuery($statusCode[0], './saml_protocol:StatusCode');
         if (!empty($subCode)) {
             $this->status['SubCode'] = $subCode[0]->getAttribute('Value');
         }
 
-        $message = Utils::xpQuery($status, './saml_protocol:StatusMessage');
+        /** @var \DOMElement[] $message */
+        $message = Utils::xpQuery($status[0], './saml_protocol:StatusMessage');
         if (!empty($message)) {
             $this->status['Message'] = trim($message[0]->textContent);
         }
@@ -96,17 +100,13 @@ protected function __construct($tagName, \DOMElement $xml = null)
     /**
      * Determine whether this is a successful response.
      *
-     * @return boolean true if the status code is success, false if not.
+     * @return bool true if the status code is success, false if not.
      */
-    public function isSuccess()
+    public function isSuccess() : bool
     {
         Assert::keyExists($this->status, "Code");
 
-        if ($this->status['Code'] === Constants::STATUS_SUCCESS) {
-            return true;
-        }
-
-        return false;
+        return $this->status['Code'] === Constants::STATUS_SUCCESS;
     }
 
 
@@ -115,7 +115,7 @@ public function isSuccess()
      *
      * @return string|null The ID of the request.
      */
-    public function getInResponseTo()
+    public function getInResponseTo() : ?string
     {
         return $this->inResponseTo;
     }
@@ -127,10 +127,8 @@ public function getInResponseTo()
      * @param string|null $inResponseTo The ID of the request.
      * @return void
      */
-    public function setInResponseTo($inResponseTo)
+    public function setInResponseTo(string $inResponseTo = null) : void
     {
-        Assert::nullOrString($inResponseTo);
-
         $this->inResponseTo = $inResponseTo;
     }
 
@@ -140,7 +138,7 @@ public function setInResponseTo($inResponseTo)
      *
      * @return array The status code.
      */
-    public function getStatus()
+    public function getStatus() : array
     {
         return $this->status;
     }
@@ -152,9 +150,9 @@ public function getStatus()
      * @param array $status The status code.
      * @return void
      */
-    public function setStatus(array $status)
+    public function setStatus(array $status) : void
     {
-        Assert::keyExists($status, "Code");
+        Assert::keyExists($status, "Code", 'Cannot set status without a Code key in the array.');
 
         $this->status = $status;
         if (!array_key_exists('SubCode', $status)) {
@@ -171,7 +169,7 @@ public function setStatus(array $status)
      *
      * @return \DOMElement This status response.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
         $root = parent::toUnsignedXML();
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/SubjectQuery.php b/vendor/simplesamlphp/saml2/src/SAML2/SubjectQuery.php
index ff4f50bf14..7d025d94e7 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/SubjectQuery.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/SubjectQuery.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMElement;
+
 use SAML2\XML\saml\NameID;
-use Webmozart\Assert\Assert;
 
 /**
  * Base class for SAML 2 subject query messages.
@@ -21,18 +24,18 @@ abstract class SubjectQuery extends Request
     /**
      * The NameId of the subject in the query.
      *
-     * @var \SAML2\XML\saml\NameID
+     * @var \SAML2\XML\saml\NameID|null
      */
-    private $nameId;
+    private $nameId = null;
 
 
     /**
      * Constructor for SAML 2 subject query messages.
      *
-     * @param string          $tagName The tag name of the root element.
-     * @param \DOMElement|null $xml     The input message.
+     * @param string $tagName The tag name of the root element.
+     * @param \DOMElement|null $xml The input message.
      */
-    protected function __construct($tagName, \DOMElement $xml = null)
+    protected function __construct(string $tagName, DOMElement $xml = null)
     {
         parent::__construct($tagName, $xml);
 
@@ -51,25 +54,24 @@ protected function __construct($tagName, \DOMElement $xml = null)
      * @throws \Exception
      * @return void
      */
-    private function parseSubject(\DOMElement $xml)
+    private function parseSubject(\DOMElement $xml) : void
     {
+        /** @var \DOMElement[] $subject */
         $subject = Utils::xpQuery($xml, './saml_assertion:Subject');
         if (empty($subject)) {
-            /* No Subject node. */
             throw new \Exception('Missing subject in subject query.');
         } elseif (count($subject) > 1) {
             throw new \Exception('More than one <saml:Subject> in subject query.');
         }
-        $subject = $subject[0];
 
-        $nameId = Utils::xpQuery($subject, './saml_assertion:NameID');
+        /** @var \DOMElement[] $nameId */
+        $nameId = Utils::xpQuery($subject[0], './saml_assertion:NameID');
         if (empty($nameId)) {
             throw new \Exception('Missing <saml:NameID> in <saml:Subject>.');
         } elseif (count($nameId) > 1) {
             throw new \Exception('More than one <saml:NameID> in <saml:Subject>.');
         }
-        $nameId = $nameId[0];
-        $this->nameId = new NameID($nameId);
+        $this->nameId = new NameID($nameId[0]);
     }
 
 
@@ -78,7 +80,7 @@ private function parseSubject(\DOMElement $xml)
      *
      * @return \SAML2\XML\saml\NameID|null The name identifier of the assertion.
      */
-    public function getNameId()
+    public function getNameId() : ?NameID
     {
         return $this->nameId;
     }
@@ -87,16 +89,11 @@ public function getNameId()
     /**
      * Set the NameId of the subject in the query.
      *
-     * @param \SAML2\XML\saml\NameID|array|null $nameId The name identifier of the assertion.
+     * @param \SAML2\XML\saml\NameID|null $nameId The name identifier of the assertion.
      * @return void
      */
-    public function setNameId($nameId)
+    public function setNameId(NameID $nameId = null) : void
     {
-        Assert::true(is_array($nameId) || is_null($nameId) || $nameId instanceof NameID);
-
-        if (is_array($nameId)) {
-            $nameId = NameID::fromArray($nameId);
-        }
         $this->nameId = $nameId;
     }
 
@@ -106,8 +103,11 @@ public function setNameId($nameId)
      *
      * @return \DOMElement This subject query.
      */
-    public function toUnsignedXML()
+    public function toUnsignedXML() : DOMElement
     {
+        if ($this->nameId === null) {
+            throw new \Exception('Cannot convert SubjectQuery to XML without a NameID set.');
+        }
         $root = parent::toUnsignedXML();
 
         $subject = $root->ownerDocument->createElementNS(Constants::NS_SAML, 'saml:Subject');
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/ArrayCollection.php b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/ArrayCollection.php
index 68e98b093f..a6252f5aec 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/ArrayCollection.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/ArrayCollection.php
@@ -1,13 +1,16 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Utilities;
 
+use ArrayIterator;
+use Closure;
+
 use SAML2\Exception\RuntimeException;
 
 /**
  * Simple Array implementation of Collection.
- *
- * @SuppressWarnings(PHPMD.TooManyMethods) - it just has a large api.
  */
 class ArrayCollection implements Collection
 {
@@ -18,7 +21,9 @@ class ArrayCollection implements Collection
 
 
     /**
-     * @return void
+     * ArrayCollection constructor.
+     *
+     * @param array $elements
      */
     public function __construct(array $elements = [])
     {
@@ -27,15 +32,19 @@ public function __construct(array $elements = [])
 
 
     /**
+     * @param mixed $element
+     *
      * @return void
      */
-    public function add($element)
+    public function add($element) : void
     {
         $this->elements[] = $element;
     }
 
 
     /**
+     * @param mixed $key
+     *
      * @return mixed|null
      */
     public function get($key)
@@ -45,44 +54,45 @@ public function get($key)
 
 
     /**
+     * @param \Closure $f
+     *
      * @return ArrayCollection
      */
-    public function filter(\Closure $f)
+    public function filter(Closure $f) : Collection
     {
         return new self(array_filter($this->elements, $f));
     }
 
 
     /**
+     * @param mixed $key
+     * @param mixed $value
      * @return void
      */
-    public function set($key, $value)
+    public function set($key, $value) : void
     {
         $this->elements[$key] = $value;
     }
 
 
     /**
-     * @return mixed
+     * @param mixed $element
+     *
+     * @return void
      */
-    public function remove($element)
+    public function remove($element) : void
     {
         $key = array_search($element, $this->elements);
-
         if ($key === false) {
-            return false;
+            return;
         }
-
-        $removed = $this->elements[$key];
         unset($this->elements[$key]);
-
-        return $removed;
     }
 
 
     /**
      * @throws RuntimeException
-     * @return mixed
+     * @return bool|mixed
      */
     public function getOnlyElement()
     {
@@ -99,7 +109,7 @@ public function getOnlyElement()
 
 
     /**
-     * @return mixed
+     * @return bool|mixed
      */
     public function first()
     {
@@ -108,7 +118,7 @@ public function first()
 
 
     /**
-     * @return mixed
+     * @return bool|mixed
      */
     public function last()
     {
@@ -117,9 +127,11 @@ public function last()
 
 
     /**
+     * @param \Closure $function
+     *
      * @return ArrayCollection
      */
-    public function map(\Closure $function)
+    public function map(Closure $function) : ArrayCollection
     {
         return new self(array_map($function, $this->elements));
     }
@@ -128,7 +140,7 @@ public function map(\Closure $function)
     /**
      * @return int
      */
-    public function count()
+    public function count() : int
     {
         return count($this->elements);
     }
@@ -137,17 +149,18 @@ public function count()
     /**
      * @return \ArrayIterator
      */
-    public function getIterator()
+    public function getIterator() : ArrayIterator
     {
-        return new \ArrayIterator($this->elements);
+        return new ArrayIterator($this->elements);
     }
 
 
     /**
      * @param mixed $offset
+     *
      * @return bool
      */
-    public function offsetExists($offset)
+    public function offsetExists($offset) : bool
     {
         return isset($this->elements[$offset]);
     }
@@ -155,6 +168,7 @@ public function offsetExists($offset)
 
     /**
      * @param mixed $offset
+     *
      * @return mixed
      */
     public function offsetGet($offset)
@@ -168,17 +182,17 @@ public function offsetGet($offset)
      * @param mixed $value
      * @return void
      */
-    public function offsetSet($offset, $value)
+    public function offsetSet($offset, $value) : void
     {
         $this->elements[$offset] = $value;
     }
 
 
     /**
-     * @param mixed
+     * @param $offset
      * @return void
      */
-    public function offsetUnset($offset)
+    public function offsetUnset($offset) : void
     {
         unset($this->elements[$offset]);
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Certificate.php b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Certificate.php
index 7c5f4f2ebb..9a338fd81e 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Certificate.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Certificate.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Utilities;
 
 /**
@@ -12,13 +14,12 @@ class Certificate
      */
     const CERTIFICATE_PATTERN = '/^-----BEGIN CERTIFICATE-----([^-]*)^-----END CERTIFICATE-----/m';
 
-
     /**
-     * @param  $certificate
+     * @param string $certificate
      *
      * @return bool
      */
-    public static function hasValidStructure($certificate)
+    public static function hasValidStructure(string $certificate) : bool
     {
         return !!preg_match(self::CERTIFICATE_PATTERN, $certificate);
     }
@@ -29,7 +30,7 @@ public static function hasValidStructure($certificate)
      *
      * @return string
      */
-    public static function convertToCertificate($X509CertificateContents)
+    public static function convertToCertificate(string $X509CertificateContents) : string
     {
         return "-----BEGIN CERTIFICATE-----\n"
                 . chunk_split($X509CertificateContents, 64)
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Collection.php b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Collection.php
index 9a4e63339e..7b176503ea 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Collection.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Collection.php
@@ -1,17 +1,21 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Utilities;
 
+use Closure;
+
 interface Collection extends \ArrayAccess, \Countable, \IteratorAggregate
 {
     /**
      * Add an element to the collection
      *
-     * @param $element
+     * @param mixed $element
      *
-     * @return $this|\SAML2\Utilities\Collection
+     * @return void
      */
-    public function add($element);
+    public function add($element) : void;
 
 
     /**
@@ -41,21 +45,22 @@ public function last();
 
 
     /**
-     * Applies the given function to each element in the collection and returns a new collection with the elements returned by the function.
+     * Applies the given function to each element in the collection and returns a new collection with the elements
+     * returned by the function.
      *
-     * @param callable $function
+     * @param \Closure $function
      *
      * @return mixed
      */
-    public function map(\Closure $function);
+    public function map(Closure $function);
 
 
     /**
-     * @param callable $filterFunction
+     * @param \Closure $filterFunction
      *
      * @return \SAML2\Utilities\Collection
      */
-    public function filter(\Closure $filterFunction);
+    public function filter(Closure $filterFunction): Collection;
 
 
     /**
@@ -69,10 +74,10 @@ public function get($key);
 
 
     /**
-     * @param $element
+     * @param mixed $element
      * @return void
      */
-    public function remove($element);
+    public function remove($element) : void;
 
 
     /**
@@ -82,5 +87,5 @@ public function remove($element);
      * @param mixed $value
      * @return void
      */
-    public function set($key, $value);
+    public function set($key, $value) : void;
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/File.php b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/File.php
index 6f782081b5..cfb4ac3d96 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/File.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/File.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Utilities;
 
 use SAML2\Exception\InvalidArgumentException;
@@ -15,12 +17,8 @@ class File
      *
      * @return string
      */
-    public static function getFileContents($file)
+    public static function getFileContents(string $file) : string
     {
-        if (!is_string($file)) {
-            throw InvalidArgumentException::invalidType('string', $file);
-        }
-
         if (!is_readable($file)) {
             throw new RuntimeException(sprintf(
                 'File "%s" does not exist or is not readable',
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Temporal.php b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Temporal.php
index 8449d2eca9..ab652439d8 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Temporal.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Utilities/Temporal.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\Utilities;
 
 class Temporal
@@ -10,7 +12,7 @@ class Temporal
      *
      * @return int
      */
-    public static function getTime()
+    public static function getTime() : int
     {
         return time();
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/Utils.php b/vendor/simplesamlphp/saml2/src/SAML2/Utils.php
index ed710c359a..e894a3eb58 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/Utils.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/Utils.php
@@ -1,17 +1,26 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2;
 
+use DOMDocument;
+use DOMElement;
+use DOMNode;
+use DOMXPath;
 use RobRichards\XMLSecLibs\XMLSecEnc;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use Webmozart\Assert\Assert;
+
+use SAML2\Compat\AbstractContainer;
 use SAML2\Compat\ContainerSingleton;
+use SAML2\Compat\Ssp\Container;
 use SAML2\Exception\RuntimeException;
 use SAML2\XML\ds\KeyInfo;
 use SAML2\XML\ds\X509Certificate;
 use SAML2\XML\ds\X509Data;
 use SAML2\XML\md\KeyDescriptor;
-use Webmozart\Assert\Assert;
 
 /**
  * Helper functions for the SAML2 library.
@@ -23,7 +32,7 @@ class Utils
     /**
      * Check the Signature in a XML element.
      *
-     * This function expects the XML element to contain a Signature-element
+     * This function expects the XML element to contain a Signature element
      * which contains a reference to the XML-element. This is common for both
      * messages and assertions.
      *
@@ -35,11 +44,11 @@ class Utils
      * an array will be returned. This array contains the information required to
      * check the signature against a public key.
      *
-     * @param  \DOMElement  $root The element which should be validated.
+     * @param \DOMElement $root The element which should be validated.
      * @throws \Exception
-     * @return array|bool An array with information about the Signature-element.
+     * @return array|false An array with information about the Signature element.
      */
-    public static function validateElement(\DOMElement $root)
+    public static function validateElement(DOMElement $root)
     {
         /* Create an XML security object. */
         $objXMLSecDSig = new XMLSecurityDSig();
@@ -48,8 +57,9 @@ public static function validateElement(\DOMElement $root)
         $objXMLSecDSig->idKeys[] = 'ID';
 
         /* Locate the XMLDSig Signature element to be used. */
+        /** @var \DOMElement[] $signatureElement */
         $signatureElement = self::xpQuery($root, './ds:Signature');
-        if (count($signatureElement) === 0) {
+        if (empty($signatureElement)) {
             /* We don't have a signature element ot validate. */
 
             return false;
@@ -104,16 +114,15 @@ public static function validateElement(\DOMElement $root)
     /**
      * Helper function to convert a XMLSecurityKey to the correct algorithm.
      *
-     * @param  XMLSecurityKey $key       The key.
-     * @param  string         $algorithm The desired algorithm.
-     * @param  string         $type      Public or private key, defaults to public.
-     * @throws \Exception
+     * @param XMLSecurityKey $key The key.
+     * @param string $algorithm The desired algorithm.
+     * @param string $type Public or private key, defaults to public.
      * @return XMLSecurityKey The new key.
      */
-    public static function castKey(XMLSecurityKey $key, $algorithm, $type = 'public')
+    public static function castKey(XMLSecurityKey $key, string $algorithm, string $type = null) : XMLSecurityKey
     {
-        Assert::string($algorithm);
-        Assert::oneOf($type, ["public", "private"]);
+        $type = $type ?: 'public';
+        Assert::oneOf($type, ["private", "public"]);
 
         // do nothing if algorithm is already the type of the key
         if ($key->type === $algorithm) {
@@ -130,6 +139,7 @@ public static function castKey(XMLSecurityKey $key, $algorithm, $type = 'public'
             throw new \Exception('Unsupported signing algorithm.');
         }
 
+        /** @psalm-suppress PossiblyNullArgument */
         $keyInfo = openssl_pkey_get_details($key->key);
         if ($keyInfo === false) {
             throw new \Exception('Unable to get key details from XMLSecurityKey.');
@@ -150,18 +160,22 @@ public static function castKey(XMLSecurityKey $key, $algorithm, $type = 'public'
      *
      * An exception is thrown if we are unable to validate the signature.
      *
-     * @param array          $info The information returned by the validateElement()-function.
-     * @param XMLSecurityKey $key  The publickey that should validate the Signature object.
+     * @param array $info The information returned by the validateElement() function.
+     * @param XMLSecurityKey $key The publickey that should validate the Signature object.
      * @throws \Exception
      * @return void
      */
-    public static function validateSignature(array $info, XMLSecurityKey $key)
+    public static function validateSignature(array $info, XMLSecurityKey $key) : void
     {
         Assert::keyExists($info, "Signature");
 
         /** @var XMLSecurityDSig $objXMLSecDSig */
         $objXMLSecDSig = $info['Signature'];
-
+        
+        /**
+         * @var \DOMElement[] $sigMethod
+         * @var \DOMElement $objXMLSecDSig->sigNode
+         */
         $sigMethod = self::xpQuery($objXMLSecDSig->sigNode, './ds:SignedInfo/ds:SignatureMethod');
         if (empty($sigMethod)) {
             throw new \Exception('Missing SignatureMethod element.');
@@ -186,23 +200,22 @@ public static function validateSignature(array $info, XMLSecurityKey $key)
     /**
      * Do an XPath query on an XML node.
      *
-     * @param  \DOMNode $node  The XML node.
-     * @param  string  $query  The query.
-     * @return \DOMNode[]      Array with matching DOM nodes.
+     * @param \DOMNode $node  The XML node.
+     * @param string $query The query.
+     * @return \DOMNode[] Array with matching DOM nodes.
      */
-    public static function xpQuery(\DOMNode $node, $query)
+    public static function xpQuery(DOMNode $node, string $query) : array
     {
-        Assert::string($query);
         static $xpCache = null;
 
-        if ($node instanceof \DOMDocument) {
+        if ($node instanceof DOMDocument) {
             $doc = $node;
         } else {
             $doc = $node->ownerDocument;
         }
 
         if ($xpCache === null || !$xpCache->document->isSameNode($doc)) {
-            $xpCache = new \DOMXPath($doc);
+            $xpCache = new DOMXPath($doc);
             $xpCache->registerNamespace('soap-env', Constants::NS_SOAP);
             $xpCache->registerNamespace('saml_protocol', Constants::NS_SAMLP);
             $xpCache->registerNamespace('saml_assertion', Constants::NS_SAML);
@@ -224,11 +237,11 @@ public static function xpQuery(\DOMNode $node, $query)
     /**
      * Make an exact copy the specific \DOMElement.
      *
-     * @param  \DOMElement      $element The element we should copy.
-     * @param  \DOMElement|null $parent  The target parent element.
-     * @return \DOMElement      The copied element.
+     * @param \DOMElement $element The element we should copy.
+     * @param \DOMElement|null $parent The target parent element.
+     * @return \DOMElement The copied element.
      */
-    public static function copyElement(\DOMElement $element, \DOMElement $parent = null)
+    public static function copyElement(DOMElement $element, DOMElement $parent = null) : DOMElement
     {
         if ($parent === null) {
             $document = DOMDocumentFactory::create();
@@ -237,7 +250,7 @@ public static function copyElement(\DOMElement $element, \DOMElement $parent = n
         }
 
         $namespaces = [];
-        for ($e = $element; $e !== null; $e = $e->parentNode) {
+        for ($e = $element; $e instanceof DOMNode; $e = $e->parentNode) {
             foreach (Utils::xpQuery($e, './namespace::*') as $ns) {
                 $prefix = $ns->localName;
                 if ($prefix === 'xml' || $prefix === 'xmlns') {
@@ -269,16 +282,13 @@ public static function copyElement(\DOMElement $element, \DOMElement $parent = n
     /**
      * Parse a boolean attribute.
      *
-     * @param  \DOMElement $node          The element we should fetch the attribute from.
-     * @param  string     $attributeName The name of the attribute.
-     * @param  mixed      $default       The value that should be returned if the attribute doesn't exist.
-     * @throws \Exception
+     * @param \DOMElement $node The element we should fetch the attribute from.
+     * @param string $attributeName The name of the attribute.
+     * @param mixed|null $default The value that should be returned if the attribute doesn't exist.
      * @return bool|mixed The value of the attribute, or $default if the attribute doesn't exist.
      */
-    public static function parseBoolean(\DOMElement $node, $attributeName, $default = null)
+    public static function parseBoolean(DOMElement $node, string $attributeName, $default = null)
     {
-        Assert::string($attributeName);
-
         if (!$node->hasAttribute($attributeName)) {
             return $default;
         }
@@ -291,88 +301,27 @@ public static function parseBoolean(\DOMElement $node, $attributeName, $default
             case 'true':
                 return true;
             default:
-                throw new \Exception('Invalid value of boolean attribute '.var_export($attributeName, true).': '.var_export($value, true));
+                throw new \Exception('Invalid value of boolean attribute '.var_export($attributeName, true).': '.
+                    var_export($value, true));
         }
     }
 
 
     /**
-     * Create a NameID element.
-     *
-     * The NameId array can have the following elements: 'Value', 'Format',
-     *   'NameQualifier, 'SPNameQualifier' and 'SPProviderID'.
-     *
-     * Only the 'Value'-element is required.
+     * Insert a Signature node.
      *
-     * @param \DOMElement $node   The DOM node we should append the NameId to.
-     * @param array      $nameId The name identifier.
-     * @return void
-     *
-     * @deprecated Please use \SAML2\XML\saml\NameID objects instead:
-     *   $nameId = new \SAML2\XML\saml\NameID();
-     *   $nameId->value = $value;
-     *   ...
-     *   $nameId->toXML($node);
-     */
-    public static function addNameId(\DOMElement $node, array $nameId)
-    {
-        Assert::keyExists($nameId, "Value");
-
-        $nid = new XML\saml\NameID();
-
-        $nid->value = $nameId['Value'];
-
-        if (array_key_exists('NameQualifier', $nameId) && $nameId['NameQualifier'] !== null) {
-            $nid->setNameQualifier($nameId['NameQualifier']);
-        }
-        if (array_key_exists('SPNameQualifier', $nameId) && $nameId['SPNameQualifier'] !== null) {
-            $nid->setSPNameQualifier($nameId['SPNameQualifier']);
-        }
-        if (array_key_exists('Format', $nameId) && $nameId['Format'] !== null) {
-            $nid->setFormat($nameId['Format']);
-        }
-
-        $nid->toXML($node);
-    }
-
-
-    /**
-     * Parse a NameID element.
-     *
-     * @param  \DOMElement $xml The DOM element we should parse.
-     * @return array      The parsed name identifier.
-     * @deprecated Please use \SAML2\XML\saml\NameID objects instead:
-     *   $nameId = new \SAML2\XML\saml\NameID($xml);
-     */
-    public static function parseNameId(\DOMElement $xml)
-    {
-        $ret = ['Value' => trim($xml->textContent)];
-
-        foreach (['NameQualifier', 'SPNameQualifier', 'SPProvidedID', 'Format'] as $attr) {
-            if ($xml->hasAttribute($attr)) {
-                $ret[$attr] = $xml->getAttribute($attr);
-            }
-        }
-
-        return $ret;
-    }
-
-
-    /**
-     * Insert a Signature-node.
-     *
-     * @param XMLSecurityKey $key           The key we should use to sign the message.
-     * @param array          $certificates  The certificates we should add to the signature node.
-     * @param \DOMElement     $root          The XML node we should sign.
-     * @param \DOMNode        $insertBefore  The XML element we should insert the signature element before.
+     * @param XMLSecurityKey $key The key we should use to sign the message.
+     * @param array $certificates The certificates we should add to the signature node.
+     * @param \DOMElement $root The XML node we should sign.
+     * @param \DOMNode $insertBefore  The XML element we should insert the signature element before.
      * @return void
      */
     public static function insertSignature(
         XMLSecurityKey $key,
         array $certificates,
-        \DOMElement $root,
-        \DOMNode $insertBefore = null
-    ) {
+        DOMElement $root,
+        DOMNode $insertBefore = null
+    ) : void {
         $objXMLSecDSig = new XMLSecurityDSig();
         $objXMLSecDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N);
 
@@ -412,13 +361,13 @@ public static function insertSignature(
      *
      * This is an internal helper function.
      *
-     * @param  \DOMElement     $encryptedData The encrypted data.
-     * @param  XMLSecurityKey $inputKey      The decryption key.
-     * @param  array          &$blacklist    Blacklisted decryption algorithms.
+     * @param \DOMElement $encryptedData The encrypted data.
+     * @param XMLSecurityKey $inputKey The decryption key.
+     * @param array &$blacklist Blacklisted decryption algorithms.
      * @throws \Exception
-     * @return \DOMElement     The decrypted element.
+     * @return \DOMElement The decrypted element.
      */
-    private static function doDecryptElement(\DOMElement $encryptedData, XMLSecurityKey $inputKey, array &$blacklist)
+    private static function doDecryptElement(DOMElement $encryptedData, XMLSecurityKey $inputKey, array &$blacklist) : DOMElement
     {
         $enc = new XMLSecEnc();
 
@@ -472,12 +421,18 @@ private static function doDecryptElement(\DOMElement $encryptedData, XMLSecurity
                 /* To protect against "key oracle" attacks, we need to be able to create a
                  * symmetric key, and for that we need to know the key size.
                  */
-                throw new \Exception('Unknown key size for encryption algorithm: '.var_export($symmetricKey->type, true));
+                throw new \Exception(
+                    'Unknown key size for encryption algorithm: '.var_export($symmetricKey->type, true)
+                );
             }
 
             try {
+                /**
+                 * @var string $key
+                 * @psalm-suppress UndefinedClass
+                 */
                 $key = $encKey->decryptKey($symmetricKeyInfo);
-                if (strlen($key) != $keySize) {
+                if (strlen($key) !== $keySize) {
                     throw new \Exception(
                         'Unexpected key size ('.strval(strlen($key)*8).'bits) for encryption algorithm: '.
                         var_export($symmetricKey->type, true)
@@ -486,12 +441,18 @@ private static function doDecryptElement(\DOMElement $encryptedData, XMLSecurity
             } catch (\Exception $e) {
                 /* We failed to decrypt this key. Log it, and substitute a "random" key. */
                 Utils::getContainer()->getLogger()->error('Failed to decrypt symmetric key: '.$e->getMessage());
-                /* Create a replacement key, so that it looks like we fail in the same way as if the key was correctly padded. */
+                /* Create a replacement key, so that it looks like we fail in the same way as if the key was correctly
+                 * padded. */
 
                 /* We base the symmetric key on the encrypted key and private key, so that we always behave the
                  * same way for a given input key.
                  */
                 $encryptedKey = $encKey->getCipherValue();
+                if ($encryptedKey === null) {
+                    throw new \Exception('No CipherValue available in the encrypted element.');
+                }
+
+                /** @psalm-suppress PossiblyNullArgument */
                 $pkey = openssl_pkey_get_details($symmetricKeyInfo->key);
                 $pkey = sha1(serialize($pkey), true);
                 $key = sha1($encryptedKey.$pkey, true);
@@ -522,7 +483,10 @@ private static function doDecryptElement(\DOMElement $encryptedData, XMLSecurity
             throw new \Exception('Algorithm disabled: '.var_export($algorithm, true));
         }
 
-        /** @var string $decrypted */
+        /**
+         * @var string $decrypted
+         * @psalm-suppress UndefinedClass
+         */
         $decrypted = $enc->decryptNode($symmetricKey, false);
 
         /*
@@ -541,13 +505,10 @@ private static function doDecryptElement(\DOMElement $encryptedData, XMLSecurity
             throw new \Exception('Failed to parse decrypted XML. Maybe the wrong sharedkey was used?', 0, $e);
         }
 
+        /** @psalm-suppress PossiblyNullPropertyFetch */
         $decryptedElement = $newDoc->firstChild->firstChild;
-        if ($decryptedElement === null) {
-            throw new \Exception('Missing encrypted element.');
-        }
-
-        if (!($decryptedElement instanceof \DOMElement)) {
-            throw new \Exception('Decrypted element was not actually a \DOMElement.');
+        if (!($decryptedElement instanceof DOMElement)) {
+            throw new \Exception('Missing decrypted element or it was not actually a DOMElement.');
         }
 
         return $decryptedElement;
@@ -557,13 +518,13 @@ private static function doDecryptElement(\DOMElement $encryptedData, XMLSecurity
     /**
      * Decrypt an encrypted element.
      *
-     * @param  \DOMElement     $encryptedData The encrypted data.
-     * @param  XMLSecurityKey $inputKey      The decryption key.
-     * @param  array          $blacklist     Blacklisted decryption algorithms.
+     * @param \DOMElement $encryptedData The encrypted data.
+     * @param XMLSecurityKey $inputKey The decryption key.
+     * @param array $blacklist Blacklisted decryption algorithms.
      * @throws \Exception
-     * @return \DOMElement     The decrypted element.
+     * @return \DOMElement The decrypted element.
      */
-    public static function decryptElement(\DOMElement $encryptedData, XMLSecurityKey $inputKey, array $blacklist = [])
+    public static function decryptElement(DOMElement $encryptedData, XMLSecurityKey $inputKey, array $blacklist = []) : DOMElement
     {
         try {
             return self::doDecryptElement($encryptedData, $inputKey, $blacklist);
@@ -581,20 +542,19 @@ public static function decryptElement(\DOMElement $encryptedData, XMLSecurityKey
     /**
      * Extract localized strings from a set of nodes.
      *
-     * @param  \DOMElement $parent       The element that contains the localized strings.
-     * @param  string     $namespaceURI The namespace URI the localized strings should have.
-     * @param  string     $localName    The localName of the localized strings.
-     * @return array      Localized strings.
+     * @param \DOMElement $parent The element that contains the localized strings.
+     * @param string $namespaceURI The namespace URI the localized strings should have.
+     * @param string $localName The localName of the localized strings.
+     * @return array Localized strings.
      */
-    public static function extractLocalizedStrings(\DOMElement $parent, $namespaceURI, $localName)
+    public static function extractLocalizedStrings(\DOMElement $parent, string $namespaceURI, string $localName) : array
     {
-        Assert::string($namespaceURI);
-        Assert::string($localName);
-
         $ret = [];
-        for ($node = $parent->firstChild; $node !== null; $node = $node->nextSibling) {
+        foreach ($parent->childNodes as $node) {
             if ($node->namespaceURI !== $namespaceURI || $node->localName !== $localName) {
                 continue;
+            } else if (!($node instanceof DOMElement)) {
+                continue;
             }
 
             if ($node->hasAttribute('xml:lang')) {
@@ -612,18 +572,15 @@ public static function extractLocalizedStrings(\DOMElement $parent, $namespaceUR
     /**
      * Extract strings from a set of nodes.
      *
-     * @param  \DOMElement $parent       The element that contains the localized strings.
-     * @param  string     $namespaceURI The namespace URI the string elements should have.
-     * @param  string     $localName    The localName of the string elements.
-     * @return array      The string values of the various nodes.
+     * @param \DOMElement $parent The element that contains the localized strings.
+     * @param string $namespaceURI The namespace URI the string elements should have.
+     * @param string $localName The localName of the string elements.
+     * @return array The string values of the various nodes.
      */
-    public static function extractStrings(\DOMElement $parent, $namespaceURI, $localName)
+    public static function extractStrings(DOMElement $parent, string $namespaceURI, string $localName) : array
     {
-        Assert::string($namespaceURI);
-        Assert::string($localName);
-
         $ret = [];
-        for ($node = $parent->firstChild; $node !== null; $node = $node->nextSibling) {
+        foreach ($parent->childNodes as $node) {
             if ($node->namespaceURI !== $namespaceURI || $node->localName !== $localName) {
                 continue;
             }
@@ -637,18 +594,18 @@ public static function extractStrings(\DOMElement $parent, $namespaceURI, $local
     /**
      * Append string element.
      *
-     * @param  \DOMElement $parent    The parent element we should append the new nodes to.
-     * @param  string     $namespace The namespace of the created element.
-     * @param  string     $name      The name of the created element.
-     * @param  string     $value     The value of the element.
+     * @param \DOMElement $parent The parent element we should append the new nodes to.
+     * @param string $namespace The namespace of the created element.
+     * @param string $name The name of the created element.
+     * @param string $value The value of the element.
      * @return \DOMElement The generated element.
      */
-    public static function addString(\DOMElement $parent, $namespace, $name, $value)
-    {
-        Assert::string($namespace);
-        Assert::string($name);
-        Assert::string($value);
-
+    public static function addString(
+        DOMElement $parent,
+        string $namespace,
+        string $name,
+        string $value
+    ) : DOMElement {
         $doc = $parent->ownerDocument;
 
         $n = $doc->createElementNS($namespace, $name);
@@ -662,19 +619,20 @@ public static function addString(\DOMElement $parent, $namespace, $name, $value)
     /**
      * Append string elements.
      *
-     * @param \DOMElement $parent    The parent element we should append the new nodes to.
-     * @param string     $namespace The namespace of the created elements
-     * @param string     $name      The name of the created elements
-     * @param bool       $localized Whether the strings are localized, and should include the xml:lang attribute.
-     * @param array      $values    The values we should create the elements from.
+     * @param \DOMElement $parent The parent element we should append the new nodes to.
+     * @param string $namespace The namespace of the created elements
+     * @param string $name The name of the created elements
+     * @param bool $localized Whether the strings are localized, and should include the xml:lang attribute.
+     * @param array $values The values we should create the elements from.
      * @return void
      */
-    public static function addStrings(\DOMElement $parent, $namespace, $name, $localized, array $values)
-    {
-        Assert::string($namespace);
-        Assert::string($name);
-        Assert::boolean($localized);
-
+    public static function addStrings(
+        DOMElement $parent,
+        string $namespace,
+        string $name,
+        bool $localized,
+        array $values
+    ) : void {
         $doc = $parent->ownerDocument;
 
         foreach ($values as $index => $value) {
@@ -691,13 +649,11 @@ public static function addStrings(\DOMElement $parent, $namespace, $name, $local
     /**
      * Create a KeyDescriptor with the given certificate.
      *
-     * @param  string                     $x509Data The certificate, as a base64-encoded DER data.
+     * @param string $x509Data The certificate, as a base64-encoded DER data.
      * @return \SAML2\XML\md\KeyDescriptor The keydescriptor.
      */
-    public static function createKeyDescriptor($x509Data)
+    public static function createKeyDescriptor(string $x509Data) : KeyDescriptor
     {
-        Assert::string($x509Data);
-
         $x509Certificate = new X509Certificate();
         $x509Certificate->setCertificate($x509Data);
 
@@ -708,7 +664,7 @@ public static function createKeyDescriptor($x509Data)
         $keyInfo->addInfo($x509Data);
 
         $keyDescriptor = new KeyDescriptor();
-        $keyDescriptor->KeyInfo = $keyInfo;
+        $keyDescriptor->setKeyInfo($keyInfo);
 
         return $keyDescriptor;
     }
@@ -733,7 +689,7 @@ public static function createKeyDescriptor($x509Data)
      * @throws \Exception
      * @return int Converted to a unix timestamp.
      */
-    public static function xsDateTimeToTimestamp($time)
+    public static function xsDateTimeToTimestamp(string $time) : int
     {
         $matches = [];
 
@@ -763,9 +719,9 @@ public static function xsDateTimeToTimestamp($time)
 
 
     /**
-     * @return \SAML2\Compat\Ssp\Container
+     * @return \SAML2\Compat\AbstractContainer
      */
-    public static function getContainer()
+    public static function getContainer() : AbstractContainer
     {
         return ContainerSingleton::getInstance();
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/Chunk.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/Chunk.php
index 4b150093a1..88b05c2b1e 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/Chunk.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/Chunk.php
@@ -1,11 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML;
 
 use DOMElement;
+
 use SAML2\DOMDocumentFactory;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Serializable class used to hold an XML element.
@@ -19,21 +21,21 @@ class Chunk implements \Serializable
      *
      * @var string
      */
-    public $localName;
+    private $localName;
 
     /**
      * The namespaceURI of this element.
      *
      * @var string|null
      */
-    public $namespaceURI;
+    private $namespaceURI;
 
     /**
      * The \DOMElement we contain.
      *
      * @var \DOMElement
      */
-    public $xml;
+    private $xml;
 
 
     /**
@@ -41,12 +43,12 @@ class Chunk implements \Serializable
      *
      * @param \DOMElement $xml The element we should copy.
      */
-    public function __construct(\DOMElement $xml)
+    public function __construct(DOMElement $xml)
     {
-        $this->setLocalName($xml->localName);
-        $this->setNamespaceURI($xml->namespaceURI);
+        $this->localName = $xml->localName;
+        $this->namespaceURI = $xml->namespaceURI;
 
-        $this->setXml(Utils::copyElement($xml));
+        $this->xml = Utils::copyElement($xml);
     }
 
 
@@ -54,9 +56,8 @@ public function __construct(\DOMElement $xml)
      * Get this \DOMElement.
      *
      * @return \DOMElement This element.
-     * @deprecated
      */
-    public function getXML()
+    public function getXML() : DOMElement
     {
         return $this->xml;
     }
@@ -68,7 +69,7 @@ public function getXML()
      * @param  \DOMElement $parent The element we should append this element to.
      * @return \DOMElement The new element.
      */
-    public function toXML(DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
         return Utils::copyElement($this->xml, $parent);
     }
@@ -76,9 +77,10 @@ public function toXML(DOMElement $parent)
 
     /**
      * Collect the value of the localName-property
+     *
      * @return string
      */
-    public function getLocalName()
+    public function getLocalName() : string
     {
         return $this->localName;
     }
@@ -86,21 +88,22 @@ public function getLocalName()
 
     /**
      * Set the value of the localName-property
+     *
      * @param string $localName
      * @return void
      */
-    public function setLocalName($localName)
+    public function setLocalName(string $localName) : void
     {
-        Assert::string($localName);
         $this->localName = $localName;
     }
 
 
     /**
      * Collect the value of the namespaceURI-property
+     *
      * @return string|null
      */
-    public function getNamespaceURI()
+    public function getNamespaceURI() : ?string
     {
         return $this->namespaceURI;
     }
@@ -108,50 +111,40 @@ public function getNamespaceURI()
 
     /**
      * Set the value of the namespaceURI-property
+     *
      * @param string|null $namespaceURI
      * @return void
      */
-    public function setNamespaceURI($namespaceURI = null)
+    public function setNamespaceURI(string $namespaceURI = null) : void
     {
-        Assert::nullOrString($namespaceURI);
         $this->namespaceURI = $namespaceURI;
     }
 
 
-    /**
-     * Set the value of the xml-property
-     * @param \DOMelement $xml
-     * @return void
-     */
-    private function setXml($xml)
-    {
-        Assert::isInstanceOf($xml, DOMElement::class);
-        $this->xml = $xml;
-    }
-
-
     /**
      * Serialize this XML chunk.
      *
      * @return string The serialized chunk.
      */
-    public function serialize()
+    public function serialize() : string
     {
-        return serialize($this->getXml()->ownerDocument->saveXML($this->getXml()));
+        return serialize($this->xml->ownerDocument->saveXML($this->xml));
     }
 
-
+    
     /**
      * Un-serialize this XML chunk.
      *
-     * @param  string          $serialized The serialized chunk.
+     * @param string $serialized The serialized chunk.
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function unserialize($serialized)
+    public function unserialize($serialized) : void
     {
         $doc = DOMDocumentFactory::fromString(unserialize($serialized));
-        $this->setXml($doc->documentElement);
-        $this->setLocalName($this->getXml()->localName);
-        $this->setNamespaceURI($this->getXml()->namespaceURI);
+        $this->xml = $doc->documentElement;
+        $this->setLocalName($this->xml->localName);
+        $this->setNamespaceURI($this->xml->namespaceURI);
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/Common.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/Common.php
index 219d1160b1..bd7760a0ec 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/Common.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/Common.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\alg;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/DigestMethod.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/DigestMethod.php
index 04f0cb3eb1..196ab9c018 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/DigestMethod.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/DigestMethod.php
@@ -1,7 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\alg;
 
+use DOMElement;
 use Webmozart\Assert\Assert;
 
 /**
@@ -18,7 +21,7 @@ class DigestMethod
      *
      * @var string
      */
-    public $Algorithm;
+    private $Algorithm = '';
 
 
     /**
@@ -28,7 +31,7 @@ class DigestMethod
      *
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -43,9 +46,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the algorithm-property
+     *
      * @return string
      */
-    public function getAlgorithm()
+    public function getAlgorithm() : string
     {
         return $this->Algorithm;
     }
@@ -53,12 +57,12 @@ public function getAlgorithm()
 
     /**
      * Set the value of the Algorithm-property
+     *
      * @param string $algorithm
      * @return void
      */
-    public function setAlgorithm($algorithm)
+    public function setAlgorithm(string $algorithm) : void
     {
-        Assert::string($algorithm);
         $this->Algorithm = $algorithm;
     }
 
@@ -68,15 +72,16 @@ public function setAlgorithm($algorithm)
      *
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement
+     * @throws \Exception
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getAlgorithm());
+        Assert::notEmpty($this->Algorithm, 'Cannot convert DigestMethod to XML without an Algorithm set.');
 
         $doc = $parent->ownerDocument;
         $e = $doc->createElementNS(Common::NS, 'alg:DigestMethod');
         $parent->appendChild($e);
-        $e->setAttribute('Algorithm', $this->getAlgorithm());
+        $e->setAttribute('Algorithm', $this->Algorithm);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/SigningMethod.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/SigningMethod.php
index d2fe64684b..3719c566ab 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/SigningMethod.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/alg/SigningMethod.php
@@ -1,7 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\alg;
 
+use DOMElement;
 use Webmozart\Assert\Assert;
 
 /**
@@ -18,8 +21,7 @@ class SigningMethod
      *
      * @var string
      */
-    public $Algorithm;
-
+    private $Algorithm = '';
 
     /**
      * The smallest key size, in bits, that the entity supports in conjunction with the algorithm. If omitted, no
@@ -27,8 +29,7 @@ class SigningMethod
      *
      * @var int|null
      */
-    public $MinKeySize;
-
+    private $MinKeySize = null;
 
     /**
      * The largest key size, in bits, that the entity supports in conjunction with the algorithm. If omitted, no
@@ -36,11 +37,40 @@ class SigningMethod
      *
      * @var int|null
      */
-    public $MaxKeySize;
+    private $MaxKeySize = null;
+
+
+    /**
+     * Create/parse an alg:SigningMethod element.
+     *
+     * @param \DOMElement|null $xml The XML element we should load or null to create a new one from scratch.
+     *
+     * @throws \Exception
+     */
+    public function __construct(DOMElement $xml = null)
+    {
+        if ($xml === null) {
+            return;
+        }
+
+        if (!$xml->hasAttribute('Algorithm')) {
+            throw new \Exception('Missing required attribute "Algorithm" in alg:SigningMethod element.');
+        }
+        $this->Algorithm = $xml->getAttribute('Algorithm');
+
+        if ($xml->hasAttribute('MinKeySize')) {
+            $this->MinKeySize = intval($xml->getAttribute('MinKeySize'));
+        }
+
+        if ($xml->hasAttribute('MaxKeySize')) {
+            $this->MaxKeySize = intval($xml->getAttribute('MaxKeySize'));
+        }
+    }
 
 
     /**
      * Collect the value of the Algorithm-property
+     *
      * @return string
      */
     public function getAlgorithm()
@@ -51,21 +81,22 @@ public function getAlgorithm()
 
     /**
      * Set the value of the Algorithm-property
+     *
      * @param string $algorithm
      * @return void
      */
-    public function setAlgorithm($algorithm)
+    public function setAlgorithm(string $algorithm) : void
     {
-        Assert::string($algorithm);
         $this->Algorithm = $algorithm;
     }
 
 
     /**
      * Collect the value of the MinKeySize-property
+     *
      * @return int|null
      */
-    public function getMinKeySize()
+    public function getMinKeySize() : ?int
     {
         return $this->MinKeySize;
     }
@@ -73,21 +104,22 @@ public function getMinKeySize()
 
     /**
      * Set the value of the MinKeySize-property
+     *
      * @param int|null $minKeySize
      * @return void
      */
-    public function setMinKeySize($minKeySize = null)
+    public function setMinKeySize(int $minKeySize = null) : void
     {
-        Assert::nullOrInteger($minKeySize);
         $this->MinKeySize = $minKeySize;
     }
 
 
     /**
      * Collect the value of the MaxKeySize-property
+     *
      * @return int|null
      */
-    public function getMaxKeySize()
+    public function getMaxKeySize() : ?int
     {
         return $this->MaxKeySize;
     }
@@ -95,67 +127,40 @@ public function getMaxKeySize()
 
     /**
      * Set the value of the MaxKeySize-property
+     *
      * @param int|null $maxKeySize
      * @return void
      */
-    public function setMaxKeySize($maxKeySize = null)
+    public function setMaxKeySize(int $maxKeySize = null) : void
     {
-        Assert::nullOrInteger($maxKeySize);
         $this->MaxKeySize = $maxKeySize;
     }
 
 
-    /**
-     * Create/parse an alg:SigningMethod element.
-     *
-     * @param \DOMElement|null $xml The XML element we should load or null to create a new one from scratch.
-     * @throws \Exception
-     * @return void
-     */
-    public function __construct(\DOMElement $xml = null)
-    {
-        if ($xml === null) {
-            return;
-        }
-
-        if (!$xml->hasAttribute('Algorithm')) {
-            throw new \Exception('Missing required attribute "Algorithm" in alg:SigningMethod element.');
-        }
-        $this->setAlgorithm($xml->getAttribute('Algorithm'));
-
-        if ($xml->hasAttribute('MinKeySize')) {
-            $this->setMinKeySize(intval($xml->getAttribute('MinKeySize')));
-        }
-
-        if ($xml->hasAttribute('MaxKeySize')) {
-            $this->setMaxKeySize(intval($xml->getAttribute('MaxKeySize')));
-        }
-    }
-
-
     /**
      * Convert this element to XML.
      *
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement
+     * @throws \Exception
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getAlgorithm());
-        Assert::nullOrInteger($this->getMinKeySize());
-        Assert::nullOrInteger($this->getMaxKeySize());
+        Assert::notEmpty($this->Algorithm, 'Cannot convert SigningMethod to XML without an Algorithm set.');
+        Assert::nullOrInteger($this->MinKeySize);
+        Assert::nullOrInteger($this->MaxKeySize);
 
         $doc = $parent->ownerDocument;
         $e = $doc->createElementNS(Common::NS, 'alg:SigningMethod');
         $parent->appendChild($e);
-        $e->setAttribute('Algorithm', $this->getAlgorithm());
+        $e->setAttribute('Algorithm', $this->Algorithm);
 
-        if ($this->getMinKeySize() !== null) {
-            $e->setAttribute('MinKeySize', $this->getMinKeySize());
+        if ($this->MinKeySize !== null) {
+            $e->setAttribute('MinKeySize', strval($this->MinKeySize));
         }
 
-        if ($this->getMaxKeySize() !== null) {
-            $e->setAttribute('MaxKeySize', $this->getMaxKeySize());
+        if ($this->MaxKeySize !== null) {
+            $e->setAttribute('MaxKeySize', strval($this->MaxKeySize));
         }
 
         return $e;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyInfo.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyInfo.php
index 8ea8ec0e55..f53c5f4d45 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyInfo.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyInfo.php
@@ -1,11 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\ds;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
-use SAML2\XML\Chunk;
 use Webmozart\Assert\Assert;
 
+use SAML2\XML\Chunk;
+
 /**
  * Class representing a ds:KeyInfo element.
  *
@@ -18,7 +22,7 @@ class KeyInfo
      *
      * @var string|null
      */
-    public $Id = null;
+    private $Id = null;
 
     /**
      * The various key information elements.
@@ -28,7 +32,7 @@ class KeyInfo
      *
      * @var (\SAML2\XML\Chunk|\SAML2\XML\ds\KeyName|\SAML2\XML\ds\X509Data)[]
      */
-    public $info = [];
+    private $info = [];
 
 
     /**
@@ -36,34 +40,34 @@ class KeyInfo
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
         if ($xml->hasAttribute('Id')) {
-            $this->setId($xml->getAttribute('Id'));
+            $this->Id = $xml->getAttribute('Id');
         }
 
-        for ($n = $xml->firstChild; $n !== null; $n = $n->nextSibling) {
+        foreach ($xml->childNodes as $n) {
             if (!($n instanceof \DOMElement)) {
                 continue;
             }
 
             if ($n->namespaceURI !== XMLSecurityDSig::XMLDSIGNS) {
-                $this->addInfo(new Chunk($n));
+                $this->info[] = new Chunk($n);
                 continue;
             }
             switch ($n->localName) {
                 case 'KeyName':
-                    $this->addInfo(new KeyName($n));
+                    $this->info[] = new KeyName($n);
                     break;
                 case 'X509Data':
-                    $this->addInfo(new X509Data($n));
+                    $this->info[] = new X509Data($n);
                     break;
                 default:
-                    $this->addInfo(new Chunk($n));
+                    $this->info[] = new Chunk($n);
                     break;
             }
         }
@@ -72,9 +76,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the Id-property
+     *
      * @return string|null
      */
-    public function getId()
+    public function getId() : ?string
     {
         return $this->Id;
     }
@@ -82,21 +87,22 @@ public function getId()
 
     /**
      * Set the value of the Id-property
+     *
      * @param string|null $id
      * @return void
      */
-    public function setId($id = null)
+    public function setId(string $id = null) : void
     {
-        Assert::nullOrString($id);
         $this->Id = $id;
     }
 
 
     /**
      * Collect the value of the info-property
+     *
      * @return array
      */
-    public function getInfo()
+    public function getInfo() : array
     {
         return $this->info;
     }
@@ -104,10 +110,11 @@ public function getInfo()
 
     /**
      * Set the value of the info-property
+     *
      * @param array $info
      * @return void
      */
-    public function setInfo(array $info)
+    public function setInfo(array $info) : void
     {
         $this->info = $info;
     }
@@ -115,12 +122,18 @@ public function setInfo(array $info)
 
     /**
      * Add the value to the info-property
+     *
      * @param \SAML2\XML\Chunk|\SAML2\XML\ds\KeyName|\SAML2\XML\ds\X509Data $info
+     * @throws \Exception
      * @return void
      */
-    public function addInfo($info)
+    public function addInfo($info) : void
     {
-        Assert::isInstanceOfAny($info, [Chunk::class, KeyName::class, X509Data::class]);
+        Assert::isInstanceOfAny(
+            $info,
+            [Chunk::class, KeyName::class, X509Data::class],
+            'KeyInfo can only contain instances of KeyName, X509Data or Chunk.'
+        );
         $this->info[] = $info;
     }
 
@@ -131,22 +144,18 @@ public function addInfo($info)
      * @param \DOMElement $parent The element we should append this KeyInfo to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrString($this->getId());
-        Assert::isArray($this->getInfo());
-
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:KeyInfo');
         $parent->appendChild($e);
 
-        if ($this->getId() !== null) {
-            $e->setAttribute('Id', $this->getId());
+        if ($this->Id !== null) {
+            $e->setAttribute('Id', $this->Id);
         }
 
-        /** @var \SAML2\XML\Chunk|\SAML2\XML\ds\KeyName|\SAML2\XML\ds\X509Data $n */
-        foreach ($this->getInfo() as $n) {
+        foreach ($this->info as $n) {
             $n->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyName.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyName.php
index 2bfbce93f3..b025f1a275 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyName.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/KeyName.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\ds;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
+
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing a ds:KeyName element.
@@ -18,7 +21,7 @@ class KeyName
      *
      * @var string
      */
-    public $name;
+    public $name = '';
 
 
     /**
@@ -26,7 +29,7 @@ class KeyName
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -38,9 +41,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the name-property
+     *
      * @return string
      */
-    public function getName()
+    public function getName() : string
     {
         return $this->name;
     }
@@ -48,12 +52,12 @@ public function getName()
 
     /**
      * Set the value of the name-property
+     *
      * @param string $name
      * @return void
      */
-    public function setName($name)
+    public function setName(string $name) : void
     {
-        Assert::nullOrString($name);
         $this->name = $name;
     }
 
@@ -64,10 +68,8 @@ public function setName($name)
      * @param \DOMElement $parent The element we should append this KeyName element to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->name);
-
         return Utils::addString($parent, XMLSecurityDSig::XMLDSIGNS, 'ds:KeyName', $this->name);
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Certificate.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Certificate.php
index 8283e78cb5..dabc1f949c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Certificate.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Certificate.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\ds;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
+
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing a ds:X509Certificate element.
@@ -18,7 +21,7 @@ class X509Certificate
      *
      * @var string
      */
-    public $certificate;
+    private $certificate;
 
 
     /**
@@ -26,7 +29,7 @@ class X509Certificate
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -38,9 +41,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the certificate-property
+     *
      * @return string
      */
-    public function getCertificate()
+    public function getCertificate() : string
     {
         return $this->certificate;
     }
@@ -48,12 +52,12 @@ public function getCertificate()
 
     /**
      * Set the value of the certificate-property
+     *
      * @param string $certificate
      * @return void
      */
-    public function setCertificate($certificate)
+    public function setCertificate(string $certificate) : void
     {
-        Assert::string($certificate);
         $this->certificate = $certificate;
     }
 
@@ -64,9 +68,8 @@ public function setCertificate($certificate)
      * @param \DOMElement $parent The element we should append this X509Certificate element to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->certificate);
         return Utils::addString($parent, XMLSecurityDSig::XMLDSIGNS, 'ds:X509Certificate', $this->getCertificate());
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Data.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Data.php
index 74be5d8010..f5d1cdec05 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Data.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/ds/X509Data.php
@@ -1,11 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\ds;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
+use Webmozart\Assert\Assert;
+
 use SAML2\XML\Chunk;
 use SAML2\XML\ds\X509Certificate;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing a ds:X509Data element.
@@ -22,7 +26,7 @@ class X509Data
      *
      * @var (\SAML2\XML\Chunk|\SAML2\XML\ds\X509Certificate)[]
      */
-    public $data = [];
+    private $data = [];
 
 
     /**
@@ -30,14 +34,14 @@ class X509Data
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
         for ($n = $xml->firstChild; $n !== null; $n = $n->nextSibling) {
-            if (!($n instanceof \DOMElement)) {
+            if (!($n instanceof DOMElement)) {
                 continue;
             }
 
@@ -59,9 +63,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the data-property
+     *
      * @return array
      */
-    public function getData()
+    public function getData() : array
     {
         return $this->data;
     }
@@ -69,10 +74,11 @@ public function getData()
 
     /**
      * Set the value of the data-property
+     *
      * @param array $data
      * @return void
      */
-    public function setData(array $data)
+    public function setData(array $data) : void
     {
         $this->data = $data;
     }
@@ -80,10 +86,11 @@ public function setData(array $data)
 
     /**
      * Add the value to the data-property
+     *
      * @param \SAML2\XML\Chunk|\SAML2\XML\ds\X509Certificate $data
      * @return void
      */
-    public function addData($data)
+    public function addData($data) : void
     {
         Assert::isInstanceOfAny($data, [Chunk::class, X509Certificate::class]);
         $this->data[] = $data;
@@ -96,10 +103,8 @@ public function addData($data)
      * @param \DOMElement $parent The element we should append this X509Data element to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($this->getData());
-
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509Data');
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/ecp/Response.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/ecp/Response.php
index 2e76d2437d..dd0d32cf59 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/ecp/Response.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/ecp/Response.php
@@ -1,11 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\ecp;
 
 use DOMElement;
 use InvalidArgumentException;
+
 use SAML2\Constants;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing the ECP Response element.
@@ -17,7 +19,7 @@ class Response
      *
      * @var string
      */
-    public $AssertionConsumerServiceURL;
+    private $AssertionConsumerServiceURL;
 
 
     /**
@@ -55,9 +57,10 @@ public function __construct(DOMElement $xml = null)
 
     /**
      * Collect the value of the AssertionConsumerServiceURL-property
+     *
      * @return string
      */
-    public function getAssertionConsumerServiceURL()
+    public function getAssertionConsumerServiceURL() : string
     {
         return $this->AssertionConsumerServiceURL;
     }
@@ -65,13 +68,13 @@ public function getAssertionConsumerServiceURL()
 
     /**
      * Set the value of the AssertionConsumerServiceURL-property
+     *
      * @param string $assertionConsumerServiceURL
      * @throws InvalidArgumentException
      * @return void
      */
-    public function setAssertionConsumerServiceURL($assertionConsumerServiceURL)
+    public function setAssertionConsumerServiceURL(string $assertionConsumerServiceURL) : void
     {
-        Assert::string($assertionConsumerServiceURL);
         if (!filter_var($assertionConsumerServiceURL, FILTER_VALIDATE_URL)) {
             throw new InvalidArgumentException('AssertionConsumerServiceURL is not a valid URL.');
         }
@@ -86,7 +89,7 @@ public function setAssertionConsumerServiceURL($assertionConsumerServiceURL)
      * @throws InvalidArgumentException
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
         if (!is_string($this->getAssertionConsumerServiceURL())) {
             throw new InvalidArgumentException("AssertionConsumerServiceURL must be a string");
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AdditionalMetadataLocation.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AdditionalMetadataLocation.php
index 23acb0bf9e..55fab59662 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AdditionalMetadataLocation.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AdditionalMetadataLocation.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 metadata AdditionalMetadataLocation element.
@@ -18,14 +21,14 @@ class AdditionalMetadataLocation
      *
      * @var string
      */
-    public $namespace;
+    private $namespace;
 
     /**
      * The URI where the metadata is located.
      *
      * @var string
      */
-    public $location;
+    private $location;
 
 
     /**
@@ -34,7 +37,7 @@ class AdditionalMetadataLocation
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -51,9 +54,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the namespace-property
+     *
      * @return string
      */
-    public function getNamespace()
+    public function getNamespace() : string
     {
         return $this->namespace;
     }
@@ -61,21 +65,22 @@ public function getNamespace()
 
     /**
      * Set the value of the namespace-property
+     *
      * @param string $namespace
      * @return void
      */
-    public function setNamespace($namespace)
+    public function setNamespace(string $namespace) : void
     {
-        Assert::string($namespace);
         $this->namespace = $namespace;
     }
 
 
     /**
      * Collect the value of the location-property
+     *
      * @return string
      */
-    public function getLocation()
+    public function getLocation() : string
     {
         return $this->location;
     }
@@ -83,12 +88,12 @@ public function getLocation()
 
     /**
      * Set the value of the location-property
+     *
      * @param string $location
      * @return void
      */
-    public function setLocation($location)
+    public function setLocation(string $location) : void
     {
-        Assert::string($location);
         $this->location = $location;
     }
 
@@ -99,11 +104,8 @@ public function setLocation($location)
      * @param  \DOMElement $parent The element we should append to.
      * @return \DOMElement This AdditionalMetadataLocation-element.
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getNamespace());
-        Assert::string($this->getLocation());
-
         $e = Utils::addString($parent, Constants::NS_MD, 'md:AdditionalMetadataLocation', $this->getLocation());
         $e->setAttribute('namespace', $this->getNamespace());
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AffiliationDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AffiliationDescriptor.php
index f56d025775..5cd06822b0 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AffiliationDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AffiliationDescriptor.php
@@ -1,11 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\SignedElementHelper;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 AffiliationDescriptor element.
@@ -19,37 +23,23 @@ class AffiliationDescriptor extends SignedElementHelper
      *
      * @var string
      */
-    public $affiliationOwnerID;
+    public $affiliationOwnerID = '';
 
     /**
      * The ID of this element.
      *
      * @var string|null
      */
-    public $ID;
-
-    /**
-     * How long this element is valid, as a unix timestamp.
-     *
-     * @var int|null
-     */
-    public $validUntil;
-
-    /**
-     * The length of time this element can be cached, as string.
-     *
-     * @var string|null
-     */
-    public $cacheDuration;
+    private $ID = null;
 
     /**
      * Extensions on this element.
      *
      * Array of extension elements.
      *
-     * @var \SAML2\XML\Chunk[]
+     * @var array
      */
-    public $Extensions = [];
+    private $Extensions = [];
 
     /**
      * The AffiliateMember(s).
@@ -58,7 +48,7 @@ class AffiliationDescriptor extends SignedElementHelper
      *
      * @var array
      */
-    public $AffiliateMember = [];
+    private $AffiliateMember = [];
 
     /**
      * KeyDescriptor elements.
@@ -67,7 +57,7 @@ class AffiliationDescriptor extends SignedElementHelper
      *
      * @var \SAML2\XML\md\KeyDescriptor[]
      */
-    public $KeyDescriptor = [];
+    private $KeyDescriptor = [];
 
 
     /**
@@ -76,7 +66,7 @@ class AffiliationDescriptor extends SignedElementHelper
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct($xml);
 
@@ -108,6 +98,7 @@ public function __construct(\DOMElement $xml = null)
             throw new \Exception('Missing AffiliateMember in AffiliationDescriptor.');
         }
 
+        /** @var \DOMElement $kd */
         foreach (Utils::xpQuery($xml, './saml_metadata:KeyDescriptor') as $kd) {
             $this->addKeyDescriptor(new KeyDescriptor($kd));
         }
@@ -116,9 +107,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the affiliationOwnerId-property
+     *
      * @return string
      */
-    public function getAffiliationOwnerID()
+    public function getAffiliationOwnerID() : string
     {
         return $this->affiliationOwnerID;
     }
@@ -126,21 +118,22 @@ public function getAffiliationOwnerID()
 
     /**
      * Set the value of the affiliationOwnerId-property
+     *
      * @param string $affiliationOwnerId
      * @return void
      */
-    public function setAffiliationOwnerID($affiliationOwnerId)
+    public function setAffiliationOwnerID(string $affiliationOwnerId) : void
     {
-        Assert::string($affiliationOwnerId);
         $this->affiliationOwnerID = $affiliationOwnerId;
     }
 
 
     /**
      * Collect the value of the ID-property
+     *
      * @return string|null
      */
-    public function getID()
+    public function getID() : ?string
     {
         return $this->ID;
     }
@@ -148,66 +141,22 @@ public function getID()
 
     /**
      * Set the value of the ID-property
+     *
      * @param string|null $Id
      * @return void
      */
-    public function setID($Id = null)
+    public function setID(string $Id = null) : void
     {
-        Assert::nullOrString($Id);
-
         $this->ID = $Id;
     }
 
 
-    /**
-     * Collect the value of the validUntil-property
-     * @return int|null
-     */
-    public function getValidUntil()
-    {
-        return $this->validUntil;
-    }
-
-
-    /**
-     * Set the value of the validUntil-property
-     * @param int|null $validUntil
-     * @return void
-     */
-    public function setValidUntil($validUntil = null)
-    {
-        Assert::nullOrInteger($validUntil);
-        $this->validUntil = $validUntil;
-    }
-
-
-    /**
-     * Collect the value of the cacheDuration-property
-     * @return string|null
-     */
-    public function getCacheDuration()
-    {
-        return $this->cacheDuration;
-    }
-
-
-    /**
-     * Set the value of the cacheDuration-property
-     * @param string|null $cacheDuration
-     * @return void
-     */
-    public function setCacheDuration($cacheDuration = null)
-    {
-        Assert::nullOrString($cacheDuration);
-        $this->cacheDuration = $cacheDuration;
-    }
-
-
     /**
      * Collect the value of the Extensions-property
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->Extensions;
     }
@@ -215,10 +164,11 @@ public function getExtensions()
 
     /**
      * Set the value of the Extensions-property
+     *
      * @param array $extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->Extensions = $extensions;
     }
@@ -227,10 +177,10 @@ public function setExtensions(array $extensions)
     /**
      * Add an Extension.
      *
-     * @param \SAML2\XML\Chunk $extensions The Extensions
+     * @param Extensions $extensions The Extensions
      * @return void
      */
-    public function addExtension(Extensions $extension)
+    public function addExtension(Extensions $extension) : void
     {
         $this->Extensions[] = $extension;
     }
@@ -238,9 +188,10 @@ public function addExtension(Extensions $extension)
 
     /**
      * Collect the value of the AffiliateMember-property
+     *
      * @return array
      */
-    public function getAffiliateMember()
+    public function getAffiliateMember() : array
     {
         return $this->AffiliateMember;
     }
@@ -248,10 +199,11 @@ public function getAffiliateMember()
 
     /**
      * Set the value of the AffiliateMember-property
+     *
      * @param array $affiliateMember
      * @return void
      */
-    public function setAffiliateMember(array $affiliateMember)
+    public function setAffiliateMember(array $affiliateMember) : void
     {
         $this->AffiliateMember = $affiliateMember;
     }
@@ -259,9 +211,10 @@ public function setAffiliateMember(array $affiliateMember)
 
     /**
      * Collect the value of the KeyDescriptor-property
+     *
      * @return \SAML2\XML\md\KeyDescriptor[]
      */
-    public function getKeyDescriptor()
+    public function getKeyDescriptor() : array
     {
         return $this->KeyDescriptor;
     }
@@ -269,10 +222,11 @@ public function getKeyDescriptor()
 
     /**
      * Set the value of the KeyDescriptor-property
+     *
      * @param array $keyDescriptor
      * @return void
      */
-    public function setKeyDescriptor(array $keyDescriptor)
+    public function setKeyDescriptor(array $keyDescriptor) : void
     {
         $this->KeyDescriptor = $keyDescriptor;
     }
@@ -280,10 +234,11 @@ public function setKeyDescriptor(array $keyDescriptor)
 
     /**
      * Add the value to the KeyDescriptor-property
+     *
      * @param \SAML2\XML\md\KeyDescriptor $keyDescriptor
      * @return void
      */
-    public function addKeyDescriptor(KeyDescriptor $keyDescriptor)
+    public function addKeyDescriptor(KeyDescriptor $keyDescriptor) : void
     {
         $this->KeyDescriptor[] = $keyDescriptor;
     }
@@ -295,39 +250,32 @@ public function addKeyDescriptor(KeyDescriptor $keyDescriptor)
      * @param \DOMElement $parent The EntityDescriptor we should append this endpoint to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getAffiliationOwnerID());
-        Assert::nullOrString($this->getID());
-        Assert::nullOrInteger($this->getValidUntil());
-        Assert::nullOrString($this->getCacheDuration());
-        Assert::isArray($this->getExtensions());
-        Assert::isArray($affiliateMember = $this->getAffiliateMember());
-        Assert::notEmpty($affiliateMember);
-        Assert::isArray($this->getKeyDescriptor());
+        Assert::notEmpty($this->affiliationOwnerID);
 
         $e = $parent->ownerDocument->createElementNS(Constants::NS_MD, 'md:AffiliationDescriptor');
         $parent->appendChild($e);
 
-        $e->setAttribute('affiliationOwnerID', $this->getAffiliationOwnerID());
+        $e->setAttribute('affiliationOwnerID', $this->affiliationOwnerID);
 
-        if ($this->getID() !== null) {
-            $e->setAttribute('ID', $this->getID());
+        if ($this->ID !== null) {
+            $e->setAttribute('ID', $this->ID);
         }
 
-        if ($this->getValidUntil() !== null) {
-            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->getValidUntil()));
+        if ($this->validUntil !== null) {
+            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->validUntil));
         }
 
-        if ($this->getCacheDuration() !== null) {
-            $e->setAttribute('cacheDuration', $this->getCacheDuration());
+        if ($this->cacheDuration !== null) {
+            $e->setAttribute('cacheDuration', $this->cacheDuration);
         }
 
-        Extensions::addList($e, $this->getExtensions());
+        Extensions::addList($e, $this->Extensions);
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:AffiliateMember', false, $this->getAffiliateMember());
+        Utils::addStrings($e, Constants::NS_MD, 'md:AffiliateMember', false, $this->AffiliateMember);
 
-        foreach ($this->getKeyDescriptor() as $kd) {
+        foreach ($this->KeyDescriptor as $kd) {
             $kd->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeAuthorityDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeAuthorityDescriptor.php
index 244adad925..1d31323567 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeAuthorityDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeAuthorityDescriptor.php
@@ -1,11 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\saml\Attribute;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 metadata AttributeAuthorityDescriptor.
@@ -21,7 +25,7 @@ class AttributeAuthorityDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AttributeService = [];
+    private $AttributeService = [];
 
     /**
      * List of AssertionIDRequestService endpoints.
@@ -30,7 +34,7 @@ class AttributeAuthorityDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AssertionIDRequestService = [];
+    private $AssertionIDRequestService = [];
 
     /**
      * List of supported NameID formats.
@@ -39,7 +43,7 @@ class AttributeAuthorityDescriptor extends RoleDescriptor
      *
      * @var string[]
      */
-    public $NameIDFormat = [];
+    private $NameIDFormat = [];
 
     /**
      * List of supported attribute profiles.
@@ -48,7 +52,7 @@ class AttributeAuthorityDescriptor extends RoleDescriptor
      *
      * @var array
      */
-    public $AttributeProfile = [];
+    private $AttributeProfile = [];
 
     /**
      * List of supported attributes.
@@ -57,7 +61,7 @@ class AttributeAuthorityDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\saml\Attribute[]
      */
-    public $Attribute = [];
+    private $Attribute = [];
 
 
     /**
@@ -66,7 +70,7 @@ class AttributeAuthorityDescriptor extends RoleDescriptor
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('md:AttributeAuthorityDescriptor', $xml);
 
@@ -74,6 +78,7 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AttributeService') as $ep) {
             $this->addAttributeService(new EndpointType($ep));
         }
@@ -81,6 +86,7 @@ public function __construct(\DOMElement $xml = null)
             throw new \Exception('Must have at least one AttributeService in AttributeAuthorityDescriptor.');
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AssertionIDRequestService') as $ep) {
             $this->addAssertionIDRequestService(new EndpointType($ep));
         }
@@ -89,6 +95,7 @@ public function __construct(\DOMElement $xml = null)
 
         $this->setAttributeProfile(Utils::extractStrings($xml, Constants::NS_MD, 'AttributeProfile'));
 
+        /** @var \DOMElement $a */
         foreach (Utils::xpQuery($xml, './saml_assertion:Attribute') as $a) {
             $this->addAttribute(new Attribute($a));
         }
@@ -97,9 +104,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the AttributeService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAttributeService()
+    public function getAttributeService() : array
     {
         return $this->AttributeService;
     }
@@ -107,10 +115,11 @@ public function getAttributeService()
 
     /**
      * Set the value of the AttributeService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $attributeService
      * @return void
      */
-    public function setAttributeService(array $attributeService)
+    public function setAttributeService(array $attributeService) : void
     {
         $this->AttributeService = $attributeService;
     }
@@ -118,21 +127,22 @@ public function setAttributeService(array $attributeService)
 
     /**
      * Add the value to the AttributeService-property
+     *
      * @param \SAML2\XML\md\EndpointType $attributeService
      * @return void
      */
-    public function addAttributeService(EndpointType $attributeService)
+    public function addAttributeService(EndpointType $attributeService) : void
     {
-        Assert::isInstanceOf($attributeService, EndpointType::class);
         $this->AttributeService[] = $attributeService;
     }
 
 
     /**
      * Collect the value of the NameIDFormat-property
+     *
      * @return string[]
      */
-    public function getNameIDFormat()
+    public function getNameIDFormat() : array
     {
         return $this->NameIDFormat;
     }
@@ -140,10 +150,11 @@ public function getNameIDFormat()
 
     /**
      * Set the value of the NameIDFormat-property
+     *
      * @param string[] $nameIDFormat
      * @return void
      */
-    public function setNameIDFormat(array $nameIDFormat)
+    public function setNameIDFormat(array $nameIDFormat) : void
     {
         $this->NameIDFormat = $nameIDFormat;
     }
@@ -151,9 +162,10 @@ public function setNameIDFormat(array $nameIDFormat)
 
     /**
      * Collect the value of the AssertionIDRequestService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAssertionIDRequestService()
+    public function getAssertionIDRequestService() : array
     {
         return $this->AssertionIDRequestService;
     }
@@ -161,10 +173,11 @@ public function getAssertionIDRequestService()
 
     /**
      * Set the value of the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $assertionIDRequestService
      * @return void
      */
-    public function setAssertionIDRequestService(array $assertionIDRequestService)
+    public function setAssertionIDRequestService(array $assertionIDRequestService) : void
     {
         $this->AssertionIDRequestService = $assertionIDRequestService;
     }
@@ -172,21 +185,22 @@ public function setAssertionIDRequestService(array $assertionIDRequestService)
 
     /**
      * Add the value to the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType $assertionIDRequestService
      * @return void
      */
-    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService)
+    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService) : void
     {
-        Assert::isInstanceOf($assertionIDRequestService, EndpointType::class);
         $this->AssertionIDRequestService[] = $assertionIDRequestService;
     }
 
 
     /**
      * Collect the value of the AttributeProfile-property
+     *
      * @return string[]
      */
-    public function getAttributeProfile()
+    public function getAttributeProfile() : array
     {
         return $this->AttributeProfile;
     }
@@ -194,10 +208,11 @@ public function getAttributeProfile()
 
     /**
      * Set the value of the AttributeProfile-property
+     *
      * @param string[] $attributeProfile
      * @return void
      */
-    public function setAttributeProfile(array $attributeProfile)
+    public function setAttributeProfile(array $attributeProfile) : void
     {
         $this->AttributeProfile = $attributeProfile;
     }
@@ -205,9 +220,10 @@ public function setAttributeProfile(array $attributeProfile)
 
     /**
      * Collect the value of the Attribute-property
+     *
      * @return \SAML2\XML\saml\Attribute[]
      */
-    public function getAttribute()
+    public function getAttribute() : array
     {
         return $this->Attribute;
     }
@@ -215,10 +231,11 @@ public function getAttribute()
 
     /**
      * Set the value of the Attribute-property
+     *
      * @param \SAML2\XML\saml\Attribute[] $attribute
      * @return void
      */
-    public function setAttribute(array $attribute)
+    public function setAttribute(array $attribute) : void
     {
         $this->Attribute = $attribute;
     }
@@ -226,12 +243,12 @@ public function setAttribute(array $attribute)
 
     /**
      * Add the value to the Attribute-property
+     *
      * @param \SAML2\XML\saml\Attribute $attribute
      * @return void
      */
-    public function addAttribute(Attribute $attribute)
+    public function addAttribute(Attribute $attribute) : void
     {
-        Assert::isInstanceOf($attribute, Attribute::class);
         $this->Attribute[] = $attribute;
     }
 
@@ -242,30 +259,25 @@ public function addAttribute(Attribute $attribute)
      * @param \DOMElement $parent The EntityDescriptor we should append this IDPSSODescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($attributeService = $this->getAttributeService());
-        Assert::notEmpty($attributeService);
-        Assert::isArray($this->getAssertionIDRequestService());
-        Assert::isArray($this->getNameIDFormat());
-        Assert::isArray($this->getAttributeProfile());
-        Assert::isArray($this->Attribute);
+        Assert::notEmpty($this->AttributeService);
 
         $e = parent::toXML($parent);
 
-        foreach ($this->getAttributeService() as $ep) {
+        foreach ($this->AttributeService as $ep) {
             $ep->toXML($e, 'md:AttributeService');
         }
 
-        foreach ($this->getAssertionIDRequestService() as $ep) {
+        foreach ($this->AssertionIDRequestService as $ep) {
             $ep->toXML($e, 'md:AssertionIDRequestService');
         }
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->getNameIDFormat());
+        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->NameIDFormat);
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:AttributeProfile', false, $this->getAttributeProfile());
+        Utils::addStrings($e, Constants::NS_MD, 'md:AttributeProfile', false, $this->AttributeProfile);
 
-        foreach ($this->getAttribute() as $a) {
+        foreach ($this->Attribute as $a) {
             $a->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeConsumingService.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeConsumingService.php
index e7d64a3f8e..82162e57fd 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeConsumingService.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AttributeConsumingService.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 Metadata AttributeConsumingService element.
@@ -18,14 +21,14 @@ class AttributeConsumingService
      *
      * @var int
      */
-    public $index;
+    private $index;
 
     /**
      * Whether this is the default AttributeConsumingService.
      *
      * @var bool|null
      */
-    public $isDefault = null;
+    private $isDefault = null;
 
     /**
      * The ServiceName of this AttributeConsumingService.
@@ -34,7 +37,7 @@ class AttributeConsumingService
      *
      * @var array
      */
-    public $ServiceName = [];
+    private $ServiceName = [];
 
     /**
      * The ServiceDescription of this AttributeConsumingService.
@@ -43,7 +46,7 @@ class AttributeConsumingService
      *
      * @var array
      */
-    public $ServiceDescription = [];
+    private $ServiceDescription = [];
 
     /**
      * The RequestedAttribute elements.
@@ -52,7 +55,7 @@ class AttributeConsumingService
      *
      * @var \SAML2\XML\md\RequestedAttribute[]
      */
-    public $RequestedAttribute = [];
+    private $RequestedAttribute = [];
 
 
     /**
@@ -61,7 +64,7 @@ class AttributeConsumingService
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -81,6 +84,7 @@ public function __construct(\DOMElement $xml = null)
 
         $this->setServiceDescription(Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'ServiceDescription'));
 
+        /** @var \DOMElement $ra */
         foreach (Utils::xpQuery($xml, './saml_metadata:RequestedAttribute') as $ra) {
             $this->addRequestedAttribute(new RequestedAttribute($ra));
         }
@@ -89,9 +93,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the index-property
+     *
      * @return int
      */
-    public function getIndex()
+    public function getIndex() : int
     {
         return $this->index;
     }
@@ -99,21 +104,22 @@ public function getIndex()
 
     /**
      * Set the value of the index-property
+     *
      * @param int $index
      * @return void
      */
-    public function setIndex($index)
+    public function setIndex(int $index) : void
     {
-        Assert::integer($index);
         $this->index = $index;
     }
 
 
     /**
      * Collect the value of the isDefault-property
-     * @return boolean|null
+     *
+     * @return bool|null
      */
-    public function getIsDefault()
+    public function getIsDefault() : ?bool
     {
         return $this->isDefault;
     }
@@ -121,21 +127,22 @@ public function getIsDefault()
 
     /**
      * Set the value of the isDefault-property
-     * @param boolean|null $flag
+     *
+     * @param bool|null $flag
      * @return void
      */
-    public function setIsDefault($flag = null)
+    public function setIsDefault(bool $flag = null) : void
     {
-        Assert::nullOrBoolean($flag);
         $this->isDefault = $flag;
     }
 
 
     /**
      * Collect the value of the ServiceName-property
+     *
      * @return string[]
      */
-    public function getServiceName()
+    public function getServiceName() : array
     {
         return $this->ServiceName;
     }
@@ -143,10 +150,11 @@ public function getServiceName()
 
     /**
      * Set the value of the ServiceName-property
+     *
      * @param string[] $serviceName
      * @return void
      */
-    public function setServiceName(array $serviceName)
+    public function setServiceName(array $serviceName) : void
     {
         $this->ServiceName = $serviceName;
     }
@@ -154,9 +162,10 @@ public function setServiceName(array $serviceName)
 
     /**
      * Collect the value of the ServiceDescription-property
+     *
      * @return string[]
      */
-    public function getServiceDescription()
+    public function getServiceDescription() : array
     {
         return $this->ServiceDescription;
     }
@@ -164,10 +173,11 @@ public function getServiceDescription()
 
     /**
      * Set the value of the ServiceDescription-property
+     *
      * @param string[] $serviceDescription
      * @return void
      */
-    public function setServiceDescription(array $serviceDescription)
+    public function setServiceDescription(array $serviceDescription) : void
     {
         $this->ServiceDescription = $serviceDescription;
     }
@@ -175,9 +185,10 @@ public function setServiceDescription(array $serviceDescription)
 
     /**
      * Collect the value of the RequestedAttribute-property
+     *
      * @return \SAML2\XML\md\RequestedAttribute[]
      */
-    public function getRequestedAttribute()
+    public function getRequestedAttribute() : array
     {
         return $this->RequestedAttribute;
     }
@@ -185,10 +196,11 @@ public function getRequestedAttribute()
 
     /**
      * Set the value of the RequestedAttribute-property
+     *
      * @param \SAML2\XML\md\RequestedAttribute[] $requestedAttribute
      * @return void
      */
-    public function setRequestedAttribute(array $requestedAttribute)
+    public function setRequestedAttribute(array $requestedAttribute) : void
     {
         $this->RequestedAttribute = $requestedAttribute;
     }
@@ -196,10 +208,11 @@ public function setRequestedAttribute(array $requestedAttribute)
 
     /**
      * Add the value to the RequestedAttribute-property
+     *
      * @param \SAML2\XML\md\RequestedAttribute $requestedAttribute
      * @return void
      */
-    public function addRequestedAttribute(RequestedAttribute $requestedAttribute)
+    public function addRequestedAttribute(RequestedAttribute $requestedAttribute) : void
     {
         $this->RequestedAttribute[] = $requestedAttribute;
     }
@@ -211,14 +224,8 @@ public function addRequestedAttribute(RequestedAttribute $requestedAttribute)
      * @param \DOMElement $parent The element we should append this AttributeConsumingService to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::integer($this->getIndex());
-        Assert::nullOrBoolean($this->getIsDefault());
-        Assert::isArray($this->getServiceName());
-        Assert::isArray($this->getServiceDescription());
-        Assert::isArray($this->getRequestedAttribute());
-
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Constants::NS_MD, 'md:AttributeConsumingService');
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AuthnAuthorityDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AuthnAuthorityDescriptor.php
index 1343b13cd4..89ddd80d68 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AuthnAuthorityDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/AuthnAuthorityDescriptor.php
@@ -1,10 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 metadata AuthnAuthorityDescriptor.
@@ -20,7 +24,7 @@ class AuthnAuthorityDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AuthnQueryService = [];
+    private $AuthnQueryService = [];
 
     /**
      * List of AssertionIDRequestService endpoints.
@@ -29,7 +33,7 @@ class AuthnAuthorityDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AssertionIDRequestService = [];
+    private $AssertionIDRequestService = [];
 
     /**
      * List of supported NameID formats.
@@ -38,7 +42,7 @@ class AuthnAuthorityDescriptor extends RoleDescriptor
      *
      * @var string[]
      */
-    public $NameIDFormat = [];
+    private $NameIDFormat = [];
 
 
     /**
@@ -47,7 +51,7 @@ class AuthnAuthorityDescriptor extends RoleDescriptor
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('md:AuthnAuthorityDescriptor', $xml);
 
@@ -55,6 +59,7 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AuthnQueryService') as $ep) {
             $this->addAuthnQueryService(new EndpointType($ep));
         }
@@ -62,6 +67,7 @@ public function __construct(\DOMElement $xml = null)
             throw new \Exception('Must have at least one AuthnQueryService in AuthnAuthorityDescriptor.');
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AssertionIDRequestService') as $ep) {
             $this->addAssertionIDRequestService(new EndpointType($ep));
         }
@@ -72,9 +78,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the AuthnQueryService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAuthnQueryService()
+    public function getAuthnQueryService() : array
     {
         return $this->AuthnQueryService;
     }
@@ -82,10 +89,11 @@ public function getAuthnQueryService()
 
     /**
      * Set the value of the AuthnQueryService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $authnQueryService
      * @return void
      */
-    public function setAuthnQueryService(array $authnQueryService)
+    public function setAuthnQueryService(array $authnQueryService) : void
     {
         $this->AuthnQueryService = $authnQueryService;
     }
@@ -93,21 +101,22 @@ public function setAuthnQueryService(array $authnQueryService)
 
     /**
      * Add the value to the AuthnQueryService-property
+     *
      * @param \SAML2\XML\md\EndpointType $authnQueryService
      * @return void
      */
-    public function addAuthnQueryService(EndpointType $authnQueryService)
+    public function addAuthnQueryService(EndpointType $authnQueryService) : void
     {
-        Assert::isInstanceOf($authnQueryService, EndpointType::class);
         $this->AuthnQueryService[] = $authnQueryService;
     }
 
 
     /**
      * Collect the value of the AssertionIDRequestService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAssertionIDRequestService()
+    public function getAssertionIDRequestService() : array
     {
         return $this->AssertionIDRequestService;
     }
@@ -115,10 +124,11 @@ public function getAssertionIDRequestService()
 
     /**
      * Set the value of the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $assertionIDRequestService
      * @return void
      */
-    public function setAssertionIDRequestService(array $assertionIDRequestService)
+    public function setAssertionIDRequestService(array $assertionIDRequestService) : void
     {
         $this->AssertionIDRequestService = $assertionIDRequestService;
     }
@@ -126,21 +136,22 @@ public function setAssertionIDRequestService(array $assertionIDRequestService)
 
     /**
      * Add the value to the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType $assertionIDRequestService
      * @return void
      */
-    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService)
+    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService) : void
     {
-        Assert::isInstanceOf($assertionIDRequestService, EndpointType::class);
         $this->AssertionIDRequestService[] = $assertionIDRequestService;
     }
 
 
     /**
      * Collect the value of the NameIDFormat-property
+     *
      * @return string[]
      */
-    public function getNameIDFormat()
+    public function getNameIDFormat() : array
     {
         return $this->NameIDFormat;
     }
@@ -148,10 +159,11 @@ public function getNameIDFormat()
 
     /**
      * Set the value of the NameIDFormat-property
+     *
      * @param string[] $nameIDFormat
      * @return void
      */
-    public function setNameIDFormat(array $nameIDFormat)
+    public function setNameIDFormat(array $nameIDFormat) : void
     {
         $this->NameIDFormat = $nameIDFormat;
     }
@@ -163,24 +175,21 @@ public function setNameIDFormat(array $nameIDFormat)
      * @param \DOMElement $parent The EntityDescriptor we should append this AuthnAuthorityDescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($authnQueryService = $this->getAuthnQueryService());
-        Assert::notEmpty($authnQueryService);
-        Assert::isArray($this->getAssertionIDRequestService());
-        Assert::isArray($this->NameIDFormat);
+        Assert::notEmpty($this->AuthnQueryService);
 
         $e = parent::toXML($parent);
 
-        foreach ($this->getAuthnQueryService() as $ep) {
+        foreach ($this->AuthnQueryService as $ep) {
             $ep->toXML($e, 'md:AuthnQueryService');
         }
 
-        foreach ($this->getAssertionIDRequestService() as $ep) {
+        foreach ($this->AssertionIDRequestService as $ep) {
             $ep->toXML($e, 'md:AssertionIDRequestService');
         }
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->getNameIDFormat());
+        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->NameIDFormat);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/ContactPerson.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/ContactPerson.php
index a0db42dc66..2ad7068548 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/ContactPerson.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/ContactPerson.php
@@ -1,11 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 ContactPerson.
@@ -19,7 +22,7 @@ class ContactPerson
      *
      * @var string
      */
-    public $contactType;
+    private $contactType;
 
     /**
      * Extensions on this element.
@@ -28,49 +31,49 @@ class ContactPerson
      *
      * @var array
      */
-    public $Extensions = [];
+    private $Extensions = [];
 
     /**
      * The Company of this contact.
      *
-     * @var string
+     * @var string|null
      */
-    public $Company = null;
+    private $Company = null;
 
     /**
      * The GivenName of this contact.
      *
-     * @var string
+     * @var string|null
      */
-    public $GivenName = null;
+    private $GivenName = null;
 
     /**
      * The SurName of this contact.
      *
-     * @var string
+     * @var string|null
      */
-    public $SurName = null;
+    private $SurName = null;
 
     /**
      * The EmailAddresses of this contact.
      *
      * @var array
      */
-    public $EmailAddress = [];
+    private $EmailAddress = [];
 
     /**
      * The TelephoneNumbers of this contact.
      *
      * @var array
      */
-    public $TelephoneNumber = [];
+    private $TelephoneNumber = [];
 
     /**
      * Extra attributes on the contact element.
      *
      * @var array
      */
-    public $ContactPersonAttributes = [];
+    private $ContactPersonAttributes = [];
 
 
     /**
@@ -79,7 +82,7 @@ class ContactPerson
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -115,10 +118,8 @@ public function __construct(\DOMElement $xml = null)
      * @param  string     $name   The name of the child elements.
      * @return array      The value of the child elements.
      */
-    private static function getStringElements(\DOMElement $parent, $name)
+    private static function getStringElements(\DOMElement $parent, string $name) : array
     {
-        Assert::string($name);
-
         $e = Utils::xpQuery($parent, './saml_metadata:'.$name);
 
         $ret = [];
@@ -138,10 +139,8 @@ private static function getStringElements(\DOMElement $parent, $name)
      * @throws \Exception
      * @return string|null The value of the child element.
      */
-    private static function getStringElement(\DOMElement $parent, $name)
+    private static function getStringElement(\DOMElement $parent, string $name) : ?string
     {
-        Assert::string($name);
-
         $e = self::getStringElements($parent, $name);
         if (empty($e)) {
             return null;
@@ -156,9 +155,10 @@ private static function getStringElement(\DOMElement $parent, $name)
 
     /**
      * Collect the value of the contactType-property
+     *
      * @return string
      */
-    public function getContactType()
+    public function getContactType() : string
     {
         return $this->contactType;
     }
@@ -166,21 +166,22 @@ public function getContactType()
 
     /**
      * Set the value of the contactType-property
+     *
      * @param string $contactType
      * @return void
      */
-    public function setContactType($contactType)
+    public function setContactType(string $contactType) : void
     {
-        Assert::string($contactType);
         $this->contactType = $contactType;
     }
 
 
     /**
      * Collect the value of the Company-property
+     *
      * @return string|null
      */
-    public function getCompany()
+    public function getCompany() : ?string
     {
         return $this->Company;
     }
@@ -188,21 +189,22 @@ public function getCompany()
 
     /**
      * Set the value of the Company-property
+     *
      * @param string|null $company
      * @return void
      */
-    public function setCompany($company)
+    public function setCompany(string $company = null) : void
     {
-        Assert::nullOrString($company);
         $this->Company = $company;
     }
 
 
     /**
      * Collect the value of the GivenName-property
+     *
      * @return string|null
      */
-    public function getGivenName()
+    public function getGivenName() : ?string
     {
         return $this->GivenName;
     }
@@ -210,21 +212,22 @@ public function getGivenName()
 
     /**
      * Set the value of the GivenName-property
+     *
      * @param string|null $givenName
      * @return void
      */
-    public function setGivenName($givenName)
+    public function setGivenName(string $givenName = null) : void
     {
-        Assert::nullOrString($givenName);
         $this->GivenName = $givenName;
     }
 
 
     /**
      * Collect the value of the SurName-property
+     *
      * @return string|null
      */
-    public function getSurName()
+    public function getSurName() : ?string
     {
         return $this->SurName;
     }
@@ -232,21 +235,22 @@ public function getSurName()
 
     /**
      * Set the value of the SurName-property
+     *
      * @param string|null $surName
      * @return void
      */
-    public function setSurName($surName)
+    public function setSurName(string $surName = null) : void
     {
-        Assert::nullOrString($surName);
         $this->SurName = $surName;
     }
 
 
     /**
      * Collect the value of the EmailAddress-property
+     *
      * @return string[]
      */
-    public function getEmailAddress()
+    public function getEmailAddress() : array
     {
         return $this->EmailAddress;
     }
@@ -254,10 +258,11 @@ public function getEmailAddress()
 
     /**
      * Set the value of the EmailAddress-property
+     *
      * @param string[] $emailAddress
      * @return void
      */
-    public function setEmailAddress(array $emailAddress)
+    public function setEmailAddress(array $emailAddress) : void
     {
         $emailAddress = preg_replace('/^mailto:/i', '', $emailAddress);
         $this->EmailAddress = $emailAddress;
@@ -266,10 +271,11 @@ public function setEmailAddress(array $emailAddress)
 
     /**
      * Add the value to the EmailAddress-property
+     *
      * @param string $emailAddress
      * @return void
      */
-    public function addEmailAddress($emailAddress)
+    public function addEmailAddress($emailAddress) : void
     {
         $emailAddress = preg_replace('/^mailto:/i', '', $emailAddress);
         $this->EmailAddress[] = $emailAddress;
@@ -278,9 +284,10 @@ public function addEmailAddress($emailAddress)
 
     /**
      * Collect the value of the TelephoneNumber-property
+     *
      * @return string[]
      */
-    public function getTelephoneNumber()
+    public function getTelephoneNumber() : array
     {
         return $this->TelephoneNumber;
     }
@@ -288,10 +295,11 @@ public function getTelephoneNumber()
 
     /**
      * Set the value of the TelephoneNumber-property
+     *
      * @param string[] $telephoneNumber
      * @return void
      */
-    public function setTelephoneNumber(array $telephoneNumber)
+    public function setTelephoneNumber(array $telephoneNumber) : void
     {
         $this->TelephoneNumber = $telephoneNumber;
     }
@@ -299,10 +307,11 @@ public function setTelephoneNumber(array $telephoneNumber)
 
     /**
      * Add the value to the TelephoneNumber-property
+     *
      * @param string $telephoneNumber
      * @return void
      */
-    public function addTelephoneNumber($telephoneNumber)
+    public function addTelephoneNumber($telephoneNumber) : void
     {
         $this->TelephoneNumber[] = $telephoneNumber;
     }
@@ -310,9 +319,10 @@ public function addTelephoneNumber($telephoneNumber)
 
     /**
      * Collect the value of the Extensions-property
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->Extensions;
     }
@@ -320,10 +330,11 @@ public function getExtensions()
 
     /**
      * Set the value of the Extensions-property
+     *
      * @param array $extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->Extensions = $extensions;
     }
@@ -335,7 +346,7 @@ public function setExtensions(array $extensions)
      * @param \SAML2\XML\Chunk $extensions The Extensions
      * @return void
      */
-    public function addExtension(Chunk $extension)
+    public function addExtension(Chunk $extension) : void
     {
         $this->Extensions[] = $extension;
     }
@@ -343,9 +354,10 @@ public function addExtension(Chunk $extension)
 
     /**
      * Collect the value of the ContactPersonAttributes-property
+     *
      * @return string[]
      */
-    public function getContactPersonAttributes()
+    public function getContactPersonAttributes() : array
     {
         return $this->ContactPersonAttributes;
     }
@@ -353,10 +365,11 @@ public function getContactPersonAttributes()
 
     /**
      * Set the value of the ContactPersonAttributes-property
+     *
      * @param string[] $contactPersonAttributes
      * @return void
      */
-    public function setContactPersonAttributes(array $contactPersonAttributes)
+    public function setContactPersonAttributes(array $contactPersonAttributes) : void
     {
         $this->ContactPersonAttributes = $contactPersonAttributes;
     }
@@ -364,14 +377,13 @@ public function setContactPersonAttributes(array $contactPersonAttributes)
 
     /**
      * Add the key/value of the ContactPersonAttributes-property
+     *
      * @param string $attr
      * @param string $value
      * @return void
      */
-    public function addContactPersonAttributes($attr, $value)
+    public function addContactPersonAttributes(string $attr, string $value) : void
     {
-        Assert::string($attr);
-        Assert::string($value);
         $this->ContactPersonAttributes[$attr] = $value;
     }
 
@@ -382,17 +394,8 @@ public function addContactPersonAttributes($attr, $value)
      * @param  \DOMElement $parent The element we should add this contact to.
      * @return \DOMElement The new ContactPerson-element.
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getContactType());
-        Assert::isArray($this->getExtensions());
-        Assert::nullOrString($this->getCompany());
-        Assert::nullOrString($this->getGivenName());
-        Assert::nullOrString($this->getSurName());
-        Assert::isArray($this->getEmailAddress());
-        Assert::isArray($this->getTelephoneNumber());
-        Assert::isArray($this->getContactPersonAttributes());
-
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Constants::NS_MD, 'md:ContactPerson');
@@ -406,22 +409,22 @@ public function toXML(\DOMElement $parent)
 
         Extensions::addList($e, $this->getExtensions());
 
-        if ($this->getCompany() !== null) {
-            Utils::addString($e, Constants::NS_MD, 'md:Company', $this->getCompany());
+        if ($this->Company !== null) {
+            Utils::addString($e, Constants::NS_MD, 'md:Company', $this->Company);
         }
-        if ($this->getGivenName() !== null) {
-            Utils::addString($e, Constants::NS_MD, 'md:GivenName', $this->getGivenName());
+        if ($this->GivenName !== null) {
+            Utils::addString($e, Constants::NS_MD, 'md:GivenName', $this->GivenName);
         }
-        if ($this->getSurName() !== null) {
-            Utils::addString($e, Constants::NS_MD, 'md:SurName', $this->getSurName());
+        if ($this->SurName !== null) {
+            Utils::addString($e, Constants::NS_MD, 'md:SurName', $this->SurName);
         }
-        if ($this->getEmailAddress() !== null) {
+        if (!empty($this->getEmailAddress())) {
             /** @var array $addresses */
             $addresses = preg_filter('/^/', 'mailto:', $this->EmailAddress);
 
             Utils::addStrings($e, Constants::NS_MD, 'md:EmailAddress', false, $addresses);
         }
-        if ($this->getTelephoneNumber() !== null) {
+        if (!empty($this->getTelephoneNumber())) {
             Utils::addStrings($e, Constants::NS_MD, 'md:TelephoneNumber', false, $this->getTelephoneNumber());
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EndpointType.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EndpointType.php
index 2985b73443..7b0832d2aa 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EndpointType.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EndpointType.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 EndpointType.
@@ -15,23 +18,23 @@ class EndpointType
     /**
      * The binding for this endpoint.
      *
-     * @var string
+     * @var string|null
      */
-    public $Binding;
+    private $Binding = null;
 
     /**
      * The URI to this endpoint.
      *
-     * @var string
+     * @var string|null
      */
-    public $Location;
+    private $Location = null;
 
     /**
      * The URI where responses can be delivered.
      *
      * @var string|null
      */
-    public $ResponseLocation = null;
+    private $ResponseLocation = null;
 
     /**
      * Extra (namespace qualified) attributes.
@@ -47,7 +50,7 @@ class EndpointType
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -56,15 +59,15 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('Binding')) {
             throw new \Exception('Missing Binding on '.$xml->tagName);
         }
-        $this->setBinding($xml->getAttribute('Binding'));
+        $this->Binding = $xml->getAttribute('Binding');
 
         if (!$xml->hasAttribute('Location')) {
             throw new \Exception('Missing Location on '.$xml->tagName);
         }
-        $this->setLocation($xml->getAttribute('Location'));
+        $this->Location = $xml->getAttribute('Location');
 
         if ($xml->hasAttribute('ResponseLocation')) {
-            $this->setResponseLocation($xml->getAttribute('ResponseLocation'));
+            $this->ResponseLocation = $xml->getAttribute('ResponseLocation');
         }
 
         foreach ($xml->attributes as $a) {
@@ -84,15 +87,12 @@ public function __construct(\DOMElement $xml = null)
     /**
      * Check if a namespace-qualified attribute exists.
      *
-     * @param  string  $namespaceURI The namespace URI.
-     * @param  string  $localName    The local name.
-     * @return boolean true if the attribute exists, false if not.
+     * @param string $namespaceURI The namespace URI.
+     * @param string $localName The local name.
+     * @return bool true if the attribute exists, false if not.
      */
-    public function hasAttributeNS($namespaceURI, $localName)
+    public function hasAttributeNS(string $namespaceURI, string $localName) : bool
     {
-        Assert::string($namespaceURI);
-        Assert::string($localName);
-
         $fullName = '{'.$namespaceURI.'}'.$localName;
 
         return isset($this->attributes[$fullName]);
@@ -102,15 +102,12 @@ public function hasAttributeNS($namespaceURI, $localName)
     /**
      * Get a namespace-qualified attribute.
      *
-     * @param  string $namespaceURI The namespace URI.
-     * @param  string $localName    The local name.
+     * @param string $namespaceURI The namespace URI.
+     * @param string $localName The local name.
      * @return string The value of the attribute, or an empty string if the attribute does not exist.
      */
-    public function getAttributeNS($namespaceURI, $localName)
+    public function getAttributeNS(string $namespaceURI, string $localName) : string
     {
-        Assert::string($namespaceURI);
-        Assert::string($localName);
-
         $fullName = '{'.$namespaceURI.'}'.$localName;
         if (!isset($this->attributes[$fullName])) {
             return '';
@@ -125,15 +122,12 @@ public function getAttributeNS($namespaceURI, $localName)
      *
      * @param string $namespaceURI  The namespace URI.
      * @param string $qualifiedName The local name.
-     * @param string $value         The attribute value.
+     * @param string $value The attribute value.
      * @throws \Exception
      * @return void
      */
-    public function setAttributeNS($namespaceURI, $qualifiedName, $value)
+    public function setAttributeNS(string $namespaceURI, string $qualifiedName, string $value) : void
     {
-        Assert::string($namespaceURI);
-        Assert::string($qualifiedName);
-
         $name = explode(':', $qualifiedName, 2);
         if (count($name) < 2) {
             throw new \Exception('Not a qualified name.');
@@ -153,81 +147,80 @@ public function setAttributeNS($namespaceURI, $qualifiedName, $value)
      * Remove a namespace-qualified attribute.
      *
      * @param string $namespaceURI The namespace URI.
-     * @param string $localName    The local name.
+     * @param string $localName The local name.
      * @return void
      */
-    public function removeAttributeNS($namespaceURI, $localName)
+    public function removeAttributeNS(string $namespaceURI, string $localName) : void
     {
-        Assert::string($namespaceURI);
-        assert::string($localName);
-
         $fullName = '{'.$namespaceURI.'}'.$localName;
         unset($this->attributes[$fullName]);
     }
 
 
     /**
-     * Collect the value of the Binding-property
-     * @return string
+     * Collect the value of the Binding property.
+     *
+     * @return string|null
      */
-    public function getBinding()
+    public function getBinding() : ?string
     {
         return $this->Binding;
     }
 
 
     /**
-     * Set the value of the Binding-property
+     * Set the value of the Binding property.
+     *
      * @param string $binding
      * @return void
      */
-    public function setBinding($binding)
+    public function setBinding(string $binding) : void
     {
-        Assert::string($binding);
         $this->Binding = $binding;
     }
 
 
     /**
-     * Collect the value of the Location-property
+     * Collect the value of the Location property.
+     *
      * @return string|null
      */
-    public function getLocation()
+    public function getLocation() : ?string
     {
         return $this->Location;
     }
 
 
     /**
-     * Set the value of the Location-property
+     * Set the value of the Location-property.
      * @param string|null $location
      * @return void
      */
-    public function setLocation($location)
+    public function setLocation(string $location = null) : void
     {
-        Assert::nullOrString($location);
         $this->Location = $location;
     }
 
 
     /**
-     * Collect the value of the ResponseLocation-property
+     * Collect the value of the ResponseLocation property.
+     *
      * @return string|null
      */
-    public function getResponseLocation()
+    public function getResponseLocation() : ?string
     {
         return $this->ResponseLocation;
     }
 
 
     /**
-     * Set the value of the ResponseLocation-property
+     * Set the value of the ResponseLocation property.
+     *
      * @param string|null $responseLocation
      * @return void
      */
-    public function setResponseLocation($responseLocation)
+    public function setResponseLocation(string $responseLocation = null) : void
     {
-        Assert::nullOrString($responseLocation);
         $this->ResponseLocation = $responseLocation;
     }
 
@@ -236,24 +229,26 @@ public function setResponseLocation($responseLocation)
      * Add this endpoint to an XML element.
      *
      * @param \DOMElement $parent The element we should append this endpoint to.
-     * @param string     $name   The name of the element we should create.
+     * @param string $name The name of the element we should create.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent, $name)
+    public function toXML(DOMElement $parent, string $name) : DOMElement
     {
-        Assert::string($name);
-        Assert::string($this->getBinding());
-        Assert::string($this->getLocation());
-        Assert::nullOrString($this->getResponseLocation());
-
         $e = $parent->ownerDocument->createElementNS(Constants::NS_MD, $name);
         $parent->appendChild($e);
 
-        $e->setAttribute('Binding', $this->getBinding());
-        $e->setAttribute('Location', $this->getLocation());
+        if (empty($this->Binding)) {
+            throw new \Exception('Cannot convert endpoint to XML without a Binding set.');
+        }
+        if (empty($this->Location)) {
+            throw new \Exception('Cannot convert endpoint to XML without a Location set.');
+        }
+
+        $e->setAttribute('Binding', $this->Binding);
+        $e->setAttribute('Location', $this->Location);
 
-        if ($this->getResponseLocation() !== null) {
-            $e->setAttribute('ResponseLocation', $this->getResponseLocation());
+        if ($this->ResponseLocation !== null) {
+            $e->setAttribute('ResponseLocation', $this->ResponseLocation);
         }
 
         foreach ($this->attributes as $a) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntitiesDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntitiesDescriptor.php
index 139b11c280..a1b1cce253 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntitiesDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntitiesDescriptor.php
@@ -1,13 +1,17 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\DOMDocumentFactory;
 use SAML2\SignedElementHelper;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 EntitiesDescriptor element.
@@ -21,28 +25,14 @@ class EntitiesDescriptor extends SignedElementHelper
      *
      * @var string|null
      */
-    public $ID;
-
-    /**
-     * How long this element is valid, as a unix timestamp.
-     *
-     * @var int|null
-     */
-    public $validUntil;
-
-    /**
-     * The length of time this element can be cached, as string.
-     *
-     * @var string|null
-     */
-    public $cacheDuration;
+    private $ID = null;
 
     /**
      * The name of this entity collection.
      *
      * @var string|null
      */
-    public $Name;
+    private $Name = null;
 
     /**
      * Extensions on this element.
@@ -51,14 +41,14 @@ class EntitiesDescriptor extends SignedElementHelper
      *
      * @var array
      */
-    public $Extensions = [];
+    private $Extensions = [];
 
     /**
      * Child EntityDescriptor and EntitiesDescriptor elements.
      *
      * @var (\SAML2\XML\md\EntityDescriptor|\SAML2\XML\md\EntitiesDescriptor)[]
      */
-    public $children = [];
+    private $children = [];
 
 
     /**
@@ -66,7 +56,7 @@ class EntitiesDescriptor extends SignedElementHelper
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct($xml);
 
@@ -75,20 +65,21 @@ public function __construct(\DOMElement $xml = null)
         }
 
         if ($xml->hasAttribute('ID')) {
-            $this->setID($xml->getAttribute('ID'));
+            $this->ID = $xml->getAttribute('ID');
         }
         if ($xml->hasAttribute('validUntil')) {
-            $this->setValidUntil(Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')));
+            $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil'));
         }
         if ($xml->hasAttribute('cacheDuration')) {
-            $this->setCacheDuration($xml->getAttribute('cacheDuration'));
+            $this->cacheDuration = $xml->getAttribute('cacheDuration');
         }
         if ($xml->hasAttribute('Name')) {
-            $this->setName($xml->getAttribute('Name'));
+            $this->Name = $xml->getAttribute('Name');
         }
 
-        $this->setExtensions(Extensions::getList($xml));
+        $this->Extensions = Extensions::getList($xml);
 
+        /** @var \DOMElement $node */
         foreach (Utils::xpQuery($xml, './saml_metadata:EntityDescriptor|./saml_metadata:EntitiesDescriptor') as $node) {
             if ($node->localName === 'EntityDescriptor') {
                 $this->children[] = new EntityDescriptor($node);
@@ -100,45 +91,47 @@ public function __construct(\DOMElement $xml = null)
 
 
     /**
-     * Collect the value of the Name-property
+     * Collect the value of the Name property.
+     *
      * @return string|null
      */
-    public function getName()
+    public function getName() : ?string
     {
         return $this->Name;
     }
 
 
     /**
-     * Set the value of the Name-property
+     * Set the value of the Name property.
+     *
      * @param string|null $name
      * @return void
      */
-    public function setName($name = null)
+    public function setName(string $name = null) : void
     {
-        Assert::nullOrString($name);
         $this->Name = $name;
     }
 
 
     /**
-     * Collect the value of the ID-property
+     * Collect the value of the ID property.
+     *
      * @return string|null
      */
-    public function getID()
+    public function getID() : ?string
     {
         return $this->ID;
     }
 
 
     /**
-     * Set the value of the ID-property
+     * Set the value of the ID property.
+     *
      * @param string|null $Id
      * @return void
      */
-    public function setID($Id = null)
+    public function setID(string $Id = null) : void
     {
-        Assert::nullOrString($Id);
         $this->ID = $Id;
     }
 
@@ -147,7 +140,7 @@ public function setID($Id = null)
      * Collect the value of the validUntil-property
      * @return int|null
      */
-    public function getValidUntil()
+    public function getValidUntil() : ?int
     {
         return $this->validUntil;
     }
@@ -158,9 +151,8 @@ public function getValidUntil()
      * @param int|null $validUntil
      * @return void
      */
-    public function setValidUntil($validUntil = null)
+    public function setValidUntil(int $validUntil = null) : void
     {
-        Assert::nullOrInteger($validUntil);
         $this->validUntil = $validUntil;
     }
 
@@ -169,7 +161,7 @@ public function setValidUntil($validUntil = null)
      * Collect the value of the cacheDuration-property
      * @return string|null
      */
-    public function getCacheDuration()
+    public function getCacheDuration() : ?string
     {
         return $this->cacheDuration;
     }
@@ -180,29 +172,30 @@ public function getCacheDuration()
      * @param string|null $cacheDuration
      * @return void
      */
-    public function setCacheDuration($cacheDuration = null)
+    public function setCacheDuration(string $cacheDuration = null) : void
     {
-        Assert::nullOrString($cacheDuration);
         $this->cacheDuration = $cacheDuration;
     }
 
 
     /**
-     * Collect the value of the Extensions-property
+     * Collect the value of the Extensions property.
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->Extensions;
     }
 
 
     /**
-     * Set the value of the Extensions-property
+     * Set the value of the Extensions property.
+     *
      * @param array $extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->Extensions = $extensions;
     }
@@ -214,39 +207,42 @@ public function setExtensions(array $extensions)
      * @param \SAML2\XML\Chunk $extensions The Extensions
      * @return void
      */
-    public function addExtension(Extensions $extension)
+    public function addExtension(Extensions $extension) : void
     {
         $this->Extensions[] = $extension;
     }
 
 
     /**
-     * Collect the value of the children-property
+     * Collect the value of the children property.
+     *
      * @return (\SAML2\XML\md\EntityDescriptor|\SAML2\XML\md\EntitiesDescriptor)[]
      */
-    public function getChildren()
+    public function getChildren() : array
     {
         return $this->children;
     }
 
 
     /**
-     * Set the value of the childen-property
+     * Set the value of the childen property.
+     *
      * @param array $children
      * @return void
      */
-    public function setChildren(array $children)
+    public function setChildren(array $children) : void
     {
         $this->children = $children;
     }
 
 
     /**
-     * Add the value to the children-property
+     * Add the value to the children property.
+     *
      * @param \SAML2\XML\md\EntityDescriptor|\SAML2\XML\md\EntitiesDescriptor $child
      * @return void
      */
-    public function addChildren($child)
+    public function addChildren($child) : void
     {
         Assert::isInstanceOfAny($child, [EntityDescriptor::class, EntitiesDescriptor::class]);
         $this->children[] = $child;
@@ -259,15 +255,8 @@ public function addChildren($child)
      * @param \DOMElement|null $parent The EntitiesDescriptor we should append this EntitiesDescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent = null)
+    public function toXML(DOMElement $parent = null) : DOMElement
     {
-        Assert::nullOrString($this->getID());
-        Assert::nullOrInteger($this->getValidUntil());
-        Assert::nullOrString($this->getCacheDuration());
-        Assert::nullOrString($this->getName());
-        Assert::isArray($this->getExtensions());
-        Assert::isArray($this->getChildren());
-
         if ($parent === null) {
             $doc = DOMDocumentFactory::create();
             $e = $doc->createElementNS(Constants::NS_MD, 'md:EntitiesDescriptor');
@@ -277,26 +266,26 @@ public function toXML(\DOMElement $parent = null)
             $parent->appendChild($e);
         }
 
-        if ($this->getID() !== null) {
-            $e->setAttribute('ID', $this->getID());
+        if ($this->ID !== null) {
+            $e->setAttribute('ID', $this->ID);
         }
 
-        if ($this->getValidUntil() !== null) {
-            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->getValidUntil()));
+        if ($this->validUntil !== null) {
+            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->validUntil));
         }
 
-        if ($this->getCacheDuration() !== null) {
-            $e->setAttribute('cacheDuration', $this->getCacheDuration());
+        if ($this->cacheDuration !== null) {
+            $e->setAttribute('cacheDuration', $this->cacheDuration);
         }
 
-        if ($this->getName() !== null) {
-            $e->setAttribute('Name', $this->getName());
+        if ($this->Name !== null) {
+            $e->setAttribute('Name', $this->Name);
         }
 
-        Extensions::addList($e, $this->getExtensions());
+        Extensions::addList($e, $this->Extensions);
 
         /** @var \SAML2\XML\md\EntityDescriptor|\SAML2\XML\md\EntitiesDescriptor $node */
-        foreach ($this->getChildren() as $node) {
+        foreach ($this->children as $node) {
             $node->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntityDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntityDescriptor.php
index 094dc21593..7ed69997d3 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntityDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/EntityDescriptor.php
@@ -1,15 +1,16 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\DOMDocumentFactory;
 use SAML2\SignedElementHelper;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
-use SAML2\XML\md\AffiliationDescriptor;
-use SAML2\XML\md\Organization;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 EntityDescriptor element.
@@ -23,28 +24,14 @@ class EntityDescriptor extends SignedElementHelper
      *
      * @var string
      */
-    public $entityID;
+    private $entityID;
 
     /**
      * The ID of this element.
      *
      * @var string|null
      */
-    public $ID;
-
-    /**
-     * How long this element is valid, as a unix timestamp.
-     *
-     * @var int|null
-     */
-    public $validUntil;
-
-    /**
-     * The length of time this element can be cached, as string.
-     *
-     * @var string|null
-     */
-    public $cacheDuration;
+    private $ID = null;
 
     /**
      * Extensions on this element.
@@ -53,44 +40,44 @@ class EntityDescriptor extends SignedElementHelper
      *
      * @var array
      */
-    public $Extensions = [];
+    private $Extensions = [];
 
     /**
      * Array with all roles for this entity.
      *
      * Array of \SAML2\XML\md\RoleDescriptor objects (and subclasses of RoleDescriptor).
      *
-     * @var (\SAML2\XML\md\UnknownRoleDescriptor|\SAML2\XML\md\IDPSSODescriptor|\SAML2\XML\md\SPSSODescriptor|\SAML2\XML\md\AuthnAuthorityDescriptor|\SAML2\XML\md\AttributeAuthorityDescriptor|\SAML2\XML\md\PDPDescriptor)[]
+     * @var \SAML2\XML\md\RoleDescriptor[]
      */
-    public $RoleDescriptor = [];
+    private $RoleDescriptor = [];
 
     /**
      * AffiliationDescriptor of this entity.
      *
      * @var \SAML2\XML\md\AffiliationDescriptor|null
      */
-    public $AffiliationDescriptor = null;
+    private $AffiliationDescriptor = null;
 
     /**
      * Organization of this entity.
      *
      * @var \SAML2\XML\md\Organization|null
      */
-    public $Organization = null;
+    private $Organization = null;
 
     /**
      * ContactPerson elements for this entity.
      *
      * @var \SAML2\XML\md\ContactPerson[]
      */
-    public $ContactPerson = [];
+    private $ContactPerson = [];
 
     /**
      * AdditionalMetadataLocation elements for this entity.
      *
      * @var \SAML2\XML\md\AdditionalMetadataLocation[]
      */
-    public $AdditionalMetadataLocation = [];
+    private $AdditionalMetadataLocation = [];
 
 
     /**
@@ -99,7 +86,7 @@ class EntityDescriptor extends SignedElementHelper
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct($xml);
 
@@ -110,22 +97,22 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('entityID')) {
             throw new \Exception('Missing required attribute entityID on EntityDescriptor.');
         }
-        $this->setEntityID($xml->getAttribute('entityID'));
+        $this->entityID = $xml->getAttribute('entityID');
 
         if ($xml->hasAttribute('ID')) {
-            $this->setID($xml->getAttribute('ID'));
+            $this->ID = $xml->getAttribute('ID');
         }
         if ($xml->hasAttribute('validUntil')) {
-            $this->setValidUntil(Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')));
+            $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil'));
         }
         if ($xml->hasAttribute('cacheDuration')) {
-            $this->setCacheDuration($xml->getAttribute('cacheDuration'));
+            $this->cacheDuration = $xml->getAttribute('cacheDuration');
         }
 
-        $this->setExtensions(Extensions::getList($xml));
+        $this->Extensions = Extensions::getList($xml);
 
-        for ($node = $xml->firstChild; $node !== null; $node = $node->nextSibling) {
-            if (!($node instanceof \DOMElement)) {
+        foreach ($xml->childNodes as $node) {
+            if (!($node instanceof DOMElement)) {
                 continue;
             }
 
@@ -135,62 +122,62 @@ public function __construct(\DOMElement $xml = null)
 
             switch ($node->localName) {
                 case 'RoleDescriptor':
-                    $this->addRoleDescriptor(new UnknownRoleDescriptor($node));
+                    $this->RoleDescriptor[] = new UnknownRoleDescriptor($node);
                     break;
                 case 'IDPSSODescriptor':
-                    $this->addRoleDescriptor(new IDPSSODescriptor($node));
+                    $this->RoleDescriptor[] = new IDPSSODescriptor($node);
                     break;
                 case 'SPSSODescriptor':
-                    $this->addRoleDescriptor(new SPSSODescriptor($node));
+                    $this->RoleDescriptor[] = new SPSSODescriptor($node);
                     break;
                 case 'AuthnAuthorityDescriptor':
-                    $this->addRoleDescriptor(new AuthnAuthorityDescriptor($node));
+                    $this->RoleDescriptor[] = new AuthnAuthorityDescriptor($node);
                     break;
                 case 'AttributeAuthorityDescriptor':
-                    $this->addRoleDescriptor(new AttributeAuthorityDescriptor($node));
+                    $this->RoleDescriptor[] = new AttributeAuthorityDescriptor($node);
                     break;
                 case 'PDPDescriptor':
-                    $this->addRoleDescriptor(new PDPDescriptor($node));
+                    $this->RoleDescriptor[] = new PDPDescriptor($node);
+                    break;
+                case 'AffiliationDescriptor':
+                    if ($this->AffiliationDescriptor !== null) {
+                        throw new \Exception('More than one AffiliationDescriptor in the entity.');
+                    }
+                    $this->AffiliationDescriptor = new AffiliationDescriptor($node);
+                    break;
+                case 'Organization':
+                    if ($this->Organization !== null) {
+                        throw new \Exception('More than one Organization in the entity.');
+                    }
+                    $this->Organization = new Organization($node);
+                    break;
+                case 'ContactPerson':
+                    $this->ContactPerson[] = new ContactPerson($node);
+                    break;
+                case 'AdditionalMetadataLocation':
+                    $this->AdditionalMetadataLocation[] = new AdditionalMetadataLocation($node);
                     break;
             }
         }
 
-        $affiliationDescriptor = Utils::xpQuery($xml, './saml_metadata:AffiliationDescriptor');
-        if (count($affiliationDescriptor) > 1) {
-            throw new \Exception('More than one AffiliationDescriptor in the entity.');
-        } elseif (!empty($affiliationDescriptor)) {
-            $this->setAffiliationDescriptor(new AffiliationDescriptor($affiliationDescriptor[0]));
-        }
-
-        $roleDescriptor = $this->getRoleDescriptor();
-        if (empty($roleDescriptor) && is_null($this->getAffiliationDescriptor())) {
-            throw new \Exception('Must have either one of the RoleDescriptors or an AffiliationDescriptor in EntityDescriptor.');
-        } elseif (!empty($roleDescriptor) && !is_null($this->getAffiliationDescriptor())) {
-            throw new \Exception('AffiliationDescriptor cannot be combined with other RoleDescriptor elements in EntityDescriptor.');
-        }
-
-        $organization = Utils::xpQuery($xml, './saml_metadata:Organization');
-        if (count($organization) > 1) {
-            throw new \Exception('More than one Organization in the entity.');
-        } elseif (!empty($organization)) {
-            $this->setOrganization(new Organization($organization[0]));
-        }
-
-        foreach (Utils::xpQuery($xml, './saml_metadata:ContactPerson') as $cp) {
-            $this->addContactPerson(new ContactPerson($cp));
-        }
-
-        foreach (Utils::xpQuery($xml, './saml_metadata:AdditionalMetadataLocation') as $aml) {
-            $this->addAdditionalMetadataLocation(new AdditionalMetadataLocation($aml));
+        if (empty($this->RoleDescriptor) && is_null($this->AffiliationDescriptor)) {
+            throw new \Exception(
+                'Must have either one of the RoleDescriptors or an AffiliationDescriptor in EntityDescriptor.'
+            );
+        } elseif (!empty($this->RoleDescriptor) && !is_null($this->AffiliationDescriptor)) {
+            throw new \Exception(
+                'AffiliationDescriptor cannot be combined with other RoleDescriptor elements in EntityDescriptor.'
+            );
         }
     }
 
 
     /**
-     * Collect the value of the entityID-property
+     * Collect the value of the entityID property.
+     *
      * @return string
      */
-    public function getEntityID()
+    public function getEntityID() : string
     {
         return $this->entityID;
     }
@@ -198,34 +185,34 @@ public function getEntityID()
 
     /**
      * Set the value of the entityID-property
-     * @param string|null $entityId
+     * @param string $entityId
      * @return void
      */
-    public function setEntityID($entityId)
+    public function setEntityID(string $entityId) : void
     {
-        Assert::nullOrString($entityId);
         $this->entityID = $entityId;
     }
 
 
     /**
-     * Collect the value of the ID-property
+     * Collect the value of the ID property.
+     *
      * @return string|null
      */
-    public function getID()
+    public function getID() : ?string
     {
         return $this->ID;
     }
 
 
     /**
-     * Set the value of the ID-property
+     * Set the value of the ID property.
+     *
      * @param string|null $Id
      * @return void
      */
-    public function setID($Id = null)
+    public function setID(string $Id = null) : void
     {
-        Assert::nullOrString($Id);
         $this->ID = $Id;
     }
 
@@ -234,7 +221,7 @@ public function setID($Id = null)
      * Collect the value of the validUntil-property
      * @return int|null
      */
-    public function getValidUntil()
+    public function getValidUntil() : ?int
     {
         return $this->validUntil;
     }
@@ -245,9 +232,8 @@ public function getValidUntil()
      * @param int|null $validUntil
      * @return void
      */
-    public function setValidUntil($validUntil = null)
+    public function setValidUntil(int $validUntil = null) : void
     {
-        Assert::nullOrInteger($validUntil);
         $this->validUntil = $validUntil;
     }
 
@@ -256,7 +242,7 @@ public function setValidUntil($validUntil = null)
      * Collect the value of the cacheDuration-property
      * @return string|null
      */
-    public function getCacheDuration()
+    public function getCacheDuration() : ?string
     {
         return $this->cacheDuration;
     }
@@ -267,29 +253,30 @@ public function getCacheDuration()
      * @param string|null $cacheDuration
      * @return void
      */
-    public function setCacheDuration($cacheDuration = null)
+    public function setCacheDuration(string $cacheDuration = null) : void
     {
-        Assert::nullOrString($cacheDuration);
         $this->cacheDuration = $cacheDuration;
     }
 
 
     /**
-     * Collect the value of the Extensions-property
+     * Collect the value of the Extensions property.
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->Extensions;
     }
 
 
     /**
-     * Set the value of the Extensions-property
+     * Set the value of the Extensions property.
+     *
      * @param array $extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->Extensions = $extensions;
     }
@@ -301,145 +288,158 @@ public function setExtensions(array $extensions)
      * @param \SAML2\XML\Chunk $extensions The Extensions
      * @return void
      */
-    public function addExtension(Extensions $extension)
+    public function addExtension(Extensions $extension) : void
     {
         $this->Extensions[] = $extension;
     }
 
 
     /**
-     * Collect the value of the RoleDescriptor-property
+     * Collect the value of the RoleDescriptor property.
+     *
      * @return \SAML2\XML\md\RoleDescriptor[]
      */
-    public function getRoleDescriptor()
+    public function getRoleDescriptor() : array
     {
         return $this->RoleDescriptor;
     }
 
 
     /**
-     * Set the value of the RoleDescriptor-property
-     * @param array $roleDescriptor
+     * Set the value of the RoleDescriptor property.
+     *
+     * @param \SAML2\XML\md\RoleDescriptor[] $roleDescriptor
      * @return void
      */
-    public function setRoleDescriptor(array $roleDescriptor)
+    public function setRoleDescriptor(array $roleDescriptor) : void
     {
         $this->RoleDescriptor = $roleDescriptor;
     }
 
 
     /**
-     * Add the value to the RoleDescriptor-property
+     * Add the value to the RoleDescriptor property.
+     *
      * @param \SAML2\XML\md\RoleDescriptor $roleDescriptor
      * @return void
      */
-    public function addRoleDescriptor(RoleDescriptor $roleDescriptor)
+    public function addRoleDescriptor(RoleDescriptor $roleDescriptor) : void
     {
         $this->RoleDescriptor[] = $roleDescriptor;
     }
 
 
     /**
-     * Collect the value of the AffiliationDescriptor-property
+     * Collect the value of the AffiliationDescriptor property.
+     *
      * @return \SAML2\XML\md\AffiliationDescriptor|null
      */
-    public function getAffiliationDescriptor()
+    public function getAffiliationDescriptor() : ?AffiliationDescriptor
     {
         return $this->AffiliationDescriptor;
     }
 
 
     /**
-     * Set the value of the AffliationDescriptor-property
+     * Set the value of the AffliationDescriptor property.
+     *
      * @param \SAML2\XML\md\AffiliationDescriptor|null $affiliationDescriptor
      * @return void
      */
-    public function setAffiliationDescriptor(AffiliationDescriptor $affiliationDescriptor = null)
+    public function setAffiliationDescriptor(AffiliationDescriptor $affiliationDescriptor = null) : void
     {
         $this->AffiliationDescriptor = $affiliationDescriptor;
     }
 
 
     /**
-     * Collect the value of the Organization-property
+     * Collect the value of the Organization property.
+     *
      * @return \SAML2\XML\md\Organization|null
      */
-    public function getOrganization()
+    public function getOrganization() : ?Organization
     {
         return $this->Organization;
     }
 
 
     /**
-     * Set the value of the Organization-property
+     * Set the value of the Organization property.
+     *
      * @param \SAML2\XML\md\Organization|null $organization
      * @return void
      */
-    public function setOrganization(Organization $organization = null)
+    public function setOrganization(Organization $organization = null) : void
     {
         $this->Organization = $organization;
     }
 
 
     /**
-     * Collect the value of the ContactPerson-property
+     * Collect the value of the ContactPerson property.
+     *
      * @return \SAML2\XML\md\ContactPerson[]
      */
-    public function getContactPerson()
+    public function getContactPerson() : array
     {
         return $this->ContactPerson;
     }
 
 
     /**
-     * Set the value of the ContactPerson-property
+     * Set the value of the ContactPerson property.
+     *
      * @param array $contactPerson
      * @return void
      */
-    public function setContactPerson(array $contactPerson)
+    public function setContactPerson(array $contactPerson) : void
     {
         $this->ContactPerson = $contactPerson;
     }
 
 
     /**
-     * Add the value to the ContactPerson-property
+     * Add the value to the ContactPerson property.
+     *
      * @param \SAML2\XML\md\ContactPerson $contactPerson
      * @return void
      */
-    public function addContactPerson(ContactPerson $contactPerson)
+    public function addContactPerson(ContactPerson $contactPerson) : void
     {
         $this->ContactPerson[] = $contactPerson;
     }
 
 
     /**
-     * Collect the value of the AdditionalMetadataLocation-property
+     * Collect the value of the AdditionalMetadataLocation property.
+     *
      * @return \SAML2\XML\md\AdditionalMetadataLocation[]
      */
-    public function getAdditionalMetadataLocation()
+    public function getAdditionalMetadataLocation() : array
     {
         return $this->AdditionalMetadataLocation;
     }
 
 
     /**
-     * Set the value of the AdditionalMetadataLocation-property
+     * Set the value of the AdditionalMetadataLocation property.
+     *
      * @param array $additionalMetadataLocation
      * @return void
      */
-    public function setAdditionalMetadataLocation(array $additionalMetadataLocation)
+    public function setAdditionalMetadataLocation(array $additionalMetadataLocation) : void
     {
         $this->AdditionalMetadataLocation = $additionalMetadataLocation;
     }
 
 
     /**
-     * Add the value to the AdditionalMetadataLocation-property
+     * Add the value to the AdditionalMetadataLocation property.
+     *
      * @param AdditionalMetadataLocation $additionalMetadataLocation
      * @return void
      */
-    public function addAdditionalMetadataLocation(AdditionalMetadataLocation $additionalMetadataLocation)
+    public function addAdditionalMetadataLocation(AdditionalMetadataLocation $additionalMetadataLocation) : void
     {
         $this->AdditionalMetadataLocation[] = $additionalMetadataLocation;
     }
@@ -451,18 +451,11 @@ public function addAdditionalMetadataLocation(AdditionalMetadataLocation $additi
      * @param \DOMElement|null $parent The EntitiesDescriptor we should append this EntityDescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent = null)
+    public function toXML(DOMElement $parent = null) : DOMElement
     {
-        Assert::string($this->getEntityID());
-        Assert::nullOrString($this->getID());
-        Assert::nullOrInteger($this->getValidUntil());
-        Assert::nullOrString($this->getCacheDuration());
-        Assert::isArray($this->getExtensions());
-        Assert::isArray($this->getRoleDescriptor());
-        Assert::nullOrIsInstanceOf($this->getAffiliationDescriptor(), AffiliationDescriptor::class);
-        Assert::nullOrIsInstanceOf($this->getOrganization(), Organization::class);
-        Assert::isArray($this->getContactPerson());
-        Assert::isArray($this->getAdditionalMetadataLocation());
+        if (empty($this->entityID)) {
+            throw new \Exception('Cannot convert EntityDescriptor to XML without an EntityID set.');
+        }
 
         if ($parent === null) {
             $doc = DOMDocumentFactory::create();
@@ -473,44 +466,45 @@ public function toXML(\DOMElement $parent = null)
             $parent->appendChild($e);
         }
 
-        $e->setAttribute('entityID', $this->getEntityID());
+        $e->setAttribute('entityID', $this->entityID);
 
-        if ($this->getID() !== null) {
-            $e->setAttribute('ID', $this->getID());
+        if ($this->ID !== null) {
+            $e->setAttribute('ID', $this->ID);
         }
 
-        if ($this->getValidUntil() !== null) {
-            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->getValidUntil()));
+        if ($this->validUntil !== null) {
+            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->validUntil));
         }
 
-        if ($this->getCacheDuration() !== null) {
-            $e->setAttribute('cacheDuration', $this->getCacheDuration());
+        if ($this->cacheDuration !== null) {
+            $e->setAttribute('cacheDuration', $this->cacheDuration);
         }
 
-        Extensions::addList($e, $this->getExtensions());
+        Extensions::addList($e, $this->Extensions);
 
-        /** @var \SAML2\XML\md\UnknownRoleDescriptor|\SAML2\XML\md\IDPSSODescriptor|\SAML2\XML\md\SPSSODescriptor|\SAML2\XML\md\AuthnAuthorityDescriptor|\SAML2\XML\md\AttributeAuthorityDescriptor|\SAML2\XML\md\PDPDescriptor $n */
-        foreach ($this->getRoleDescriptor() as $n) {
+        foreach ($this->RoleDescriptor as $n) {
             $n->toXML($e);
         }
 
-        if ($this->getAffiliationDescriptor() !== null) {
-            $this->getAffiliationDescriptor()->toXML($e);
+        if ($this->AffiliationDescriptor !== null) {
+            $this->AffiliationDescriptor->toXML($e);
         }
 
-        if ($this->getOrganization() !== null) {
-            $this->getOrganization()->toXML($e);
+        if ($this->Organization !== null) {
+            $this->Organization->toXML($e);
         }
 
-        foreach ($this->getContactPerson() as $cp) {
+        foreach ($this->ContactPerson as $cp) {
             $cp->toXML($e);
         }
 
-        foreach ($this->getAdditionalMetadataLocation() as $n) {
+        foreach ($this->AdditionalMetadataLocation as $n) {
             $n->toXML($e);
         }
 
-        $this->signElement($e, $e->firstChild);
+        /** @var \DOMElement $child */
+        $child = $e->firstChild;
+        $this->signElement($e, $child);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Extensions.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Extensions.php
index 2faab4828b..fda7a4a3c1 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Extensions.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Extensions.php
@@ -1,19 +1,28 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\alg\Common as ALG;
+use SAML2\XML\alg\DigestMethod;
+use SAML2\XML\alg\SigningMethod;
 use SAML2\XML\Chunk;
 use SAML2\XML\mdattr\EntityAttributes;
 use SAML2\XML\mdrpi\Common as MDRPI;
+use SAML2\XML\mdrpi\PublicationInfo;
+use SAML2\XML\mdrpi\RegistrationInfo;
 use SAML2\XML\mdui\Common as MDUI;
+use SAML2\XML\mdui\DiscoHints;
+use SAML2\XML\mdui\UIInfo;
 use SAML2\XML\shibmd\Scope;
 
 /**
  * Class for handling SAML2 metadata extensions.
- *
  * @package SimpleSAMLphp
  */
 class Extensions
@@ -21,35 +30,44 @@ class Extensions
     /**
      * Get a list of Extensions in the given element.
      *
-     * @param  \DOMElement $parent The element that may contain the md:Extensions element.
-     * @return \SAML2\XML\Chunk[]  Array of extensions.
+     * @param \DOMElement $parent The element that may contain the md:Extensions element.
+     * @return (\SAML2\XML\shibmd\Scope|
+     *          \SAML2\XML\mdattr\EntityAttributes|
+     *          \SAML2\XML\mdrpi\RegistrationInfo|
+     *          \SAML2\XML\mdrpi\PublicationInfo|
+     *          \SAML2\XML\mdui\UIInfo|
+     *          \SAML2\XML\mdui\DiscoHints|
+     *          \SAML2\XML\alg\DigestMethod|
+     *          \SAML2\XML\alg\SigningMethod|
+     *          \SAML2\XML\Chunk)[]  Array of extensions.
      */
-    public static function getList(\DOMElement $parent)
+    public static function getList(DOMElement $parent) : array
     {
         $ret = [];
         $supported = [
             Scope::NS => [
-                'Scope' => '\SAML2\XML\shibmd\Scope',
+                'Scope' => Scope::class,
             ],
             EntityAttributes::NS => [
-                'EntityAttributes' => '\SAML2\XML\mdattr\EntityAttributes',
+                'EntityAttributes' => EntityAttributes::class,
             ],
             MDRPI::NS_MDRPI => [
-                'RegistrationInfo' => '\SAML2\XML\mdrpi\RegistrationInfo',
-                'PublicationInfo' => '\SAML2\XML\mdrpi\PublicationInfo',
+                'RegistrationInfo' => RegistrationInfo::class,
+                'PublicationInfo' => PublicationInfo::class,
             ],
             MDUI::NS => [
-                'UIInfo' => '\SAML2\XML\mdui\UIInfo',
-                'DiscoHints' => '\SAML2\XML\mdui\DiscoHints',
+                'UIInfo' => UIInfo::class,
+                'DiscoHints' => DiscoHints::class,
             ],
             ALG::NS => [
-                'DigestMethod' => '\SAML2\XML\alg\DigestMethod',
-                'SigningMethod' => '\SAML2\XML\alg\SigningMethod',
+                'DigestMethod' => DigestMethod::class,
+                'SigningMethod' => SigningMethod::class,
             ],
         ];
 
+        /** @var \DOMElement $node */
         foreach (Utils::xpQuery($parent, './saml_metadata:Extensions/*') as $node) {
-            if (array_key_exists($node->namespaceURI, $supported) &&
+            if (!is_null($node->namespaceURI) && array_key_exists($node->namespaceURI, $supported) &&
                 array_key_exists($node->localName, $supported[$node->namespaceURI])
             ) {
                 $ret[] = new $supported[$node->namespaceURI][$node->localName]($node);
@@ -65,11 +83,11 @@ public static function getList(\DOMElement $parent)
     /**
      * Add a list of Extensions to the given element.
      *
-     * @param \DOMElement        $parent     The element we should add the extensions to.
+     * @param \DOMElement $parent The element we should add the extensions to.
      * @param \SAML2\XML\Chunk[] $extensions List of extension objects.
      * @return void
      */
-    public static function addList(\DOMElement $parent, array $extensions)
+    public static function addList(DOMElement $parent, array $extensions) : void
     {
         if (empty($extensions)) {
             return;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IDPSSODescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IDPSSODescriptor.php
index 12bcfcafcf..c8690eddbf 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IDPSSODescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IDPSSODescriptor.php
@@ -1,11 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\saml\Attribute;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 IDPSSODescriptor.
@@ -19,7 +22,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @var bool|null
      */
-    public $WantAuthnRequestsSigned = null;
+    private $WantAuthnRequestsSigned = null;
 
     /**
      * List of SingleSignOnService endpoints.
@@ -28,7 +31,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $SingleSignOnService = [];
+    private $SingleSignOnService = [];
 
     /**
      * List of NameIDMappingService endpoints.
@@ -37,7 +40,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $NameIDMappingService = [];
+    private $NameIDMappingService = [];
 
     /**
      * List of AssertionIDRequestService endpoints.
@@ -46,7 +49,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AssertionIDRequestService = [];
+    private $AssertionIDRequestService = [];
 
     /**
      * List of supported attribute profiles.
@@ -55,7 +58,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @var array
      */
-    public $AttributeProfile = [];
+    private $AttributeProfile = [];
 
     /**
      * List of supported attributes.
@@ -64,7 +67,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @var \SAML2\XML\saml\Attribute[]
      */
-    public $Attribute = [];
+    private $Attribute = [];
 
 
     /**
@@ -72,7 +75,7 @@ class IDPSSODescriptor extends SSODescriptorType
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('md:IDPSSODescriptor', $xml);
 
@@ -80,33 +83,38 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
-        $this->setWantAuthnRequestsSigned(Utils::parseBoolean($xml, 'WantAuthnRequestsSigned', null));
+        $this->WantAuthnRequestsSigned = Utils::parseBoolean($xml, 'WantAuthnRequestsSigned', null);
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:SingleSignOnService') as $ep) {
-            $this->addSingleSignOnService(new EndpointType($ep));
+            $this->SingleSignOnService[] = new EndpointType($ep);
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:NameIDMappingService') as $ep) {
-            $this->addNameIDMappingService(new EndpointType($ep));
+            $this->NameIDMappingService[] = new EndpointType($ep);
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AssertionIDRequestService') as $ep) {
-            $this->addAssertionIDRequestService(new EndpointType($ep));
+            $this->AssertionIDRequestService[] = new EndpointType($ep);
         }
 
-        $this->setAttributeProfile(Utils::extractStrings($xml, Constants::NS_MD, 'AttributeProfile'));
+        $this->AttributeProfile = Utils::extractStrings($xml, Constants::NS_MD, 'AttributeProfile');
 
+        /** @var \DOMElement $a */
         foreach (Utils::xpQuery($xml, './saml_assertion:Attribute') as $a) {
-            $this->addAttribute(new Attribute($a));
+            $this->Attribute[] = new Attribute($a);
         }
     }
 
 
     /**
      * Collect the value of the WantAuthnRequestsSigned-property
+     *
      * @return bool|null
      */
-    public function wantAuthnRequestsSigned()
+    public function wantAuthnRequestsSigned() : ?bool
     {
         return $this->WantAuthnRequestsSigned;
     }
@@ -114,21 +122,22 @@ public function wantAuthnRequestsSigned()
 
     /**
      * Set the value of the WantAuthnRequestsSigned-property
+     *
      * @param bool|null $flag
      * @return void
      */
-    public function setWantAuthnRequestsSigned($flag = null)
+    public function setWantAuthnRequestsSigned(bool $flag = null) : void
     {
-        Assert::nullOrBoolean($flag);
         $this->WantAuthnRequestsSigned = $flag;
     }
 
 
     /**
      * Collect the value of the SingleSignOnService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getSingleSignOnService()
+    public function getSingleSignOnService() : array
     {
         return $this->SingleSignOnService;
     }
@@ -136,10 +145,11 @@ public function getSingleSignOnService()
 
     /**
      * Set the value of the SingleSignOnService-property
+     *
      * @param array $singleSignOnService
      * @return void
      */
-    public function setSingleSignOnService(array $singleSignOnService)
+    public function setSingleSignOnService(array $singleSignOnService) : void
     {
         $this->SingleSignOnService = $singleSignOnService;
     }
@@ -147,10 +157,11 @@ public function setSingleSignOnService(array $singleSignOnService)
 
     /**
      * Add the value to the SingleSignOnService-property
+     *
      * @param \SAML2\XML\md\EndpointType $singleSignOnService
      * @return void
      */
-    public function addSingleSignOnService(EndpointType $singleSignOnService)
+    public function addSingleSignOnService(EndpointType $singleSignOnService) : void
     {
         $this->SingleSignOnService[] = $singleSignOnService;
     }
@@ -158,9 +169,10 @@ public function addSingleSignOnService(EndpointType $singleSignOnService)
 
     /**
      * Collect the value of the NameIDMappingService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getNameIDMappingService()
+    public function getNameIDMappingService() : array
     {
         return $this->NameIDMappingService;
     }
@@ -168,10 +180,11 @@ public function getNameIDMappingService()
 
     /**
      * Set the value of the NameIDMappingService-property
+     *
      * @param array $nameIDMappingService
      * @return void
      */
-    public function setNameIDMappingService(array $nameIDMappingService)
+    public function setNameIDMappingService(array $nameIDMappingService) : void
     {
         $this->NameIDMappingService = $nameIDMappingService;
     }
@@ -179,10 +192,11 @@ public function setNameIDMappingService(array $nameIDMappingService)
 
     /**
      * Add the value to the NameIDMappingService-property
+     *
      * @param \SAML2\XML\md\EndpointType $nameIDMappingService
      * @return void
      */
-    public function addNameIDMappingService(EndpointType $nameIDMappingService)
+    public function addNameIDMappingService(EndpointType $nameIDMappingService) : void
     {
         $this->NameIDMappingService[] = $nameIDMappingService;
     }
@@ -190,9 +204,10 @@ public function addNameIDMappingService(EndpointType $nameIDMappingService)
 
     /**
      * Collect the value of the AssertionIDRequestService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAssertionIDRequestService()
+    public function getAssertionIDRequestService() : array
     {
         return $this->AssertionIDRequestService;
     }
@@ -200,10 +215,11 @@ public function getAssertionIDRequestService()
 
     /**
      * Set the value of the AssertionIDRequestService-property
+     *
      * @param array $assertionIDRequestService
      * @return void
      */
-    public function setAssertionIDRequestService(array $assertionIDRequestService)
+    public function setAssertionIDRequestService(array $assertionIDRequestService) : void
     {
         $this->AssertionIDRequestService = $assertionIDRequestService;
     }
@@ -211,10 +227,11 @@ public function setAssertionIDRequestService(array $assertionIDRequestService)
 
     /**
      * Add the value to the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType $assertionIDRequestService
      * @return void
      */
-    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService)
+    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService) : void
     {
         $this->AssertionIDRequestService[] = $assertionIDRequestService;
     }
@@ -224,7 +241,7 @@ public function addAssertionIDRequestService(EndpointType $assertionIDRequestSer
      * Collect the value of the AttributeProfile-property
      * @return array
      */
-    public function getAttributeProfile()
+    public function getAttributeProfile() : array
     {
         return $this->AttributeProfile;
     }
@@ -232,10 +249,11 @@ public function getAttributeProfile()
 
     /**
      * Set the value of the AttributeProfile-property
+     *
      * @param array $attributeProfile
      * @return void
      */
-    public function setAttributeProfile(array $attributeProfile)
+    public function setAttributeProfile(array $attributeProfile) : void
     {
         $this->AttributeProfile = $attributeProfile;
     }
@@ -243,9 +261,10 @@ public function setAttributeProfile(array $attributeProfile)
 
     /**
      * Collect the value of the Attribute-property
+     *
      * @return \SAML2\XML\saml\Attribute[]
      */
-    public function getAttribute()
+    public function getAttribute() : array
     {
         return $this->Attribute;
     }
@@ -253,10 +272,11 @@ public function getAttribute()
 
     /**
      * Set the value of the Attribute-property
+     *
      * @param array $attribute
      * @return void
      */
-    public function setAttribute(array $attribute)
+    public function setAttribute(array $attribute) : void
     {
         $this->Attribute = $attribute;
     }
@@ -264,10 +284,11 @@ public function setAttribute(array $attribute)
 
     /**
      * Addthe value to the Attribute-property
+     *
      * @param \SAML2\XML\saml\Attribute $attribute
      * @return void
      */
-    public function addAttribute(Attribute $attribute)
+    public function addAttribute(Attribute $attribute) : void
     {
         $this->Attribute[] = $attribute;
     }
@@ -279,38 +300,29 @@ public function addAttribute(Attribute $attribute)
      * @param \DOMElement $parent The EntityDescriptor we should append this IDPSSODescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrBoolean($this->WantAuthnRequestsSigned());
-        Assert::isArray($this->getSingleSignOnService());
-        Assert::isArray($this->getNameIDMappingService());
-        Assert::isArray($this->getAssertionIDRequestService());
-        Assert::isArray($this->getAttributeProfile());
-        Assert::isArray($this->getAttribute());
-
         $e = parent::toXML($parent);
 
-        if ($this->WantAuthnRequestsSigned() === true) {
-            $e->setAttribute('WantAuthnRequestsSigned', 'true');
-        } elseif ($this->WantAuthnRequestsSigned() === false) {
-            $e->setAttribute('WantAuthnRequestsSigned', 'false');
+        if (is_bool($this->WantAuthnRequestsSigned)) {
+            $e->setAttribute('WantAuthnRequestsSigned', $this->WantAuthnRequestsSigned ? 'true' : 'false');
         }
 
-        foreach ($this->getSingleSignOnService() as $ep) {
+        foreach ($this->SingleSignOnService as $ep) {
             $ep->toXML($e, 'md:SingleSignOnService');
         }
 
-        foreach ($this->getNameIDMappingService() as $ep) {
+        foreach ($this->NameIDMappingService as $ep) {
             $ep->toXML($e, 'md:NameIDMappingService');
         }
 
-        foreach ($this->getAssertionIDRequestService() as $ep) {
+        foreach ($this->AssertionIDRequestService as $ep) {
             $ep->toXML($e, 'md:AssertionIDRequestService');
         }
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:AttributeProfile', false, $this->getAttributeProfile());
+        Utils::addStrings($e, Constants::NS_MD, 'md:AttributeProfile', false, $this->AttributeProfile);
 
-        foreach ($this->getAttribute() as $a) {
+        foreach ($this->Attribute as $a) {
             $a->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IndexedEndpointType.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IndexedEndpointType.php
index e980783bbe..c874b58eb9 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IndexedEndpointType.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/IndexedEndpointType.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 IndexedEndpointType.
@@ -17,14 +20,14 @@ class IndexedEndpointType extends EndpointType
      *
      * @var int
      */
-    public $index;
+    private $index = 0;
 
     /**
      * Whether this endpoint is the default.
      *
      * @var bool|null
      */
-    public $isDefault = null;
+    private $isDefault = null;
 
 
     /**
@@ -33,7 +36,7 @@ class IndexedEndpointType extends EndpointType
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct($xml);
 
@@ -44,52 +47,54 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('index')) {
             throw new \Exception('Missing index on '.$xml->tagName);
         }
-        $this->setIndex(intval($xml->getAttribute('index')));
+        $this->index = intval($xml->getAttribute('index'));
 
-        $this->setIsDefault(Utils::parseBoolean($xml, 'isDefault', null));
+        $this->isDefault = Utils::parseBoolean($xml, 'isDefault', null);
     }
 
 
     /**
-     * Collect the value of the index-property
+     * Collect the value of the index property.
+     *
      * @return int
      */
-    public function getIndex()
+    public function getIndex() : int
     {
         return $this->index;
     }
 
 
     /**
-     * Set the value of the index-property
+     * Set the value of the index property.
+     *
      * @param int $index
      * @return void
      */
-    public function setIndex($index)
+    public function setIndex(int $index) : void
     {
-        Assert::integer($index);
         $this->index = $index;
     }
 
 
     /**
-     * Collect the value of the isDefault-property
+     * Collect the value of the isDefault property.
+     *
      * @return bool|null
      */
-    public function getIsDefault()
+    public function getIsDefault() : ?bool
     {
         return $this->isDefault;
     }
 
 
     /**
-     * Set the value of the isDefault-property
+     * Set the value of the isDefault property.
+     *
      * @param bool|null $flag
      * @return void
      */
-    public function setIsDefault($flag = null)
+    public function setIsDefault(bool $flag = null) : void
     {
-        Assert::nullOrBoolean($flag);
         $this->isDefault = $flag;
     }
 
@@ -98,22 +103,16 @@ public function setIsDefault($flag = null)
      * Add this endpoint to an XML element.
      *
      * @param \DOMElement $parent The element we should append this endpoint to.
-     * @param string     $name   The name of the element we should create.
+     * @param string $name The name of the element we should create.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent, $name)
+    public function toXML(DOMElement $parent, string $name) : DOMElement
     {
-        Assert::string($name);
-        Assert::integer($this->getIndex());
-        Assert::nullOrBoolean($this->getIsDefault());
-
         $e = parent::toXML($parent, $name);
-        $e->setAttribute('index', (string) $this->getIndex());
+        $e->setAttribute('index', strval($this->index));
 
-        if ($this->getIsDefault() === true) {
-            $e->setAttribute('isDefault', 'true');
-        } elseif ($this->getIsDefault() === false) {
-            $e->setAttribute('isDefault', 'false');
+        if (is_bool($this->isDefault)) {
+            $e->setAttribute('isDefault', $this->isDefault ? 'true' : 'false');
         }
 
         return $e;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/KeyDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/KeyDescriptor.php
index aa2b6bdbe4..8463a1bbf0 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/KeyDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/KeyDescriptor.php
@@ -1,12 +1,16 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
 use SAML2\XML\ds\KeyInfo;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing a KeyDescriptor element.
@@ -22,14 +26,14 @@ class KeyDescriptor
      *
      * @var string|null
      */
-    public $use;
+    private $use = null;
 
     /**
      * The KeyInfo for this key.
      *
-     * @var \SAML2\XML\ds\KeyInfo
+     * @var \SAML2\XML\ds\KeyInfo|null
      */
-    public $KeyInfo;
+    private $KeyInfo = null;
 
     /**
      * Supported EncryptionMethods.
@@ -38,7 +42,7 @@ class KeyDescriptor
      *
      * @var \SAML2\XML\Chunk[]
      */
-    public $EncryptionMethod = [];
+    private $EncryptionMethod = [];
 
 
     /**
@@ -47,14 +51,14 @@ class KeyDescriptor
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
         if ($xml->hasAttribute('use')) {
-            $this->setUse($xml->getAttribute('use'));
+            $this->use = $xml->getAttribute('use');
         }
 
         $keyInfo = Utils::xpQuery($xml, './ds:KeyInfo');
@@ -63,84 +67,92 @@ public function __construct(\DOMElement $xml = null)
         } elseif (empty($keyInfo)) {
             throw new \Exception('No ds:KeyInfo in the KeyDescriptor.');
         }
-        $this->setKeyInfo(new KeyInfo($keyInfo[0]));
+        /** @var \DOMElement $keyInfo[0] */
+        $this->KeyInfo = new KeyInfo($keyInfo[0]);
 
+        /** @var \DOMElement $em */
         foreach (Utils::xpQuery($xml, './saml_metadata:EncryptionMethod') as $em) {
-            $this->addEncryptionMethod(new Chunk($em));
+            $this->EncryptionMethod[] = new Chunk($em);
         }
     }
 
 
     /**
-     * Collect the value of the use-property
-     * @return string
+     * Collect the value of the use property.
+     *
+     * @return string|null
      */
-    public function getUse()
+    public function getUse() : ?string
     {
         return $this->use;
     }
 
 
     /**
-     * Set the value of the use-property
+     * Set the value of the use property.
+     *
      * @param string|null $use
      * @return void
      */
-    public function setUse($use)
+    public function setUse(string $use = null) : void
     {
-        Assert::nullOrString($use);
         $this->use = $use;
     }
 
 
     /**
-     * Collect the value of the KeyInfo-property
-     * @return \SAML2\XML\ds\KeyInfo
+     * Collect the value of the KeyInfo property.
+     *
+     * @return \SAML2\XML\ds\KeyInfo|null
      */
-    public function getKeyInfo()
+    public function getKeyInfo() : ?KeyInfo
     {
         return $this->KeyInfo;
     }
 
 
     /**
-     * Set the value of the KeyInfo-property
+     * Set the value of the KeyInfo property.
+     *
      * @param \SAML2\XML\ds\KeyInfo $keyInfo
      * @return void
      */
-    public function setKeyInfo(KeyInfo $keyInfo)
+    public function setKeyInfo(KeyInfo $keyInfo) : void
     {
         $this->KeyInfo = $keyInfo;
     }
 
 
     /**
-     * Collect the value of the EncryptionMethod-property
+     * Collect the value of the EncryptionMethod property.
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getEncryptionMethod()
+    public function getEncryptionMethod() : array
     {
         return $this->EncryptionMethod;
     }
 
 
     /**
-     * Set the value of the EncryptionMethod-property
+     * Set the value of the EncryptionMethod property.
+     *
      * @param \SAML2\XML\Chunk[] $encryptionMethod
      * @return void
      */
-    public function setEncryptionMethod(array $encryptionMethod)
+    public function setEncryptionMethod(array $encryptionMethod) : void
     {
         $this->EncryptionMethod = $encryptionMethod;
     }
 
 
     /**
-     * Add the value to the EncryptionMethod-property
+     * Add the value to the EncryptionMethod property.
+     *
      * @param \SAML2\XML\Chunk $encryptionMethod
      * @return void
      */
-    public function addEncryptionMethod(Chunk $encryptionMethod)
+    public function addEncryptionMethod(Chunk $encryptionMethod) : void
     {
         $this->EncryptionMethod[] = $encryptionMethod;
     }
@@ -152,24 +164,24 @@ public function addEncryptionMethod(Chunk $encryptionMethod)
      * @param \DOMElement $parent The element we should append this KeyDescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrString($this->getUse());
-        Assert::isInstanceOf($this->getKeyInfo(), KeyInfo::class);
-        Assert::isArray($this->getEncryptionMethod());
+        if ($this->KeyInfo === null) {
+            throw new \Exception('Cannot convert KeyDescriptor to XML without KeyInfo set.');
+        }
 
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Constants::NS_MD, 'md:KeyDescriptor');
         $parent->appendChild($e);
 
-        if ($this->getUse() !== null) {
-            $e->setAttribute('use', $this->getUse());
+        if ($this->use !== null) {
+            $e->setAttribute('use', $this->use);
         }
 
-        $this->getKeyInfo()->toXML($e);
+        $this->KeyInfo->toXML($e);
 
-        foreach ($this->getEncryptionMethod() as $em) {
+        foreach ($this->EncryptionMethod as $em) {
             $em->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Organization.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Organization.php
index 46427a9432..43dd8d4b4c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Organization.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/Organization.php
@@ -1,11 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 Organization element.
@@ -21,28 +25,28 @@ class Organization
      *
      * @var array
      */
-    public $Extensions = [];
+    private $Extensions = [];
 
     /**
      * The OrganizationName, as an array of language => translation.
      *
      * @var array
      */
-    public $OrganizationName = [];
+    private $OrganizationName = [];
 
     /**
      * The OrganizationDisplayName, as an array of language => translation.
      *
      * @var array
      */
-    public $OrganizationDisplayName = [];
+    private $OrganizationDisplayName = [];
 
     /**
      * The OrganizationURL, as an array of language => translation.
      *
      * @var array
      */
-    public $OrganizationURL = [];
+    private $OrganizationURL = [];
 
 
     /**
@@ -50,50 +54,53 @@ class Organization
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
-        $this->setExtensions(Extensions::getList($xml));
+        $this->Extensions = Extensions::getList($xml);
 
-        $this->setOrganizationName(Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationName'));
-        $organizationName = $this->getOrganizationName();
-        if (empty($organizationName)) {
-            $this->setOrganizationName(['invalid' => '']);
+        $this->OrganizationName = Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationName');
+        if (empty($this->OrganizationName)) {
+            $this->OrganizationName = ['invalid' => ''];
         }
 
-        $this->setOrganizationDisplayName(Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationDisplayName'));
-        $organizationDisplayName = $this->getOrganizationDisplayName();
-        if (empty($organizationDisplayName)) {
-            $this->setOrganizationDisplayName(['invalid' => '']);
+        $this->OrganizationDisplayName = Utils::extractLocalizedStrings(
+            $xml,
+            Constants::NS_MD,
+            'OrganizationDisplayName'
+        );
+        if (empty($this->OrganizationDisplayName)) {
+            $this->OrganizationDisplayName = ['invalid' => ''];
         }
 
-        $this->setOrganizationURL(Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationURL'));
-        $organizationURL = $this->getOrganizationURL();
-        if (empty($organizationURL)) {
-            $this->setOrganizationURL(['invalid' => '']);
+        $this->OrganizationURL = Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationURL');
+        if (empty($this->OrganizationURL)) {
+            $this->OrganizationURL = ['invalid' => ''];
         }
     }
 
 
     /**
-     * Collect the value of the Extensions-property
+     * Collect the value of the Extensions property.
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->Extensions;
     }
 
 
     /**
-     * Set the value of the Extensions-property
+     * Set the value of the Extensions property.
+     *
      * @param array $extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->Extensions = $extensions;
     }
@@ -105,70 +112,76 @@ public function setExtensions(array $extensions)
      * @param \SAML2\XML\Chunk $extensions The Extensions
      * @return void
      */
-    public function addExtension(Extensions $extension)
+    public function addExtension(Extensions $extension) : void
     {
         $this->Extensions[] = $extension;
     }
 
 
     /**
-     * Collect the value of the OrganizationName-property
+     * Collect the value of the OrganizationName property.
+     *
      * @return string[]
      */
-    public function getOrganizationName()
+    public function getOrganizationName() : array
     {
         return $this->OrganizationName;
     }
 
 
     /**
-     * Set the value of the OrganizationName-property
+     * Set the value of the OrganizationName property.
+     *
      * @param array $organizationName
      * @return void
      */
-    public function setOrganizationName(array $organizationName)
+    public function setOrganizationName(array $organizationName) : void
     {
         $this->OrganizationName = $organizationName;
     }
 
 
     /**
-     * Collect the value of the OrganizationDisplayName-property
+     * Collect the value of the OrganizationDisplayName property.
+     *
      * @return string[]
      */
-    public function getOrganizationDisplayName()
+    public function getOrganizationDisplayName() : array
     {
         return $this->OrganizationDisplayName;
     }
 
 
     /**
-     * Set the value of the OrganizationDisplayName-property
+     * Set the value of the OrganizationDisplayName property.
+     *
      * @param array $organizationDisplayName
      * @return void
      */
-    public function setOrganizationDisplayName(array $organizationDisplayName)
+    public function setOrganizationDisplayName(array $organizationDisplayName) : void
     {
         $this->OrganizationDisplayName = $organizationDisplayName;
     }
 
 
     /**
-     * Collect the value of the OrganizationURL-property
+     * Collect the value of the OrganizationURL property.
+     *
      * @return string[]
      */
-    public function getOrganizationURL()
+    public function getOrganizationURL() : array
     {
         return $this->OrganizationURL;
     }
 
 
     /**
-     * Set the value of the OrganizationURL-property
+     * Set the value of the OrganizationURL property.
+     *
      * @param array $organizationURL
      * @return void
      */
-    public function setOrganizationURL(array $organizationURL)
+    public function setOrganizationURL(array $organizationURL) : void
     {
         $this->OrganizationURL = $organizationURL;
     }
@@ -180,26 +193,22 @@ public function setOrganizationURL(array $organizationURL)
      * @param  \DOMElement $parent The element we should add this organization to.
      * @return \DOMElement This Organization-element.
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($this->getExtensions());
-        Assert::isArray($organizationName = $this->getOrganizationName());
-        Assert::notEmpty($organizationName);
-        Assert::isArray($organizationDisplayName = $this->getOrganizationDisplayName());
-        Assert::notEmpty($organizationDisplayName);
-        Assert::isArray($organizationURL = $this->getOrganizationURL());
-        Assert::notEmpty($organizationURL);
+        Assert::notEmpty($this->OrganizationName);
+        Assert::notEmpty($this->OrganizationDisplayName);
+        Assert::notEmpty($this->OrganizationURL);
 
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Constants::NS_MD, 'md:Organization');
         $parent->appendChild($e);
 
-        Extensions::addList($e, $this->getExtensions());
+        Extensions::addList($e, $this->Extensions);
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:OrganizationName', true, $this->getOrganizationName());
-        Utils::addStrings($e, Constants::NS_MD, 'md:OrganizationDisplayName', true, $this->getOrganizationDisplayName());
-        Utils::addStrings($e, Constants::NS_MD, 'md:OrganizationURL', true, $this->getOrganizationURL());
+        Utils::addStrings($e, Constants::NS_MD, 'md:OrganizationName', true, $this->OrganizationName);
+        Utils::addStrings($e, Constants::NS_MD, 'md:OrganizationDisplayName', true, $this->OrganizationDisplayName);
+        Utils::addStrings($e, Constants::NS_MD, 'md:OrganizationURL', true, $this->OrganizationURL);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/PDPDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/PDPDescriptor.php
index 0eae33bb93..eb3dfb2212 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/PDPDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/PDPDescriptor.php
@@ -1,10 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 metadata PDPDescriptor.
@@ -20,7 +24,7 @@ class PDPDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AuthzService = [];
+    private $AuthzService = [];
 
     /**
      * List of AssertionIDRequestService endpoints.
@@ -29,7 +33,7 @@ class PDPDescriptor extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $AssertionIDRequestService = [];
+    private $AssertionIDRequestService = [];
 
     /**
      * List of supported NameID formats.
@@ -38,7 +42,7 @@ class PDPDescriptor extends RoleDescriptor
      *
      * @var string[]
      */
-    public $NameIDFormat = [];
+    private $NameIDFormat = [];
 
 
     /**
@@ -47,7 +51,7 @@ class PDPDescriptor extends RoleDescriptor
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('md:PDPDescriptor', $xml);
 
@@ -55,26 +59,29 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AuthzService') as $ep) {
-            $this->addAuthzService(new EndpointType($ep));
+            $this->AuthzService[] = new EndpointType($ep);
         }
         if ($this->getAuthzService() !== []) {
             throw new \Exception('Must have at least one AuthzService in PDPDescriptor.');
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AssertionIDRequestService') as $ep) {
-            $this->addAssertionIDRequestService(new EndpointType($ep));
+            $this->AssertionIDRequestService[] = new EndpointType($ep);
         }
 
-        $this->setNameIDFormat(Utils::extractStrings($xml, Constants::NS_MD, 'NameIDFormat'));
+        $this->NameIDFormat = Utils::extractStrings($xml, Constants::NS_MD, 'NameIDFormat');
     }
 
 
     /**
      * Collect the value of the AuthzService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAuthzService()
+    public function getAuthzService() : array
     {
         return $this->AuthzService;
     }
@@ -82,10 +89,11 @@ public function getAuthzService()
 
     /**
      * Set the value of the AuthzService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $authzService
      * @return void
      */
-    public function setAuthzService(array $authzService = [])
+    public function setAuthzService(array $authzService = []) : void
     {
         $this->AuthzService = $authzService;
     }
@@ -93,21 +101,22 @@ public function setAuthzService(array $authzService = [])
 
     /**
      * Add the value to the AuthzService-property
+     *
      * @param \SAML2\XML\md\EndpointType $authzService
      * @return void
      */
-    public function addAuthzService(EndpointType $authzService)
+    public function addAuthzService(EndpointType $authzService) : void
     {
-        Assert::isInstanceOf($authzService, EndpointType::class);
         $this->AuthzService[] = $authzService;
     }
 
 
     /**
      * Collect the value of the AssertionIDRequestService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getAssertionIDRequestService()
+    public function getAssertionIDRequestService() : array
     {
         return $this->AssertionIDRequestService;
     }
@@ -115,10 +124,11 @@ public function getAssertionIDRequestService()
 
     /**
      * Set the value of the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $assertionIDRequestService
      * @return void
      */
-    public function setAssertionIDRequestService(array $assertionIDRequestService)
+    public function setAssertionIDRequestService(array $assertionIDRequestService) : void
     {
         $this->AssertionIDRequestService = $assertionIDRequestService;
     }
@@ -126,21 +136,22 @@ public function setAssertionIDRequestService(array $assertionIDRequestService)
 
     /**
      * Add the value to the AssertionIDRequestService-property
+     *
      * @param \SAML2\XML\md\EndpointType $assertionIDRequestService
      * @return void
      */
-    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService)
+    public function addAssertionIDRequestService(EndpointType $assertionIDRequestService) : void
     {
-        Assert::isInstanceOf($assertionIDRequestService, EndpointType::class);
         $this->AssertionIDRequestService[] = $assertionIDRequestService;
     }
 
 
     /**
      * Collect the value of the NameIDFormat-property
+     *
      * @return string[]
      */
-    public function getNameIDFormat()
+    public function getNameIDFormat() : array
     {
         return $this->NameIDFormat;
     }
@@ -148,10 +159,11 @@ public function getNameIDFormat()
 
     /**
      * Set the value of the NameIDFormat-property
+     *
      * @param string[] $nameIDFormat
      * @return void
      */
-    public function setNameIDFormat(array $nameIDFormat)
+    public function setNameIDFormat(array $nameIDFormat) : void
     {
         $this->NameIDFormat = $nameIDFormat;
     }
@@ -163,24 +175,21 @@ public function setNameIDFormat(array $nameIDFormat)
      * @param \DOMElement $parent The EntityDescriptor we should append this IDPSSODescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($authzService = $this->getAuthzService());
-        Assert::notEmpty($authzService);
-        Assert::isArray($this->getAssertionIDRequestService());
-        Assert::isArray($this->getNameIDFormat());
+        Assert::notEmpty($this->AuthzService);
 
         $e = parent::toXML($parent);
 
-        foreach ($this->getAuthzService() as $ep) {
+        foreach ($this->AuthzService as $ep) {
             $ep->toXML($e, 'md:AuthzService');
         }
 
-        foreach ($this->getAssertionIDRequestService() as $ep) {
+        foreach ($this->AssertionIDRequestService as $ep) {
             $ep->toXML($e, 'md:AssertionIDRequestService');
         }
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->getNameIDFormat());
+        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->NameIDFormat);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RequestedAttribute.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RequestedAttribute.php
index e1ed35e47e..816804434e 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RequestedAttribute.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RequestedAttribute.php
@@ -1,11 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\saml\Attribute;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 metadata RequestedAttribute.
@@ -19,7 +22,7 @@ class RequestedAttribute extends Attribute
      *
      * @var bool|null
      */
-    public $isRequired = null;
+    private $isRequired = null;
 
 
     /**
@@ -27,7 +30,7 @@ class RequestedAttribute extends Attribute
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct($xml);
 
@@ -35,15 +38,16 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
-        $this->setIsRequired(Utils::parseBoolean($xml, 'isRequired', null));
+        $this->isRequired = Utils::parseBoolean($xml, 'isRequired', null);
     }
 
 
     /**
      * Collect the value of the isRequired-property
-     * @return boolean|null
+     *
+     * @return bool|null
      */
-    public function getIsRequired()
+    public function getIsRequired() : ?bool
     {
         return $this->isRequired;
     }
@@ -51,12 +55,12 @@ public function getIsRequired()
 
     /**
      * Set the value of the isRequired-property
-     * @param boolean|null $flag
+     *
+     * @param bool|null $flag
      * @return void
      */
-    public function setIsRequired($flag = null)
+    public function setIsRequired(bool $flag = null) : void
     {
-        Assert::nullOrBoolean($flag);
         $this->isRequired = $flag;
     }
 
@@ -67,16 +71,12 @@ public function setIsRequired($flag = null)
      * @param \DOMElement $parent The element we should append this RequestedAttribute to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrBoolean($this->isRequired);
-
         $e = $this->toXMLInternal($parent, Constants::NS_MD, 'md:RequestedAttribute');
 
-        if ($this->getIsRequired() === true) {
-            $e->setAttribute('isRequired', 'true');
-        } elseif ($this->getIsRequired() === false) {
-            $e->setAttribute('isRequired', 'false');
+        if (is_bool($this->isRequired)) {
+            $e->setAttribute('isRequired', $this->isRequired ? 'true' : 'false');
         }
 
         return $e;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RoleDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RoleDescriptor.php
index fbfc2721bc..5457e19ad9 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RoleDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/RoleDescriptor.php
@@ -1,12 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\SignedElementHelper;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 RoleDescriptor element.
@@ -27,35 +30,21 @@ class RoleDescriptor extends SignedElementHelper
      *
      * @var string|null
      */
-    public $ID;
-
-    /**
-     * How long this element is valid, as a unix timestamp.
-     *
-     * @var int|null
-     */
-    public $validUntil;
-
-    /**
-     * The length of time this element can be cached, as string.
-     *
-     * @var string|null
-     */
-    public $cacheDuration;
+    private $ID = null;
 
     /**
      * List of supported protocols.
      *
      * @var array
      */
-    public $protocolSupportEnumeration = [];
+    private $protocolSupportEnumeration = [];
 
     /**
      * Error URL for this role.
      *
      * @var string|null
      */
-    public $errorURL;
+    private $errorURL = null;
 
     /**
      * Extensions on this element.
@@ -64,7 +53,7 @@ class RoleDescriptor extends SignedElementHelper
      *
      * @var array
      */
-    public $Extensions = [];
+    private $Extensions = [];
 
     /**
      * KeyDescriptor elements.
@@ -73,14 +62,14 @@ class RoleDescriptor extends SignedElementHelper
      *
      * @var \SAML2\XML\md\KeyDescriptor[]
      */
-    public $KeyDescriptor = [];
+    private $KeyDescriptor = [];
 
     /**
      * Organization of this role.
      *
      * @var \SAML2\XML\md\Organization|null
      */
-    public $Organization = null;
+    private $Organization = null;
 
     /**
      * ContactPerson elements for this role.
@@ -89,20 +78,18 @@ class RoleDescriptor extends SignedElementHelper
      *
      * @var \SAML2\XML\md\ContactPerson[]
      */
-    public $ContactPerson = [];
+    private $ContactPerson = [];
 
 
     /**
      * Initialize a RoleDescriptor.
      *
-     * @param string          $elementName The name of this element.
-     * @param \DOMElement|null $xml         The XML element we should load.
+     * @param string $elementName The name of this element.
+     * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    protected function __construct($elementName, \DOMElement $xml = null)
+    protected function __construct(string $elementName, DOMElement $xml = null)
     {
-        Assert::string($elementName);
-
         parent::__construct($xml);
         $this->elementName = $elementName;
 
@@ -111,61 +98,65 @@ protected function __construct($elementName, \DOMElement $xml = null)
         }
 
         if ($xml->hasAttribute('ID')) {
-            $this->setID($xml->getAttribute('ID'));
+            $this->ID = $xml->getAttribute('ID');
         }
         if ($xml->hasAttribute('validUntil')) {
-            $this->setValidUntil(Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')));
+            $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil'));
         }
         if ($xml->hasAttribute('cacheDuration')) {
-            $this->setCacheDuration($xml->getAttribute('cacheDuration'));
+            $this->cacheDuration = $xml->getAttribute('cacheDuration');
         }
 
         if (!$xml->hasAttribute('protocolSupportEnumeration')) {
             throw new \Exception('Missing protocolSupportEnumeration attribute on '.$xml->localName);
         }
-        $this->setProtocolSupportEnumeration(preg_split('/[\s]+/', $xml->getAttribute('protocolSupportEnumeration')));
+        $this->protocolSupportEnumeration = preg_split('/[\s]+/', $xml->getAttribute('protocolSupportEnumeration'));
 
         if ($xml->hasAttribute('errorURL')) {
-            $this->setErrorURL($xml->getAttribute('errorURL'));
+            $this->errorURL = $xml->getAttribute('errorURL');
         }
 
-        $this->setExtensions(Extensions::getList($xml));
+        $this->Extensions = Extensions::getList($xml);
 
         foreach (Utils::xpQuery($xml, './saml_metadata:KeyDescriptor') as $kd) {
-            $this->addKeyDescriptor(new KeyDescriptor($kd));
+            /** @var \DOMElement $kd */
+            $this->KeyDescriptor[] = new KeyDescriptor($kd);
         }
 
         $organization = Utils::xpQuery($xml, './saml_metadata:Organization');
         if (count($organization) > 1) {
             throw new \Exception('More than one Organization in the entity.');
         } elseif (!empty($organization)) {
-            $this->setOrganization(new Organization($organization[0]));
+            /** @var \DOMElement $organization[0] */
+            $this->Organization = new Organization($organization[0]);
         }
 
         foreach (Utils::xpQuery($xml, './saml_metadata:ContactPerson') as $cp) {
-            $this->addContactPerson(new ContactPerson($cp));
+            /** @var \DOMElement $cp */
+            $this->ContactPerson[] = new ContactPerson($cp);
         }
     }
 
 
     /**
-     * Collect the value of the ID-property
+     * Collect the value of the ID property.
+     *
      * @return string|null
      */
-    public function getID()
+    public function getID() : ?string
     {
         return $this->ID;
     }
 
 
     /**
-     * Set the value of the ID-property
+     * Set the value of the ID property.
+     *
      * @param string|null $Id
      * @return void
      */
-    public function setID($Id = null)
+    public function setID(string $Id = null) : void
     {
-        Assert::nullOrString($Id);
         $this->ID = $Id;
     }
 
@@ -174,7 +165,7 @@ public function setID($Id = null)
      * Collect the value of the validUntil-property
      * @return int|null
      */
-    public function getValidUntil()
+    public function getValidUntil() : ?int
     {
         return $this->validUntil;
     }
@@ -185,9 +176,8 @@ public function getValidUntil()
      * @param int|null $validUntil
      * @return void
      */
-    public function setValidUntil($validUntil = null)
+    public function setValidUntil(int $validUntil = null) : void
     {
-        Assert::nullOrInteger($validUntil);
         $this->validUntil = $validUntil;
     }
 
@@ -196,7 +186,7 @@ public function setValidUntil($validUntil = null)
      * Collect the value of the cacheDuration-property
      * @return string|null
      */
-    public function getCacheDuration()
+    public function getCacheDuration() : ?string
     {
         return $this->cacheDuration;
     }
@@ -207,29 +197,30 @@ public function getCacheDuration()
      * @param string|null $cacheDuration
      * @return void
      */
-    public function setCacheDuration($cacheDuration = null)
+    public function setCacheDuration(string $cacheDuration = null) : void
     {
-        Assert::nullOrString($cacheDuration);
         $this->cacheDuration = $cacheDuration;
     }
 
 
     /**
-     * Collect the value of the Extensions-property
+     * Collect the value of the Extensions property.
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getExtensions()
+    public function getExtensions() : array
     {
         return $this->Extensions;
     }
 
 
     /**
-     * Set the value of the Extensions-property
+     * Set the value of the Extensions property.
+     *
      * @param array $extensions
      * @return void
      */
-    public function setExtensions(array $extensions)
+    public function setExtensions(array $extensions) : void
     {
         $this->Extensions = $extensions;
     }
@@ -241,20 +232,20 @@ public function setExtensions(array $extensions)
      * @param \SAML2\XML\Chunk $extensions The Extensions
      * @return void
      */
-    public function addExtension(Extensions $extension)
+    public function addExtension(Extensions $extension) : void
     {
         $this->Extensions[] = $extension;
     }
 
 
     /**
-     * Set the value of the errorURL-property
+     * Set the value of the errorURL property.
+     *
      * @param string|null $errorURL
      * @return void
      */
-    public function setErrorURL($errorURL = null)
+    public function setErrorURL(string $errorURL = null) : void
     {
-        Assert::nullOrString($errorURL);
         if (!is_null($errorURL) && !filter_var($errorURL, FILTER_VALIDATE_URL)) {
             throw new \InvalidArgumentException('RoleDescriptor errorURL is not a valid URL.');
         }
@@ -263,127 +254,139 @@ public function setErrorURL($errorURL = null)
 
 
     /**
-     * Collect the value of the errorURL-property
+     * Collect the value of the errorURL property.
+     *
      * @return string|null
      */
-    public function getErrorURL()
+    public function getErrorURL() : ?string
     {
         return $this->errorURL;
     }
 
 
     /**
-     * Collect the value of the ProtocolSupportEnumeration-property
+     * Collect the value of the ProtocolSupportEnumeration property.
+     *
      * @return string[]
      */
-    public function getProtocolSupportEnumeration()
+    public function getProtocolSupportEnumeration() : array
     {
         return $this->protocolSupportEnumeration;
     }
 
 
     /**
-     * Set the value of the ProtocolSupportEnumeration-property
+     * Set the value of the ProtocolSupportEnumeration property.
+     *
      * @param array $protocols
      * @return void
      */
-    public function setProtocolSupportEnumeration(array $protocols)
+    public function setProtocolSupportEnumeration(array $protocols) : void
     {
         $this->protocolSupportEnumeration = $protocols;
     }
 
 
     /**
-     * Add the value to the ProtocolSupportEnumeration-property
+     * Add the value to the ProtocolSupportEnumeration property.
+     *
      * @param string $protocol
      * @return void
      */
-    public function addProtocolSupportEnumeration($protocol)
+    public function addProtocolSupportEnumeration(string $protocol) : void
     {
         $this->protocolSupportEnumeration[] = $protocol;
     }
 
 
     /**
-     * Collect the value of the Organization-property
-     * @return \SAML2\XML\md\Organization
+     * Collect the value of the Organization property.
+     *
+     * @return \SAML2\XML\md\Organization|null
      */
-    public function getOrganization()
+    public function getOrganization() : ?Organization
     {
         return $this->Organization;
     }
 
 
     /**
-     * Set the value of the Organization-property
+     * Set the value of the Organization property.
+     *
      * @param \SAML2\XML\md\Organization|null $organization
      * @return void
      */
-    public function setOrganization(Organization $organization = null)
+    public function setOrganization(Organization $organization = null) : void
     {
         $this->Organization = $organization;
     }
 
 
     /**
-     * Collect the value of the ContactPerson-property
+     * Collect the value of the ContactPerson property.
+     *
      * @return \SAML2\XML\md\ContactPerson[]
      */
-    public function getContactPerson()
+    public function getContactPerson() : array
     {
         return $this->ContactPerson;
     }
 
 
     /**
-     * Set the value of the ContactPerson-property
+     * Set the value of the ContactPerson property.
+     *
      * @param array $contactPerson
      * @return void
      */
-    public function setContactPerson(array $contactPerson)
+    public function setContactPerson(array $contactPerson) : void
     {
         $this->ContactPerson = $contactPerson;
     }
 
 
     /**
-     * Add the value to the ContactPerson-property
+     * Add the value to the ContactPerson property.
+     *
      * @param \SAML2\XML\md\ContactPerson $contactPerson
      * @return void
      */
-    public function addContactPerson(ContactPerson $contactPerson)
+    public function addContactPerson(ContactPerson $contactPerson) : void
     {
         $this->ContactPerson[] = $contactPerson;
     }
 
 
     /**
-     * Collect the value of the KeyDescriptor-property
+     * Collect the value of the KeyDescriptor property.
+     *
      * @return \SAML2\XML\md\KeyDescriptor[]
      */
-    public function getKeyDescriptor()
+    public function getKeyDescriptor() : array
     {
         return $this->KeyDescriptor;
     }
 
 
     /**
-     * Set the value of the KeyDescriptor-property
+     * Set the value of the KeyDescriptor property.
+     *
      * @param array $keyDescriptor
      * @return void
      */
-    public function setKeyDescriptor(array $keyDescriptor)
+    public function setKeyDescriptor(array $keyDescriptor) : void
     {
         $this->KeyDescriptor = $keyDescriptor;
     }
 
 
     /**
-     * Add the value to the KeyDescriptor-property
+     * Add the value to the KeyDescriptor property.
+     *
      * @param \SAML2\XML\md\KeyDescriptor $keyDescriptor
      * @return void
      */
-    public function addKeyDescriptor(KeyDescriptor $keyDescriptor)
+    public function addKeyDescriptor(KeyDescriptor $keyDescriptor) : void
     {
         $this->KeyDescriptor[] = $keyDescriptor;
     }
@@ -395,50 +398,40 @@ public function addKeyDescriptor(KeyDescriptor $keyDescriptor)
      * @param \DOMElement $parent The EntityDescriptor we should append this endpoint to.
      * @return \DOMElement
      */
-    protected function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrString($this->getID());
-        Assert::nullOrInteger($this->getValidUntil());
-        Assert::nullOrString($this->getCacheDuration());
-        Assert::isArray($this->getProtocolSupportEnumeration());
-        Assert::nullOrString($this->getErrorURL());
-        Assert::isArray($this->getExtensions());
-        Assert::isArray($this->getKeyDescriptor());
-        Assert::nullOrIsInstanceOf($this->getOrganization(), Organization::class);
-        Assert::isArray($this->getContactPerson());
-
         $e = $parent->ownerDocument->createElementNS(Constants::NS_MD, $this->elementName);
         $parent->appendChild($e);
 
-        if ($this->getID() !== null) {
-            $e->setAttribute('ID', $this->getID());
+        if ($this->ID !== null) {
+            $e->setAttribute('ID', $this->ID);
         }
 
-        if ($this->getValidUntil() !== null) {
-            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->getValidUntil()));
+        if ($this->validUntil !== null) {
+            $e->setAttribute('validUntil', gmdate('Y-m-d\TH:i:s\Z', $this->validUntil));
         }
 
-        if ($this->getCacheDuration() !== null) {
-            $e->setAttribute('cacheDuration', $this->getCacheDuration());
+        if ($this->cacheDuration !== null) {
+            $e->setAttribute('cacheDuration', $this->cacheDuration);
         }
 
-        $e->setAttribute('protocolSupportEnumeration', implode(' ', $this->getProtocolSupportEnumeration()));
+        $e->setAttribute('protocolSupportEnumeration', implode(' ', $this->protocolSupportEnumeration));
 
-        if ($this->getErrorURL() !== null) {
-            $e->setAttribute('errorURL', $this->getErrorURL());
+        if ($this->errorURL !== null) {
+            $e->setAttribute('errorURL', $this->errorURL);
         }
 
-        Extensions::addList($e, $this->getExtensions());
+        Extensions::addList($e, $this->Extensions);
 
-        foreach ($this->getKeyDescriptor() as $kd) {
+        foreach ($this->KeyDescriptor as $kd) {
             $kd->toXML($e);
         }
 
-        if ($this->getOrganization() !== null) {
-            $this->getOrganization()->toXML($e);
+        if ($this->Organization !== null) {
+            $this->Organization->toXML($e);
         }
 
-        foreach ($this->getContactPerson() as $cp) {
+        foreach ($this->ContactPerson as $cp) {
             $cp->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SPSSODescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SPSSODescriptor.php
index 5cc9fc9986..4d27270efb 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SPSSODescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SPSSODescriptor.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 SPSSODescriptor.
@@ -17,14 +20,14 @@ class SPSSODescriptor extends SSODescriptorType
      *
      * @var bool|null
      */
-    public $AuthnRequestsSigned = null;
+    private $AuthnRequestsSigned = null;
 
     /**
      * Whether this SP wants the Assertion elements to be signed.
      *
      * @var bool|null
      */
-    public $WantAssertionsSigned = null;
+    private $WantAssertionsSigned = null;
 
     /**
      * List of AssertionConsumerService endpoints for this SP.
@@ -33,7 +36,7 @@ class SPSSODescriptor extends SSODescriptorType
      *
      * @var \SAML2\XML\md\IndexedEndpointType[]
      */
-    public $AssertionConsumerService = [];
+    private $AssertionConsumerService = [];
 
     /**
      * List of AttributeConsumingService descriptors for this SP.
@@ -42,7 +45,7 @@ class SPSSODescriptor extends SSODescriptorType
      *
      * @var \SAML2\XML\md\AttributeConsumingService[]
      */
-    public $AttributeConsumingService = [];
+    private $AttributeConsumingService = [];
 
 
     /**
@@ -50,7 +53,7 @@ class SPSSODescriptor extends SSODescriptorType
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct('md:SPSSODescriptor', $xml);
 
@@ -58,24 +61,27 @@ public function __construct(\DOMElement $xml = null)
             return;
         }
 
-        $this->setAuthnRequestsSigned(Utils::parseBoolean($xml, 'AuthnRequestsSigned', null));
-        $this->setWantAssertionsSigned(Utils::parseBoolean($xml, 'WantAssertionsSigned', null));
+        $this->AuthnRequestsSigned = Utils::parseBoolean($xml, 'AuthnRequestsSigned', null);
+        $this->WantAssertionsSigned = Utils::parseBoolean($xml, 'WantAssertionsSigned', null);
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:AssertionConsumerService') as $ep) {
-            $this->addAssertionConsumerService(new IndexedEndpointType($ep));
+            $this->AssertionConsumerService[] = new IndexedEndpointType($ep);
         }
 
+        /** @var \DOMElement $acs */
         foreach (Utils::xpQuery($xml, './saml_metadata:AttributeConsumingService') as $acs) {
-            $this->addAttributeConsumingService(new AttributeConsumingService($acs));
+            $this->AttributeConsumingService[] = new AttributeConsumingService($acs);
         }
     }
 
 
     /**
      * Collect the value of the AuthnRequestsSigned-property
+     *
      * @return bool|null
      */
-    public function getAuthnRequestsSigned()
+    public function getAuthnRequestsSigned() : ?bool
     {
         return $this->AuthnRequestsSigned;
     }
@@ -83,21 +89,22 @@ public function getAuthnRequestsSigned()
 
     /**
      * Set the value of the AuthnRequestsSigned-property
+     *
      * @param bool|null $flag
      * @return void
      */
-    public function setAuthnRequestsSigned($flag = null)
+    public function setAuthnRequestsSigned(bool $flag = null) : void
     {
-        Assert::nullOrBoolean($flag);
         $this->AuthnRequestsSigned = $flag;
     }
 
 
     /**
      * Collect the value of the WantAssertionsSigned-property
+     *
      * @return bool|null
      */
-    public function wantAssertionsSigned()
+    public function wantAssertionsSigned() : ?bool
     {
         return $this->WantAssertionsSigned;
     }
@@ -105,21 +112,22 @@ public function wantAssertionsSigned()
 
     /**
      * Set the value of the WantAssertionsSigned-property
+     *
      * @param bool|null $flag
      * @return void
      */
-    public function setWantAssertionsSigned($flag = null)
+    public function setWantAssertionsSigned(bool $flag = null) : void
     {
-        Assert::nullOrBoolean($flag);
         $this->WantAssertionsSigned = $flag;
     }
 
 
     /**
      * Collect the value of the AssertionConsumerService-property
+     *
      * @return array
      */
-    public function getAssertionConsumerService()
+    public function getAssertionConsumerService() : array
     {
         return $this->AssertionConsumerService;
     }
@@ -127,10 +135,11 @@ public function getAssertionConsumerService()
 
     /**
      * Set the value of the AssertionConsumerService-property
+     *
      * @param array $acs
      * @return void
      */
-    public function setAssertionConsumerService(array $acs)
+    public function setAssertionConsumerService(array $acs) : void
     {
         $this->AssertionConsumerService = $acs;
     }
@@ -138,10 +147,11 @@ public function setAssertionConsumerService(array $acs)
 
     /**
      * Add the value to the AssertionConsumerService-property
+     *
      * @param \SAML2\XML\md\IndexedEndpointType $acs
      * @return void
      */
-    public function addAssertionConsumerService(IndexedEndpointType $acs)
+    public function addAssertionConsumerService(IndexedEndpointType $acs) : void
     {
         $this->AssertionConsumerService[] = $acs;
     }
@@ -149,9 +159,10 @@ public function addAssertionConsumerService(IndexedEndpointType $acs)
 
     /**
      * Collect the value of the AttributeConsumingService-property
+     *
      * @return array
      */
-    public function getAttributeConsumingService()
+    public function getAttributeConsumingService() : array
     {
         return $this->AttributeConsumingService;
     }
@@ -159,10 +170,11 @@ public function getAttributeConsumingService()
 
     /**
      * Add the value to the AttributeConsumingService-property
+     *
      * @param \SAML2\XML\md\AttributeConsumingService $acs
      * @return void
      */
-    public function addAttributeConsumingService(AttributeConsumingService $acs)
+    public function addAttributeConsumingService(AttributeConsumingService $acs) : void
     {
         $this->AttributeConsumingService[] = $acs;
     }
@@ -170,10 +182,11 @@ public function addAttributeConsumingService(AttributeConsumingService $acs)
 
     /**
      * Set the value of the AttributeConsumingService-property
+     *
      * @param array $acs
      * @return void
      */
-    public function setAttributeConsumingService(array $acs)
+    public function setAttributeConsumingService(array $acs) : void
     {
         $this->AttributeConsumingService = $acs;
     }
@@ -185,32 +198,23 @@ public function setAttributeConsumingService(array $acs)
      * @param \DOMElement $parent The EntityDescriptor we should append this SPSSODescriptor to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrBoolean($this->getAuthnRequestsSigned());
-        Assert::nullOrBoolean($this->wantAssertionsSigned());
-        Assert::isArray($this->getAssertionConsumerService());
-        Assert::isArray($this->getAttributeConsumingService());
-
         $e = parent::toXML($parent);
 
-        if ($this->getAuthnRequestsSigned() === true) {
-            $e->setAttribute('AuthnRequestsSigned', 'true');
-        } elseif ($this->getAuthnRequestsSigned() === false) {
-            $e->setAttribute('AuthnRequestsSigned', 'false');
+        if (is_bool($this->AuthnRequestsSigned)) {
+            $e->setAttribute('AuthnRequestsSigned', $this->AuthnRequestsSigned ? 'true' : 'false');
         }
 
-        if ($this->wantAssertionsSigned() === true) {
-            $e->setAttribute('WantAssertionsSigned', 'true');
-        } elseif ($this->wantAssertionsSigned() === false) {
-            $e->setAttribute('WantAssertionsSigned', 'false');
+        if (is_bool($this->WantAssertionsSigned)) {
+            $e->setAttribute('WantAssertionsSigned', $this->WantAssertionsSigned ? 'true' : 'false');
         }
 
-        foreach ($this->getAssertionConsumerService() as $ep) {
+        foreach ($this->AssertionConsumerService as $ep) {
             $ep->toXML($e, 'md:AssertionConsumerService');
         }
 
-        foreach ($this->getAttributeConsumingService() as $acs) {
+        foreach ($this->AttributeConsumingService as $acs) {
             $acs->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SSODescriptorType.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SSODescriptorType.php
index 3477ee895d..ff179b1a75 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SSODescriptorType.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/SSODescriptorType.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 SSODescriptorType.
@@ -20,7 +23,7 @@ abstract class SSODescriptorType extends RoleDescriptor
      *
      * @var \SAML2\XML\md\IndexedEndpointType[]
      */
-    public $ArtifactResolutionService = [];
+    private $ArtifactResolutionService = [];
 
     /**
      * List of SingleLogoutService endpoints.
@@ -29,7 +32,7 @@ abstract class SSODescriptorType extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $SingleLogoutService = [];
+    private $SingleLogoutService = [];
 
     /**
      * List of ManageNameIDService endpoints.
@@ -38,7 +41,7 @@ abstract class SSODescriptorType extends RoleDescriptor
      *
      * @var \SAML2\XML\md\EndpointType[]
      */
-    public $ManageNameIDService = [];
+    private $ManageNameIDService = [];
 
     /**
      * List of supported NameID formats.
@@ -47,33 +50,34 @@ abstract class SSODescriptorType extends RoleDescriptor
      *
      * @var string[]
      */
-    public $NameIDFormat = [];
+    private $NameIDFormat = [];
 
 
     /**
      * Initialize a SSODescriptor.
      *
-     * @param string          $elementName The name of this element.
-     * @param \DOMElement|null $xml         The XML element we should load.
+     * @param string $elementName The name of this element.
+     * @param \DOMElement|null $xml The XML element we should load.
      */
-    protected function __construct($elementName, \DOMElement $xml = null)
+    protected function __construct(string $elementName, DOMElement $xml = null)
     {
-        Assert::string($elementName);
-
         parent::__construct($elementName, $xml);
 
         if ($xml === null) {
             return;
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:ArtifactResolutionService') as $ep) {
             $this->addArtifactResolutionService(new IndexedEndpointType($ep));
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:SingleLogoutService') as $ep) {
             $this->addSingleLogoutService(new EndpointType($ep));
         }
 
+        /** @var \DOMElement $ep */
         foreach (Utils::xpQuery($xml, './saml_metadata:ManageNameIDService') as $ep) {
             $this->addManageNameIDService(new EndpointType($ep));
         }
@@ -84,9 +88,10 @@ protected function __construct($elementName, \DOMElement $xml = null)
 
     /**
      * Collect the value of the ArtifactResolutionService-property
+     *
      * @return \SAML2\XML\md\IndexedEndpointType[]
      */
-    public function getArtifactResolutionService()
+    public function getArtifactResolutionService() : array
     {
         return $this->ArtifactResolutionService;
     }
@@ -94,10 +99,11 @@ public function getArtifactResolutionService()
 
     /**
      * Set the value of the ArtifactResolutionService-property
+     *
      * @param \SAML2\XML\md\IndexedEndpointType[] $artifactResolutionService
      * @return void
      */
-    public function setArtifactResolutionService(array $artifactResolutionService)
+    public function setArtifactResolutionService(array $artifactResolutionService) : void
     {
         $this->ArtifactResolutionService = $artifactResolutionService;
     }
@@ -105,21 +111,22 @@ public function setArtifactResolutionService(array $artifactResolutionService)
 
     /**
      * Add the value to the ArtifactResolutionService-property
+     *
      * @param \SAML2\XML\md\IndexedEndpointType $artifactResolutionService
      * @return void
      */
-    public function addArtifactResolutionService(IndexedEndpointType $artifactResolutionService)
+    public function addArtifactResolutionService(IndexedEndpointType $artifactResolutionService) : void
     {
-        Assert::isInstanceOf($artifactResolutionService, IndexedEndpointType::class);
         $this->ArtifactResolutionService[] = $artifactResolutionService;
     }
 
 
     /**
      * Collect the value of the SingleLogoutService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getSingleLogoutService()
+    public function getSingleLogoutService() : array
     {
         return $this->SingleLogoutService;
     }
@@ -127,10 +134,11 @@ public function getSingleLogoutService()
 
     /**
      * Set the value of the SingleLogoutService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $singleLogoutService
      * @return void
      */
-    public function setSingleLogoutService(array $singleLogoutService)
+    public function setSingleLogoutService(array $singleLogoutService) : void
     {
         $this->SingleLogoutService = $singleLogoutService;
     }
@@ -138,21 +146,22 @@ public function setSingleLogoutService(array $singleLogoutService)
 
     /**
      * Add the value to the SingleLogoutService-property
+     *
      * @param \SAML2\XML\md\EndpointType $singleLogoutService
      * @return void
      */
-    public function addSingleLogoutService(EndpointType $singleLogoutService)
+    public function addSingleLogoutService(EndpointType $singleLogoutService) : void
     {
-        Assert::isInstanceOf($singleLogoutService, EndpointType::class);
         $this->SingleLogoutService[] = $singleLogoutService;
     }
 
 
     /**
      * Collect the value of the ManageNameIDService-property
+     *
      * @return \SAML2\XML\md\EndpointType[]
      */
-    public function getManageNameIDService()
+    public function getManageNameIDService() : array
     {
         return $this->ManageNameIDService;
     }
@@ -160,10 +169,11 @@ public function getManageNameIDService()
 
     /**
      * Set the value of the ManageNameIDService-property
+     *
      * @param \SAML2\XML\md\EndpointType[] $manageNameIDService
      * @return void
      */
-    public function setManageNameIDService(array $manageNameIDService)
+    public function setManageNameIDService(array $manageNameIDService) : void
     {
         $this->ManageNameIDService = $manageNameIDService;
     }
@@ -171,21 +181,22 @@ public function setManageNameIDService(array $manageNameIDService)
 
     /**
      * Add the value to the ManageNameIDService-property
+     *
      * @param \SAML2\XML\md\EndpointType $manageNameIDService
      * @return void
      */
-    public function addManageNameIDService(EndpointType $manageNameIDService)
+    public function addManageNameIDService(EndpointType $manageNameIDService) : void
     {
-        Assert::isInstanceOf($manageNameIDService, EndpointType::class);
         $this->ManageNameIDService[] = $manageNameIDService;
     }
 
 
     /**
      * Collect the value of the NameIDFormat-property
+     *
      * @return string[]
      */
-    public function getNameIDFormat()
+    public function getNameIDFormat() : array
     {
         return $this->NameIDFormat;
     }
@@ -193,10 +204,11 @@ public function getNameIDFormat()
 
     /**
      * Set the value of the NameIDFormat-property
+     *
      * @param string[] $nameIDFormat
      * @return void
      */
-    public function setNameIDFormat(array $nameIDFormat)
+    public function setNameIDFormat(array $nameIDFormat) : void
     {
         $this->NameIDFormat = $nameIDFormat;
     }
@@ -208,28 +220,23 @@ public function setNameIDFormat(array $nameIDFormat)
      * @param  \DOMElement $parent The EntityDescriptor we should append this SSODescriptorType to.
      * @return \DOMElement The generated SSODescriptor DOMElement.
      */
-    protected function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($this->getArtifactResolutionService());
-        Assert::isArray($this->getSingleLogoutService());
-        Assert::isArray($this->getManageNameIDService());
-        Assert::isArray($this->getNameIDFormat());
-
         $e = parent::toXML($parent);
 
-        foreach ($this->getArtifactResolutionService() as $ep) {
+        foreach ($this->ArtifactResolutionService as $ep) {
             $ep->toXML($e, 'md:ArtifactResolutionService');
         }
 
-        foreach ($this->getSingleLogoutService() as $ep) {
+        foreach ($this->SingleLogoutService as $ep) {
             $ep->toXML($e, 'md:SingleLogoutService');
         }
 
-        foreach ($this->getManageNameIDService() as $ep) {
+        foreach ($this->ManageNameIDService as $ep) {
             $ep->toXML($e, 'md:ManageNameIDService');
         }
 
-        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->getNameIDFormat());
+        Utils::addStrings($e, Constants::NS_MD, 'md:NameIDFormat', false, $this->NameIDFormat);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/UnknownRoleDescriptor.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/UnknownRoleDescriptor.php
index c530d88d67..ccb7c2b14f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/md/UnknownRoleDescriptor.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/md/UnknownRoleDescriptor.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\md;
 
+use DOMElement;
+
 use SAML2\XML\Chunk;
 
 /**
@@ -24,7 +28,7 @@ class UnknownRoleDescriptor extends RoleDescriptor
      *
      * @param \DOMElement $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml)
+    public function __construct(DOMElement $xml)
     {
         parent::__construct('md:RoleDescriptor', $xml);
 
@@ -36,10 +40,10 @@ public function __construct(\DOMElement $xml)
      * Add this RoleDescriptor to an EntityDescriptor.
      *
      * @param \DOMElement $parent The EntityDescriptor we should append this RoleDescriptor to.
-     * @return void
+     * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        $this->xml->toXML($parent);
+        return $this->xml->toXML($parent);
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdattr/EntityAttributes.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdattr/EntityAttributes.php
index bad38df955..2131170f3b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdattr/EntityAttributes.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdattr/EntityAttributes.php
@@ -1,11 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdattr;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Utils;
 use SAML2\XML\Chunk;
 use SAML2\XML\saml\Attribute;
-use Webmozart\Assert\Assert;
 
 /**
  * Class for handling the EntityAttributes metadata extension.
@@ -27,7 +31,7 @@ class EntityAttributes
      *
      * @var (\SAML2\XML\saml\Attribute|\SAML2\XML\Chunk)[]
      */
-    public $children;
+    private $children = [];
 
 
     /**
@@ -35,17 +39,18 @@ class EntityAttributes
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
+        /** @var \DOMElement $node */
         foreach (Utils::xpQuery($xml, './saml_assertion:Attribute|./saml_assertion:Assertion') as $node) {
             if ($node->localName === 'Attribute') {
-                $this->addChildren(new Attribute($node));
+                $this->children[] = new Attribute($node);
             } else {
-                $this->addChildren(new Chunk($node));
+                $this->children[] = new Chunk($node);
             }
         }
     }
@@ -53,9 +58,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the children-property
+     *
      * @return (\SAML2\XML\Chunk|\SAML2\XML\saml\Attribute)[]
      */
-    public function getChildren()
+    public function getChildren() : array
     {
         return $this->children;
     }
@@ -63,10 +69,11 @@ public function getChildren()
 
     /**
      * Set the value of the childen-property
+     *
      * @param array $children
      * @return void
      */
-    public function setChildren(array $children)
+    public function setChildren(array $children) : void
     {
         $this->children = $children;
     }
@@ -74,10 +81,11 @@ public function setChildren(array $children)
 
     /**
      * Add the value to the children-property
+     *
      * @param \SAML2\XML\Chunk|\SAML2\XML\saml\Attribute $child
      * @return void
      */
-    public function addChildren($child)
+    public function addChildren($child) : void
     {
         Assert::isInstanceOfAny($child, [Chunk::class, Attribute::class]);
         $this->children[] = $child;
@@ -90,17 +98,15 @@ public function addChildren($child)
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isArray($this->getChildren());
-
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(EntityAttributes::NS, 'mdattr:EntityAttributes');
         $parent->appendChild($e);
 
         /** @var \SAML2\XML\saml\Attribute|\SAML2\XML\Chunk $child */
-        foreach ($this->getChildren() as $child) {
+        foreach ($this->children as $child) {
             $child->toXML($e);
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/Common.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/Common.php
index 2641120128..f80a858253 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/Common.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/Common.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdrpi;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/PublicationInfo.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/PublicationInfo.php
index 54e6217e91..b8e87cb2ed 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/PublicationInfo.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/PublicationInfo.php
@@ -1,10 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdrpi;
 
-use SAML2\Utils;
+use DOMElement;
 use Webmozart\Assert\Assert;
 
+use SAML2\Utils;
+
 /**
  * Class for handling the mdrpi:PublicationInfo element.
  *
@@ -18,21 +22,21 @@ class PublicationInfo
      *
      * @var string
      */
-    public $publisher;
+    private $publisher = '';
 
     /**
      * The creation timestamp for the metadata, as a UNIX timestamp.
      *
      * @var int|null
      */
-    public $creationInstant;
+    private $creationInstant = null;
 
     /**
      * Identifier for this metadata publication.
      *
      * @var string|null
      */
-    public $publicationId;
+    private $publicationId = null;
 
     /**
      * Link to usage policy for this metadata.
@@ -41,7 +45,7 @@ class PublicationInfo
      *
      * @var array
      */
-    public $UsagePolicy = [];
+    private $UsagePolicy = [];
 
 
     /**
@@ -50,7 +54,7 @@ class PublicationInfo
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -59,25 +63,26 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('publisher')) {
             throw new \Exception('Missing required attribute "publisher" in mdrpi:PublicationInfo element.');
         }
-        $this->setPublisher($xml->getAttribute('publisher'));
+        $this->publisher = $xml->getAttribute('publisher');
 
         if ($xml->hasAttribute('creationInstant')) {
-            $this->setCreationInstant(Utils::xsDateTimeToTimestamp($xml->getAttribute('creationInstant')));
+            $this->creationInstant = Utils::xsDateTimeToTimestamp($xml->getAttribute('creationInstant'));
         }
 
         if ($xml->hasAttribute('publicationId')) {
-            $this->setPublicationId($xml->getAttribute('publicationId'));
+            $this->publicationId = $xml->getAttribute('publicationId');
         }
 
-        $this->setUsagePolicy(Utils::extractLocalizedStrings($xml, Common::NS_MDRPI, 'UsagePolicy'));
+        $this->UsagePolicy = Utils::extractLocalizedStrings($xml, Common::NS_MDRPI, 'UsagePolicy');
     }
 
 
     /**
      * Collect the value of the publisher-property
+     *
      * @return string
      */
-    public function getPublisher()
+    public function getPublisher() : string
     {
         return $this->publisher;
     }
@@ -85,9 +90,10 @@ public function getPublisher()
 
     /**
      * Collect the value of the creationInstant-property
+     *
      * @return int|null
      */
-    public function getCreationInstant()
+    public function getCreationInstant() : ?int
     {
         return $this->creationInstant;
     }
@@ -95,9 +101,10 @@ public function getCreationInstant()
 
     /**
      * Collect the value of the publicationId-property
+     *
      * @return string|null
      */
-    public function getPublicationId()
+    public function getPublicationId() : ?string
     {
         return $this->publicationId;
     }
@@ -105,9 +112,10 @@ public function getPublicationId()
 
     /**
      * Collect the value of the UsagePolicy-property
+     *
      * @return array
      */
-    public function getUsagePolicy()
+    public function getUsagePolicy() : array
     {
         return $this->UsagePolicy;
     }
@@ -115,46 +123,47 @@ public function getUsagePolicy()
 
     /**
      * Set the value of the publisher-property
+     *
      * @param string $publisher
      * @return void
      */
-    public function setPublisher($publisher)
+    public function setPublisher(string $publisher) : void
     {
-        Assert::string($publisher);
         $this->publisher = $publisher;
     }
 
 
     /**
      * Set the value of the creationInstant-property
+     *
      * @param int|null $creationInstant
      * @return void
      */
-    public function setCreationInstant($creationInstant = null)
+    public function setCreationInstant(int $creationInstant = null) : void
     {
-        Assert::nullOrInteger($creationInstant);
         $this->creationInstant = $creationInstant;
     }
 
 
     /**
      * Set the value of the publicationId-property
+     *
      * @param string|null $publicationId
      * @return void
      */
-    public function setPublicationId($publicationId = null)
+    public function setPublicationId(string $publicationId = null) : void
     {
-        Assert::nullOrString($publicationId);
         $this->publicationId = $publicationId;
     }
 
 
     /**
      * Set the value of the UsagePolicy-property
+     *
      * @param array $usagePolicy
      * @return void
      */
-    public function setUsagePolicy(array $usagePolicy)
+    public function setUsagePolicy(array $usagePolicy) : void
     {
         $this->UsagePolicy = $usagePolicy;
     }
@@ -166,29 +175,26 @@ public function setUsagePolicy(array $usagePolicy)
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getPublisher());
-        Assert::nullOrInteger($this->getCreationInstant());
-        Assert::nullOrString($this->getPublicationId());
-        Assert::isArray($this->getUsagePolicy());
+        Assert::notEmpty($this->publisher, "Cannot convert PublicationInfo to XML without a publisher set.");
 
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Common::NS_MDRPI, 'mdrpi:PublicationInfo');
         $parent->appendChild($e);
 
-        $e->setAttribute('publisher', $this->getPublisher());
+        $e->setAttribute('publisher', $this->publisher);
 
-        if ($this->getCreationInstant() !== null) {
-            $e->setAttribute('creationInstant', gmdate('Y-m-d\TH:i:s\Z', $this->getCreationInstant()));
+        if ($this->creationInstant !== null) {
+            $e->setAttribute('creationInstant', gmdate('Y-m-d\TH:i:s\Z', $this->creationInstant));
         }
 
-        if ($this->getPublicationId() !== null) {
-            $e->setAttribute('publicationId', $this->getPublicationId());
+        if ($this->publicationId !== null) {
+            $e->setAttribute('publicationId', $this->publicationId);
         }
 
-        Utils::addStrings($e, Common::NS_MDRPI, 'mdrpi:UsagePolicy', true, $this->getUsagePolicy());
+        Utils::addStrings($e, Common::NS_MDRPI, 'mdrpi:UsagePolicy', true, $this->UsagePolicy);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/RegistrationInfo.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/RegistrationInfo.php
index e59c134847..ea2ee751c4 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/RegistrationInfo.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdrpi/RegistrationInfo.php
@@ -1,9 +1,12 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdrpi;
 
+use DOMElement;
+
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class for handling the mdrpi:RegistrationInfo element.
@@ -16,16 +19,16 @@ class RegistrationInfo
     /**
      * The identifier of the metadata registration authority.
      *
-     * @var string
+     * @var string|null
      */
-    public $registrationAuthority;
+    private $registrationAuthority = null;
 
     /**
      * The registration timestamp for the metadata, as a UNIX timestamp.
      *
      * @var int|null
      */
-    public $registrationInstant;
+    private $registrationInstant = null;
 
     /**
      * Link to registration policy for this metadata.
@@ -34,7 +37,7 @@ class RegistrationInfo
      *
      * @var array
      */
-    public $RegistrationPolicy = [];
+    private $RegistrationPolicy = [];
 
 
     /**
@@ -43,85 +46,91 @@ class RegistrationInfo
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
         if (!$xml->hasAttribute('registrationAuthority')) {
-            throw new \Exception('Missing required attribute "registrationAuthority" in mdrpi:RegistrationInfo element.');
+            throw new \Exception(
+                'Missing required attribute "registrationAuthority" in mdrpi:RegistrationInfo element.'
+            );
         }
-        $this->setRegistrationAuthority($xml->getAttribute('registrationAuthority'));
+        $this->registrationAuthority = $xml->getAttribute('registrationAuthority');
 
         if ($xml->hasAttribute('registrationInstant')) {
-            $this->setRegistrationInstant(Utils::xsDateTimeToTimestamp($xml->getAttribute('registrationInstant')));
+            $this->registrationInstant = Utils::xsDateTimeToTimestamp($xml->getAttribute('registrationInstant'));
         }
 
-        $this->setRegistrationPolicy(Utils::extractLocalizedStrings($xml, Common::NS_MDRPI, 'RegistrationPolicy'));
+        $this->RegistrationPolicy = Utils::extractLocalizedStrings($xml, Common::NS_MDRPI, 'RegistrationPolicy');
     }
 
 
     /**
-     * Collect the value of the RegistrationAuthority-property
-     * @return string
+     * Collect the value of the RegistrationAuthority property
+     *
+     * @return string|null
      */
-    public function getRegistrationAuthority()
+    public function getRegistrationAuthority() : ?string
     {
         return $this->registrationAuthority;
     }
 
 
     /**
-     * Set the value of the registrationAuthority-property
+     * Set the value of the registrationAuthority property
+     *
      * @param string $registrationAuthority
      * @return void
      */
-    public function setRegistrationAuthority($registrationAuthority)
+    public function setRegistrationAuthority(string $registrationAuthority) : void
     {
-        Assert::string($registrationAuthority);
         $this->registrationAuthority = $registrationAuthority;
     }
 
 
     /**
-     * Collect the value of the registrationInstant-property
+     * Collect the value of the registrationInstant property
+     *
      * @return int|null
      */
-    public function getRegistrationInstant()
+    public function getRegistrationInstant() : ?int
     {
         return $this->registrationInstant;
     }
 
 
     /**
-     * Set the value of the registrationInstant-property
+     * Set the value of the registrationInstant property
+     *
      * @param int|null $registrationInstant
      * @return void
      */
-    public function setRegistrationInstant($registrationInstant = null)
+    public function setRegistrationInstant(int $registrationInstant = null) : void
     {
-        Assert::nullOrInteger($registrationInstant);
         $this->registrationInstant = $registrationInstant;
     }
 
 
     /**
-     * Collect the value of the RegistrationPolicy-property
+     * Collect the value of the RegistrationPolicy property
+     *
      * @return array
      */
-    public function getRegistrationPolicy()
+    public function getRegistrationPolicy() : array
     {
         return $this->RegistrationPolicy;
     }
 
 
     /**
-     * Set the value of the RegistrationPolicy-property
+     * Set the value of the RegistrationPolicy property
+     *
      * @param array $registrationPolicy
      * @return void
      */
-    public function setRegistrationPolicy(array $registrationPolicy)
+    public function setRegistrationPolicy(array $registrationPolicy) : void
     {
         $this->RegistrationPolicy = $registrationPolicy;
     }
@@ -133,14 +142,9 @@ public function setRegistrationPolicy(array $registrationPolicy)
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getRegistrationAuthority());
-        Assert::nullOrInteger($this->getRegistrationInstant());
-        Assert::isArray($this->getRegistrationPolicy());
-
-        $registrationAuthority = $this->getRegistrationAuthority();
-        if (empty($registrationAuthority)) {
+        if (empty($this->registrationAuthority)) {
             throw new \Exception('Missing required registration authority.');
         }
 
@@ -149,13 +153,13 @@ public function toXML(\DOMElement $parent)
         $e = $doc->createElementNS(Common::NS_MDRPI, 'mdrpi:RegistrationInfo');
         $parent->appendChild($e);
 
-        $e->setAttribute('registrationAuthority', $this->getRegistrationAuthority());
+        $e->setAttribute('registrationAuthority', $this->registrationAuthority);
 
-        if ($this->getRegistrationInstant() !== null) {
-            $e->setAttribute('registrationInstant', gmdate('Y-m-d\TH:i:s\Z', $this->getRegistrationInstant()));
+        if ($this->registrationInstant !== null) {
+            $e->setAttribute('registrationInstant', gmdate('Y-m-d\TH:i:s\Z', $this->registrationInstant));
         }
 
-        Utils::addStrings($e, Common::NS_MDRPI, 'mdrpi:RegistrationPolicy', true, $this->getRegistrationPolicy());
+        Utils::addStrings($e, Common::NS_MDRPI, 'mdrpi:RegistrationPolicy', true, $this->RegistrationPolicy);
 
         return $e;
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Common.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Common.php
index e573f227d1..f9b980857b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Common.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Common.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdui;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/DiscoHints.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/DiscoHints.php
index 43392cd9f1..728fb53c16 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/DiscoHints.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/DiscoHints.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdui;
 
+use DOMElement;
+
 use SAML2\Utils;
 use SAML2\XML\Chunk;
-use Webmozart\Assert\Assert;
 
 /**
  * Class for handling the metadata extensions for login and discovery user interface
@@ -21,28 +24,28 @@ class DiscoHints
      *
      * @var \SAML2\XML\Chunk[]
      */
-    public $children = [];
+    private $children = [];
 
     /**
      * The IPHint, as an array of strings.
      *
      * @var string[]
      */
-    public $IPHint = [];
+    private $IPHint = [];
 
     /**
      * The DomainHint, as an array of strings.
      *
      * @var string[]
      */
-    public $DomainHint = [];
+    private $DomainHint = [];
 
     /**
      * The GeolocationHint, as an array of strings.
      *
      * @var string[]
      */
-    public $GeolocationHint = [];
+    private $GeolocationHint = [];
 
 
     /**
@@ -50,27 +53,29 @@ class DiscoHints
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
-        $this->setIPHint(Utils::extractStrings($xml, Common::NS, 'IPHint'));
-        $this->setDomainHint(Utils::extractStrings($xml, Common::NS, 'DomainHint'));
-        $this->setGeolocationHint(Utils::extractStrings($xml, Common::NS, 'GeolocationHint'));
+        $this->IPHint = Utils::extractStrings($xml, Common::NS, 'IPHint');
+        $this->DomainHint = Utils::extractStrings($xml, Common::NS, 'DomainHint');
+        $this->GeolocationHint = Utils::extractStrings($xml, Common::NS, 'GeolocationHint');
 
+        /** @var \DOMElement $node */
         foreach (Utils::xpQuery($xml, "./*[namespace-uri()!='".Common::NS."']") as $node) {
-            $this->addChildren(new Chunk($node));
+            $this->children[] = new Chunk($node);
         }
     }
 
 
     /**
      * Collect the value of the IPHint-property
+     *
      * @return string[]
      */
-    public function getIPHint()
+    public function getIPHint() : array
     {
         return $this->IPHint;
     }
@@ -78,10 +83,11 @@ public function getIPHint()
 
     /**
      * Set the value of the IPHint-property
+     *
      * @param string[] $hints
      * @return void
      */
-    public function setIPHint(array $hints)
+    public function setIPHint(array $hints) : void
     {
         $this->IPHint = $hints;
     }
@@ -89,9 +95,10 @@ public function setIPHint(array $hints)
 
     /**
      * Collect the value of the DomainHint-property
+     *
      * @return string[]
      */
-    public function getDomainHint()
+    public function getDomainHint() : array
     {
         return $this->DomainHint;
     }
@@ -99,10 +106,11 @@ public function getDomainHint()
 
     /**
      * Set the value of the DomainHint-property
+     *
      * @param string[] $hints
      * @return void
      */
-    public function setDomainHint(array $hints)
+    public function setDomainHint(array $hints) : void
     {
         $this->DomainHint = $hints;
     }
@@ -110,9 +118,10 @@ public function setDomainHint(array $hints)
 
     /**
      * Collect the value of the GeolocationHint-property
+     *
      * @return string[]
      */
-    public function getGeolocationHint()
+    public function getGeolocationHint() : array
     {
         return $this->GeolocationHint;
     }
@@ -120,10 +129,11 @@ public function getGeolocationHint()
 
     /**
      * Set the value of the GeolocationHint-property
+     *
      * @param string[] $hints
      * @return void
      */
-    public function setGeolocationHint(array $hints)
+    public function setGeolocationHint(array $hints) : void
     {
         $this->GeolocationHint = $hints;
     }
@@ -131,9 +141,10 @@ public function setGeolocationHint(array $hints)
 
     /**
      * Collect the value of the children-property
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getChildren()
+    public function getChildren() : array
     {
         return $this->children;
     }
@@ -141,10 +152,11 @@ public function getChildren()
 
     /**
      * Set the value of the childen-property
+     *
      * @param array $children
      * @return void
      */
-    public function setChildren(array $children)
+    public function setChildren(array $children) : void
     {
         $this->children = $children;
     }
@@ -152,12 +164,12 @@ public function setChildren(array $children)
 
     /**
      * Add the value to the children-property
+     *
      * @param \SAML2\XML\Chunk $child
      * @return void
      */
-    public function addChildren(Chunk $child)
+    public function addChildren(Chunk $child) : void
     {
-        Assert::isInstanceOf($child, Chunk::class);
         $this->children[] = $child;
     }
 
@@ -168,31 +180,25 @@ public function addChildren(Chunk $child)
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement|null
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : ?DOMElement
     {
-        Assert::isArray($IPHint = $this->getIPHint());
-        Assert::isArray($DomainHint = $this->getDomainHint());
-        Assert::isArray($GeolocationHint = $this->getGeolocationHint());
-        Assert::isArray($children = $this->getChildren());
-
-        if (!empty($IPHint)
-         || !empty($DomainHint)
-         || !empty($GeolocationHint)
-         || !empty($children)) {
+        if (!empty($this->IPHint)
+         || !empty($this->DomainHint)
+         || !empty($this->GeolocationHint)
+         || !empty($this->children)
+        ) {
             $doc = $parent->ownerDocument;
 
             $e = $doc->createElementNS(Common::NS, 'mdui:DiscoHints');
             $parent->appendChild($e);
 
-            if (!empty($children)) {
-                foreach ($this->getChildren() as $child) {
-                    $child->toXML($e);
-                }
+            foreach ($this->getChildren() as $child) {
+                $child->toXML($e);
             }
 
-            Utils::addStrings($e, Common::NS, 'mdui:IPHint', false, $this->getIPHint());
-            Utils::addStrings($e, Common::NS, 'mdui:DomainHint', false, $this->getDomainHint());
-            Utils::addStrings($e, Common::NS, 'mdui:GeolocationHint', false, $this->getGeolocationHint());
+            Utils::addStrings($e, Common::NS, 'mdui:IPHint', false, $this->IPHint);
+            Utils::addStrings($e, Common::NS, 'mdui:DomainHint', false, $this->DomainHint);
+            Utils::addStrings($e, Common::NS, 'mdui:GeolocationHint', false, $this->GeolocationHint);
 
             return $e;
         }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Keywords.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Keywords.php
index 33fc368887..c79c9e5988 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Keywords.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Keywords.php
@@ -1,7 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdui;
 
+use DOMElement;
 use Webmozart\Assert\Assert;
 
 /**
@@ -19,14 +22,14 @@ class Keywords
      *
      * @var string[]
      */
-    public $Keywords;
+    private $Keywords = [];
 
     /**
      * The language of this item.
      *
-     * @var string|null
+     * @var string
      */
-    public $lang;
+    private $lang = '';
 
 
     /**
@@ -35,7 +38,7 @@ class Keywords
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -44,22 +47,22 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('xml:lang')) {
             throw new \Exception('Missing lang on Keywords.');
         }
-        if (!is_string($xml->textContent) || !strlen($xml->textContent)) {
+        if (!strlen($xml->textContent)) {
             throw new \Exception('Missing value for Keywords.');
         }
-        $this->setKeywords([]);
         foreach (explode(' ', $xml->textContent) as $keyword) {
-            $this->addKeyword(str_replace('+', ' ', $keyword));
+            $this->Keywords[] = str_replace('+', ' ', $keyword);
         }
-        $this->setLanguage($xml->getAttribute('xml:lang'));
+        $this->lang = $xml->getAttribute('xml:lang');
     }
 
 
     /**
      * Collect the value of the lang-property
-     * @return string|null
+     *
+     * @return string
      */
-    public function getLanguage()
+    public function getLanguage() : string
     {
         return $this->lang;
     }
@@ -67,21 +70,22 @@ public function getLanguage()
 
     /**
      * Set the value of the lang-property
+     *
      * @param string $lang
      * @return void
      */
-    public function setLanguage($lang)
+    public function setLanguage(string $lang) : void
     {
-        Assert::nullOrString($lang);
         $this->lang = $lang;
     }
 
 
     /**
      * Collect the value of the Keywords-property
+     *
      * @return string[]
      */
-    public function getKeywords()
+    public function getKeywords() : array
     {
         return $this->Keywords;
     }
@@ -89,10 +93,11 @@ public function getKeywords()
 
     /**
      * Set the value of the Keywords-property
+     *
      * @param string[] $keywords
      * @return void
      */
-    public function setKeywords(array $keywords)
+    public function setKeywords(array $keywords) : void
     {
         $this->Keywords = $keywords;
     }
@@ -100,12 +105,12 @@ public function setKeywords(array $keywords)
 
     /**
      * Add the value to the Keywords-property
+     *
      * @param string $keyword
      * @return void
      */
-    public function addKeyword($keyword)
+    public function addKeyword(string $keyword) : void
     {
-        Assert::string($keyword);
         $this->Keywords[] = $keyword;
     }
 
@@ -117,17 +122,16 @@ public function addKeyword($keyword)
      * @throws \Exception
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getLanguage());
-        Assert::isArray($this->getKeywords());
+        Assert::notEmpty($this->lang, "Cannot convert Keywords to XML without a language set.");
 
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Common::NS, 'mdui:Keywords');
-        $e->setAttribute('xml:lang', $this->getLanguage());
+        $e->setAttribute('xml:lang', $this->lang);
         $value = '';
-        foreach ($this->getKeywords() as $keyword) {
+        foreach ($this->Keywords as $keyword) {
             if (strpos($keyword, "+") !== false) {
                 throw new \Exception('Keywords may not contain a "+" character.');
             }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Logo.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Logo.php
index dce6e025fa..b680a759b2 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Logo.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/Logo.php
@@ -1,8 +1,10 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdui;
 
-use Webmozart\Assert\Assert;
+use DOMElement;
 
 /**
  * Class for handling the Logo metadata extensions for login and discovery user interface
@@ -17,28 +19,28 @@ class Logo
      *
      * @var string
      */
-    public $url;
+    private $url;
 
     /**
      * The width of this logo.
      *
      * @var int
      */
-    public $width;
+    private $width;
 
     /**
      * The height of this logo.
      *
      * @var int
      */
-    public $height;
+    private $height;
 
     /**
      * The language of this item.
      *
-     * @var string
+     * @var string|null
      */
-    public $lang;
+    private $lang = null;
 
 
     /**
@@ -47,7 +49,7 @@ class Logo
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -59,7 +61,7 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('height')) {
             throw new \Exception('Missing height of Logo.');
         }
-        if (!is_string($xml->textContent) || !strlen($xml->textContent)) {
+        if (!strlen($xml->textContent)) {
             throw new \Exception('Missing url value for Logo.');
         }
         $this->setUrl($xml->textContent);
@@ -73,9 +75,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the url-property
+     *
      * @return string
      */
-    public function getUrl()
+    public function getUrl() : string
     {
         return $this->url;
     }
@@ -83,11 +86,12 @@ public function getUrl()
 
     /**
      * Set the value of the url-property
+     *
      * @param string $url
+     * @return void
      */
-    public function setUrl($url)
+    public function setUrl(string $url) : void
     {
-        Assert::string($url);
         if (!filter_var(trim($url), FILTER_VALIDATE_URL) && substr(trim($url), 0, 5) !== 'data:') {
             throw new \InvalidArgumentException('mdui:Logo is not a valid URL.');
         }
@@ -97,9 +101,10 @@ public function setUrl($url)
 
     /**
      * Collect the value of the lang-property
-     * @return string
+     *
+     * @return string|null
      */
-    public function getLanguage()
+    public function getLanguage() : ?string
     {
         return $this->lang;
     }
@@ -107,21 +112,22 @@ public function getLanguage()
 
     /**
      * Set the value of the lang-property
+     *
      * @param string $lang
      * @return void
      */
-    public function setLanguage($lang)
+    public function setLanguage(string $lang) : void
     {
-        Assert::string($lang);
         $this->lang = $lang;
     }
 
 
     /**
      * Collect the value of the height-property
+     *
      * @return int
      */
-    public function getHeight()
+    public function getHeight() : int
     {
         return $this->height;
     }
@@ -129,21 +135,22 @@ public function getHeight()
 
     /**
      * Set the value of the height-property
+     *
      * @param int $height
      * @return void
      */
-    public function setHeight($height)
+    public function setHeight(int $height) : void
     {
-        Assert::integer($height);
         $this->height = $height;
     }
 
 
     /**
      * Collect the value of the width-property
+     *
      * @return int
      */
-    public function getWidth()
+    public function getWidth() : int
     {
         return $this->width;
     }
@@ -151,12 +158,12 @@ public function getWidth()
 
     /**
      * Set the value of the width-property
+     *
      * @param int $width
      * @return void
      */
-    public function setWidth($width)
+    public function setWidth(int $width) : void
     {
-        Assert::integer($width);
         $this->width = $width;
     }
 
@@ -167,20 +174,16 @@ public function setWidth($width)
      * @param \DOMElement $parent The element we should append this Logo to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::integer($this->getWidth());
-        Assert::integer($this->getHeight());
-        Assert::string($this->getUrl());
-
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Common::NS, 'mdui:Logo');
-        $e->appendChild($doc->createTextNode($this->getUrl()));
-        $e->setAttribute('width', intval($this->getWidth()));
-        $e->setAttribute('height', intval($this->getHeight()));
-        if ($this->getLanguage() !== null) {
-            $e->setAttribute('xml:lang', $this->getLanguage());
+        $e->appendChild($doc->createTextNode($this->url));
+        $e->setAttribute('width', strval($this->width));
+        $e->setAttribute('height', strval($this->height));
+        if ($this->lang !== null) {
+            $e->setAttribute('xml:lang', $this->lang);
         }
         $parent->appendChild($e);
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/UIInfo.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/UIInfo.php
index 5327d0024c..4871c95b6f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/UIInfo.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/mdui/UIInfo.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\mdui;
 
 use DOMElement;
@@ -22,49 +24,49 @@ class UIInfo
      *
      * @var \SAML2\XML\Chunk[]
      */
-    public $children = [];
+    private $children = [];
 
     /**
      * The DisplayName, as an array of language => translation.
      *
      * @var array
      */
-    public $DisplayName = [];
+    private $DisplayName = [];
 
     /**
      * The Description, as an array of language => translation.
      *
      * @var array
      */
-    public $Description = [];
+    private $Description = [];
 
     /**
      * The InformationURL, as an array of language => url.
      *
      * @var array
      */
-    public $InformationURL = [];
+    private $InformationURL = [];
 
     /**
      * The PrivacyStatementURL, as an array of language => url.
      *
      * @var array
      */
-    public $PrivacyStatementURL = [];
+    private $PrivacyStatementURL = [];
 
     /**
      * The Keywords, as an array of Keywords objects
      *
      * @var \SAML2\XML\mdui\Keywords[]
      */
-    public $Keywords = [];
+    private $Keywords = [];
 
     /**
      * The Logo, as an array of Logo objects
      *
      * @var \SAML2\XML\mdui\Logo[]
      */
-    public $Logo = [];
+    private $Logo = [];
 
 
     /**
@@ -72,29 +74,30 @@ class UIInfo
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
-        $this->setDisplayName(Utils::extractLocalizedStrings($xml, Common::NS, 'DisplayName'));
-        $this->setDescription(Utils::extractLocalizedStrings($xml, Common::NS, 'Description'));
-        $this->setInformationURL(Utils::extractLocalizedStrings($xml, Common::NS, 'InformationURL'));
-        $this->setPrivacyStatementURL(Utils::extractLocalizedStrings($xml, Common::NS, 'PrivacyStatementURL'));
+        $this->DisplayName = Utils::extractLocalizedStrings($xml, Common::NS, 'DisplayName');
+        $this->Description = Utils::extractLocalizedStrings($xml, Common::NS, 'Description');
+        $this->InformationURL = Utils::extractLocalizedStrings($xml, Common::NS, 'InformationURL');
+        $this->PrivacyStatementURL = Utils::extractLocalizedStrings($xml, Common::NS, 'PrivacyStatementURL');
 
+        /** @var \DOMElement $node */
         foreach (Utils::xpQuery($xml, './*') as $node) {
             if ($node->namespaceURI === Common::NS) {
                 switch ($node->localName) {
                     case 'Keywords':
-                        $this->addKeyword(new Keywords($node));
+                        $this->Keywords[] = new Keywords($node);
                         break;
                     case 'Logo':
-                        $this->addLogo(new Logo($node));
+                        $this->Logo[] = new Logo($node);
                         break;
                 }
             } else {
-                $this->addChildren(new Chunk($node));
+                $this->children[] = new Chunk($node);
             }
         }
     }
@@ -102,9 +105,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the Keywords-property
+     *
      * @return \SAML2\XML\mdui\Keywords[]
      */
-    public function getKeywords()
+    public function getKeywords() : array
     {
         return $this->Keywords;
     }
@@ -112,10 +116,11 @@ public function getKeywords()
 
     /**
      * Set the value of the Keywords-property
+     *
      * @param \SAML2\XML\mdui\Keywords[] $keywords
      * @return void
      */
-    public function setKeywords(array $keywords)
+    public function setKeywords(array $keywords) : void
     {
         Assert::allIsInstanceOf($keywords, Keywords::class);
         $this->Keywords = $keywords;
@@ -124,10 +129,11 @@ public function setKeywords(array $keywords)
 
     /**
      * Add the value to the Keywords-property
+     *
      * @param \SAML2\XML\mdui\Keywords $keyword
      * @return void
      */
-    public function addKeyword(Keywords $keyword)
+    public function addKeyword(Keywords $keyword) : void
     {
         $this->Keywords[] = $keyword;
     }
@@ -135,9 +141,10 @@ public function addKeyword(Keywords $keyword)
 
     /**
      * Collect the value of the DisplayName-property
+     *
      * @return string[]
      */
-    public function getDisplayName()
+    public function getDisplayName() : array
     {
         return $this->DisplayName;
     }
@@ -145,10 +152,11 @@ public function getDisplayName()
 
     /**
      * Set the value of the DisplayName-property
+     *
      * @param array $displayName
      * @return void
      */
-    public function setDisplayName(array $displayName)
+    public function setDisplayName(array $displayName) : void
     {
         $this->DisplayName = $displayName;
     }
@@ -156,9 +164,10 @@ public function setDisplayName(array $displayName)
 
     /**
      * Collect the value of the Description-property
+     *
      * @return string[]
      */
-    public function getDescription()
+    public function getDescription() : array
     {
         return $this->Description;
     }
@@ -166,10 +175,11 @@ public function getDescription()
 
     /**
      * Set the value of the Description-property
+     *
      * @param array $description
      * @return void
      */
-    public function setDescription(array $description)
+    public function setDescription(array $description) : void
     {
         $this->Description = $description;
     }
@@ -179,7 +189,7 @@ public function setDescription(array $description)
      * Collect the value of the InformationURL-property
      * @return string[]
      */
-    public function getInformationURL()
+    public function getInformationURL() : array
     {
         return $this->InformationURL;
     }
@@ -187,10 +197,11 @@ public function getInformationURL()
 
     /**
      * Set the value of the InformationURL-property
+     *
      * @param array $informationURL
      * @return void
      */
-    public function setInformationURL(array $informationURL)
+    public function setInformationURL(array $informationURL) : void
     {
         $this->InformationURL = $informationURL;
     }
@@ -198,9 +209,10 @@ public function setInformationURL(array $informationURL)
 
     /**
      * Collect the value of the PrivacyStatementURL-property
+     *
      * @return string[]
      */
-    public function getPrivacyStatementURL()
+    public function getPrivacyStatementURL() : array
     {
         return $this->PrivacyStatementURL;
     }
@@ -208,10 +220,11 @@ public function getPrivacyStatementURL()
 
     /**
      * Set the value of the PrivacyStatementURL-property
+     *
      * @param array $privacyStatementURL
      * @return void
      */
-    public function setPrivacyStatementURL(array $privacyStatementURL)
+    public function setPrivacyStatementURL(array $privacyStatementURL) : void
     {
         $this->PrivacyStatementURL = $privacyStatementURL;
     }
@@ -219,9 +232,10 @@ public function setPrivacyStatementURL(array $privacyStatementURL)
 
     /**
      * Collect the value of the Logo-property
+     *
      * @return \SAML2\XML\mdui\Logo[]
      */
-    public function getLogo()
+    public function getLogo() : array
     {
         return $this->Logo;
     }
@@ -229,10 +243,11 @@ public function getLogo()
 
     /**
      * Set the value of the Logo-property
-     * @param \SAML2\XML\mdui\Logo $logo
+     *
+     * @param \SAML2\XML\mdui\Logo[] $logo
      * @return void
      */
-    public function setLogo(array $logo)
+    public function setLogo(array $logo) : void
     {
         $this->Logo = $logo;
     }
@@ -240,10 +255,11 @@ public function setLogo(array $logo)
 
     /**
      * Add the value to the Logo-property
+     *
      * @param \SAML2\XML\mdui\Logo $logo
      * @return void
      */
-    public function addLogo(Logo $logo)
+    public function addLogo(Logo $logo) : void
     {
         $this->Logo[] = $logo;
     }
@@ -251,9 +267,10 @@ public function addLogo(Logo $logo)
 
     /**
      * Collect the value of the children-property
+     *
      * @return \SAML2\XML\Chunk[]
      */
-    public function getChildren()
+    public function getChildren() : array
     {
         return $this->children;
     }
@@ -261,10 +278,11 @@ public function getChildren()
 
     /**
      * Set the value of the childen-property
+     *
      * @param array $children
      * @return void
      */
-    public function setChildren(array $children)
+    public function setChildren(array $children) : void
     {
         $this->children = $children;
     }
@@ -272,10 +290,11 @@ public function setChildren(array $children)
 
     /**
      * Add the value to the children-property
+     *
      * @param \SAML2\XML\Chunk $child
      * @return void
      */
-    public function addChildren(Chunk $child)
+    public function addChildren(Chunk $child) : void
     {
         $this->children[] = $child;
     }
@@ -287,50 +306,37 @@ public function addChildren(Chunk $child)
      * @param \DOMElement $parent The element we should append to.
      * @return \DOMElement|null
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : ?DOMElement
     {
-        Assert::isArray($displayName = $this->getDisplayName());
-        Assert::isArray($description = $this->getDescription());
-        Assert::isArray($informationURL = $this->getInformationURL());
-        Assert::isArray($privacyStatementURL = $this->getPrivacyStatementURL());
-        Assert::isArray($keywords = $this->getKeywords());
-        Assert::isArray($logo = $this->getLogo());
-        Assert::isArray($children = $this->getChildren());
-
         $e = null;
-        if (!empty($displayName)
-         || !empty($description)
-         || !empty($informationURL)
-         || !empty($privacyStatementURL)
-         || !empty($keywords)
-         || !empty($logo)
-         || !empty($children)) {
+        if (!empty($this->DisplayName)
+         || !empty($this->Description)
+         || !empty($this->InformationURL)
+         || !empty($this->PrivacyStatementURL)
+         || !empty($this->Keywords)
+         || !empty($this->Logo)
+         || !empty($this->children)
+        ) {
             $doc = $parent->ownerDocument;
 
             $e = $doc->createElementNS(Common::NS, 'mdui:UIInfo');
             $parent->appendChild($e);
 
-            Utils::addStrings($e, Common::NS, 'mdui:DisplayName', true, $this->getDisplayName());
-            Utils::addStrings($e, Common::NS, 'mdui:Description', true, $this->getDescription());
-            Utils::addStrings($e, Common::NS, 'mdui:InformationURL', true, $this->getInformationURL());
-            Utils::addStrings($e, Common::NS, 'mdui:PrivacyStatementURL', true, $this->getPrivacyStatementURL());
+            Utils::addStrings($e, Common::NS, 'mdui:DisplayName', true, $this->DisplayName);
+            Utils::addStrings($e, Common::NS, 'mdui:Description', true, $this->Description);
+            Utils::addStrings($e, Common::NS, 'mdui:InformationURL', true, $this->InformationURL);
+            Utils::addStrings($e, Common::NS, 'mdui:PrivacyStatementURL', true, $this->PrivacyStatementURL);
 
-            if ($this->getKeywords() !== null) {
-                foreach ($this->getKeywords() as $child) {
-                    $child->toXML($e);
-                }
+            foreach ($this->Keywords as $child) {
+                $child->toXML($e);
             }
 
-            if ($this->getLogo() !== null) {
-                foreach ($this->getLogo() as $child) {
-                    $child->toXML($e);
-                }
+            foreach ($this->Logo as $child) {
+                $child->toXML($e);
             }
 
-            if ($this->getChildren() !== null) {
-                foreach ($this->getChildren() as $child) {
-                    $child->toXML($e);
-                }
+            foreach ($this->children as $child) {
+                $child->toXML($e);
             }
         }
 
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Attribute.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Attribute.php
index b516935111..ec86fab77f 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Attribute.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Attribute.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 Attribute.
@@ -16,23 +19,23 @@ class Attribute
     /**
      * The Name of this attribute.
      *
-     * @var string
+     * @var string|null
      */
-    public $Name;
+    private $Name = null;
 
     /**
      * The NameFormat of this attribute.
      *
      * @var string|null
      */
-    public $NameFormat;
+    private $NameFormat = null;
 
     /**
      * The FriendlyName of this attribute.
      *
      * @var string|null
      */
-    public $FriendlyName = null;
+    private $FriendlyName = null;
 
     /**
      * List of attribute values.
@@ -41,7 +44,7 @@ class Attribute
      *
      * @var \SAML2\XML\saml\AttributeValue[]
      */
-    public $AttributeValue = [];
+    private $AttributeValue = [];
 
 
     /**
@@ -50,7 +53,7 @@ class Attribute
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -77,9 +80,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the Name-property
-     * @return string
+     *
+     * @return string|null
      */
-    public function getName()
+    public function getName() : ?string
     {
         return $this->Name;
     }
@@ -87,21 +91,22 @@ public function getName()
 
     /**
      * Set the value of the Name-property
+     *
      * @param string $name
      * @return void
      */
-    public function setName($name)
+    public function setName(string $name) : void
     {
-        Assert::string($name);
         $this->Name = $name;
     }
 
 
     /**
      * Collect the value of the NameFormat-property
+     *
      * @return string|null
      */
-    public function getNameFormat()
+    public function getNameFormat() : ?string
     {
         return $this->NameFormat;
     }
@@ -109,21 +114,22 @@ public function getNameFormat()
 
     /**
      * Set the value of the NameFormat-property
+     *
      * @param string|null $nameFormat
      * @return void
      */
-    public function setNameFormat($nameFormat = null)
+    public function setNameFormat(string $nameFormat = null) : void
     {
-        Assert::nullOrString($nameFormat);
         $this->NameFormat = $nameFormat;
     }
 
 
     /**
      * Collect the value of the FriendlyName-property
+     *
      * @return string|null
      */
-    public function getFriendlyName()
+    public function getFriendlyName() : ?string
     {
         return $this->FriendlyName;
     }
@@ -131,21 +137,22 @@ public function getFriendlyName()
 
     /**
      * Set the value of the FriendlyName-property
+     *
      * @param string|null $friendlyName
      * @return void
      */
-    public function setFriendlyName($friendlyName = null)
+    public function setFriendlyName(string $friendlyName = null) : void
     {
-        Assert::nullOrString($friendlyName);
         $this->FriendlyName = $friendlyName;
     }
 
 
     /**
      * Collect the value of the AttributeValue-property
+     *
      * @return \SAML2\XML\saml\AttributeValue[]
      */
-    public function getAttributeValue()
+    public function getAttributeValue() : array
     {
         return $this->AttributeValue;
     }
@@ -153,10 +160,11 @@ public function getAttributeValue()
 
     /**
      * Set the value of the AttributeValue-property
+     *
      * @param array $attributeValue
      * @return void
      */
-    public function setAttributeValue(array $attributeValue)
+    public function setAttributeValue(array $attributeValue) : void
     {
         $this->AttributeValue = $attributeValue;
     }
@@ -164,10 +172,11 @@ public function setAttributeValue(array $attributeValue)
 
     /**
      * Add the value to the AttributeValue-property
+     *
      * @param \SAML2\XML\saml\AttributeValue $attributeValue
      * @return void
      */
-    public function addAttributeValue(AttributeValue $attributeValue)
+    public function addAttributeValue(AttributeValue $attributeValue) : void
     {
         $this->AttributeValue[] = $attributeValue;
     }
@@ -177,34 +186,30 @@ public function addAttributeValue(AttributeValue $attributeValue)
      * Internal implementation of toXML.
      * This function allows RequestedAttribute to specify the element name and namespace.
      *
-     * @param \DOMElement $parent    The element we should append this Attribute to.
-     * @param string     $namespace The namespace the element should be created in.
-     * @param string     $name      The name of the element.
+     * @param \DOMElement $parent The element we should append this Attribute to.
+     * @param string $namespace The namespace the element should be created in.
+     * @param string $name The name of the element.
      * @return \DOMElement
      */
-    protected function toXMLInternal(\DOMElement $parent, $namespace, $name)
+    protected function toXMLInternal(DOMElement $parent, string $namespace, string $name) : DOMElement
     {
-        Assert::string($namespace);
-        Assert::string($name);
-        Assert::string($this->getName());
-        Assert::nullOrString($this->getNameFormat());
-        Assert::nullOrString($this->getFriendlyName());
-        Assert::isArray($this->getAttributeValue());
-
         $e = $parent->ownerDocument->createElementNS($namespace, $name);
         $parent->appendChild($e);
 
-        $e->setAttribute('Name', $this->getName());
+        if (empty($this->Name)) {
+            throw new \Exception('Cannot convert Attribute to XML with no Name set.');
+        }
+        $e->setAttribute('Name', $this->Name);
 
-        if ($this->getNameFormat() !== null) {
+        if ($this->NameFormat !== null) {
             $e->setAttribute('NameFormat', $this->NameFormat);
         }
 
         if ($this->FriendlyName !== null) {
-            $e->setAttribute('FriendlyName', $this->getFriendlyName());
+            $e->setAttribute('FriendlyName', $this->FriendlyName);
         }
 
-        foreach ($this->getAttributeValue() as $av) {
+        foreach ($this->AttributeValue as $av) {
             $av->toXML($e);
         }
 
@@ -218,7 +223,7 @@ protected function toXMLInternal(\DOMElement $parent, $namespace, $name)
      * @param \DOMElement $parent The element we should append this Attribute to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : \DOMElement
     {
         return $this->toXMLInternal($parent, Constants::NS_SAML, 'saml:Attribute');
     }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/AttributeValue.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/AttributeValue.php
index c696c243e1..3159f79c98 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/AttributeValue.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/AttributeValue.php
@@ -1,12 +1,15 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
 use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\DOMDocumentFactory;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Serializable class representing an AttributeValue.
@@ -20,14 +23,14 @@ class AttributeValue implements \Serializable
      *
      * @var \DOMElement
      */
-    public $element;
+    private $element;
 
 
     /**
      * Create an AttributeValue.
      *
      * @param mixed $value The value of this element. Can be one of:
-     *  - string                      Create an attribute value with a simple string.
+     *  - string                       Create an attribute value with a simple string.
      *  - \DOMElement(AttributeValue)  Create an attribute value of the given DOMElement.
      *  - \DOMElement                  Create an attribute value with the given DOMElement as a child.
      */
@@ -37,32 +40,33 @@ public function __construct($value)
 
         if (is_string($value)) {
             $doc = DOMDocumentFactory::create();
-            $this->setElement($doc->createElementNS(Constants::NS_SAML, 'saml:AttributeValue'));
-            $this->getElement()->setAttributeNS(Constants::NS_XSI, 'xsi:type', 'xs:string');
-            $this->getElement()->appendChild($doc->createTextNode($value));
+            $this->element = $doc->createElementNS(Constants::NS_SAML, 'saml:AttributeValue');
+            $this->element->setAttributeNS(Constants::NS_XSI, 'xsi:type', 'xs:string');
+            $this->element->appendChild($doc->createTextNode($value));
 
             /* Make sure that the xs-namespace is available in the AttributeValue (for xs:string). */
-            $this->getElement()->setAttributeNS(Constants::NS_XS, 'xs:tmp', 'tmp');
-            $this->getElement()->removeAttributeNS(Constants::NS_XS, 'tmp');
+            $this->element->setAttributeNS(Constants::NS_XS, 'xs:tmp', 'tmp');
+            $this->element->removeAttributeNS(Constants::NS_XS, 'tmp');
             return;
         }
 
         if ($value->namespaceURI === Constants::NS_SAML && $value->localName === 'AttributeValue') {
-            $this->setElement(Utils::copyElement($value));
+            $this->element = Utils::copyElement($value);
             return;
         }
 
         $doc = DOMDocumentFactory::create();
-        $this->setElement($doc->createElementNS(Constants::NS_SAML, 'saml:AttributeValue'));
+        $this->element = $doc->createElementNS(Constants::NS_SAML, 'saml:AttributeValue');
         Utils::copyElement($value, $this->element);
     }
 
 
     /**
      * Collect the value of the element-property
+     *
      * @return \DOMElement
      */
-    public function getElement()
+    public function getElement() : DOMElement
     {
         return $this->element;
     }
@@ -70,10 +74,11 @@ public function getElement()
 
     /**
      * Set the value of the element-property
+     *
      * @param \DOMElement $element
      * @return void
      */
-    public function setElement(DOMElement $element)
+    public function setElement(DOMElement $element) : void
     {
         $this->element = $element;
     }
@@ -85,21 +90,21 @@ public function setElement(DOMElement $element)
      * @param  \DOMElement $parent The element we should append this attribute value to.
      * @return \DOMElement The generated AttributeValue element.
      */
-    public function toXML(DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::isInstanceOf($this->getElement(), DOMElement::class);
         Assert::same($this->getElement()->namespaceURI, Constants::NS_SAML);
-        Assert::same($this->element->localName, "AttributeValue");
+        Assert::same($this->getElement()->localName, "AttributeValue");
 
-        return Utils::copyElement($this->getElement(), $parent);
+        return Utils::copyElement($this->element, $parent);
     }
 
 
     /**
      * Returns a plain text content of the attribute value.
+     *
      * @return string
      */
-    public function getString()
+    public function getString() : string
     {
         return $this->element->textContent;
     }
@@ -112,14 +117,12 @@ public function getString()
      *
      * @return string This attribute value.
      */
-    public function __toString()
+    public function __toString() : string
     {
-        Assert::isInstanceOf($this->getElement(), DOMElement::class);
-
-        $doc = $this->getElement()->ownerDocument;
+        $doc = $this->element->ownerDocument;
 
         $ret = '';
-        foreach ($this->getElement()->childNodes as $c) {
+        foreach ($this->element->childNodes as $c) {
             $ret .= $doc->saveXML($c);
         }
 
@@ -132,9 +135,9 @@ public function __toString()
      *
      * @return string The AttributeValue serialized.
      */
-    public function serialize()
+    public function serialize() : string
     {
-        return serialize($this->getElement()->ownerDocument->saveXML($this->getElement()));
+        return serialize($this->element->ownerDocument->saveXML($this->element));
     }
 
 
@@ -143,10 +146,12 @@ public function serialize()
      *
      * @param string $serialized The serialized AttributeValue.
      * @return void
+     *
+     * Type hint not possible due to upstream method signature
      */
-    public function unserialize($serialized)
+    public function unserialize($serialized) : void
     {
         $doc = DOMDocumentFactory::fromString(unserialize($serialized));
-        $this->setElement($doc->documentElement);
+        $this->element = $doc->documentElement;
     }
 }
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/BaseIDType.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/BaseIDType.php
index 6299ec6991..0eb118e621 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/BaseIDType.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/BaseIDType.php
@@ -1,4 +1,7 @@
 <?php
+
+declare(strict_types=1);
+
 /**
  * Base class corresponding to the BaseID element.
  *
@@ -8,9 +11,10 @@
 
 namespace SAML2\XML\saml;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\DOMDocumentFactory;
-use Webmozart\Assert\Assert;
 
 abstract class BaseIDType
 {
@@ -22,7 +26,7 @@ abstract class BaseIDType
      *
      * @var string|null
      */
-    public $NameQualifier = null;
+    protected $NameQualifier = null;
 
     /**
      * Further qualifies an identifier with the name of a service provider or affiliation of providers.
@@ -32,7 +36,7 @@ abstract class BaseIDType
      *
      * @var string|null
      */
-    public $SPNameQualifier = null;
+    protected $SPNameQualifier = null;
 
     /**
      * The name for this BaseID.
@@ -54,7 +58,7 @@ abstract class BaseIDType
      *
      * @param \DOMElement|null $xml The XML element we should load, if any.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -63,20 +67,21 @@ public function __construct(\DOMElement $xml = null)
         $this->element = $xml;
 
         if ($xml->hasAttribute('NameQualifier')) {
-            $this->setNameQualifier($xml->getAttribute('NameQualifier'));
+            $this->NameQualifier = $xml->getAttribute('NameQualifier');
         }
 
         if ($xml->hasAttribute('SPNameQualifier')) {
-            $this->setSPNameQualifier($xml->getAttribute('SPNameQualifier'));
+            $this->SPNameQualifier = $xml->getAttribute('SPNameQualifier');
         }
     }
 
 
     /**
      * Collect the value of the NameQualifier-property
+     *
      * @return string|null
      */
-    public function getNameQualifier()
+    public function getNameQualifier() : ?string
     {
         return $this->NameQualifier;
     }
@@ -84,21 +89,22 @@ public function getNameQualifier()
 
     /**
      * Set the value of the NameQualifier-property
+     *
      * @param string|null $nameQualifier
      * @return void
      */
-    public function setNameQualifier($nameQualifier = null)
+    public function setNameQualifier(string $nameQualifier = null) : void
     {
-        Assert::nullOrString($nameQualifier);
         $this->NameQualifier = $nameQualifier;
     }
 
 
     /**
      * Collect the value of the SPNameQualifier-property
+     *
      * @return string|null
      */
-    public function getSPNameQualifier()
+    public function getSPNameQualifier() : ?string
     {
         return $this->SPNameQualifier;
     }
@@ -106,12 +112,12 @@ public function getSPNameQualifier()
 
     /**
      * Set the value of the SPNameQualifier-property
+     *
      * @param string|null $spNameQualifier
      * @return void
      */
-    public function setSPNameQualifier($spNameQualifier = null)
+    public function setSPNameQualifier(string $spNameQualifier = null) : void
     {
-        Assert::nullOrString($spNameQualifier);
         $this->SPNameQualifier = $spNameQualifier;
     }
 
@@ -122,11 +128,8 @@ public function setSPNameQualifier($spNameQualifier = null)
      * @param \DOMElement $parent The element we are converting to XML.
      * @return \DOMElement The XML element after adding the data corresponding to this BaseID.
      */
-    public function toXML(\DOMElement $parent = null)
+    public function toXML(DOMElement $parent = null) : DOMElement
     {
-        Assert::nullOrString($this->getNameQualifier());
-        Assert::nullOrString($this->getSPNameQualifier());
-
         if ($parent === null) {
             $parent = DOMDocumentFactory::create();
             $doc = $parent;
@@ -136,12 +139,12 @@ public function toXML(\DOMElement $parent = null)
         $element = $doc->createElementNS(Constants::NS_SAML, $this->nodeName);
         $parent->appendChild($element);
 
-        if ($this->getNameQualifier() !== null) {
-            $element->setAttribute('NameQualifier', $this->getNameQualifier());
+        if ($this->NameQualifier !== null) {
+            $element->setAttribute('NameQualifier', $this->NameQualifier);
         }
 
-        if ($this->getSPNameQualifier() !== null) {
-            $element->setAttribute('SPNameQualifier', $this->getSPNameQualifier());
+        if ($this->SPNameQualifier !== null) {
+            $element->setAttribute('SPNameQualifier', $this->SPNameQualifier);
         }
 
         return $element;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Issuer.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Issuer.php
index 5c8d283506..f37f11611c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Issuer.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/Issuer.php
@@ -1,10 +1,13 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\DOMDocumentFactory;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing the saml:Issuer element.
@@ -14,9 +17,8 @@
  */
 class Issuer extends NameIDType
 {
+
     /**
-     * Set the name of this XML element to "saml:Issuer"
-     *
      * @var string
      */
     protected $nodeName = 'saml:Issuer';
@@ -32,7 +34,7 @@ class Issuer extends NameIDType
      *
      * @var boolean
      */
-    public $Saml2IssuerShowAll = false; //setting true break saml-core-2.0-os 8.3.6
+    private $Saml2IssuerShowAll = false; //setting true breaks saml-core-2.0-os 8.3.6
 
 
     /**
@@ -40,22 +42,23 @@ class Issuer extends NameIDType
      *
      * @param \DOMElement|null $xml The XML element we should load, if any.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         /**
          * The format of this NameIDType.
          *
          * Defaults to urn:oasis:names:tc:SAML:2.0:nameid-format:entity:
          *
-         * Indicates that the content of the element is the identifier of an entity that provides SAML-based services (such
-         * as a SAML authority, requester, or responder) or is a participant in SAML profiles (such as a service provider
-         * supporting the browser SSO profile). Such an identifier can be used in the <Issuer> element to identify the
-         * issuer of a SAML request, response, or assertion, or within the <NameID> element to make assertions about system
-         * entities that can issue SAML requests, responses, and assertions. It can also be used in other elements and
-         * attributes whose purpose is to identify a system entity in various protocol exchanges.
+         * Indicates that the content of the element is the identifier of an entity that provides SAML-based services
+         * (such as a SAML authority, requester, or responder) or is a participant in SAML profiles (such as a service
+         * provider supporting the browser SSO profile). Such an identifier can be used in the <Issuer> element to
+         * identify the issuer of a SAML request, response, or assertion, or within the <NameID> element to make
+         * assertions about system entities that can issue SAML requests, responses, and assertions. It can also be
+         * used in other elements and attributes whose purpose is to identify a system entity in various protocol
+         * exchanges.
          *
-         * The syntax of such an identifier is a URI of not more than 1024 characters in length. It is RECOMMENDED that a
-         * system entity use a URL containing its own domain name to identify itself.
+         * The syntax of such an identifier is a URI of not more than 1024 characters in length. It is RECOMMENDED that
+         * a system entity use a URL containing its own domain name to identify itself.
          *
          * @see saml-core-2.0-os
          *
@@ -69,9 +72,10 @@ public function __construct(\DOMElement $xml = null)
 
     /**
      * Collect the value of the Saml2IssuerShowAll-property
-     * @return boolean
+     *
+     * @return bool
      */
-    public function isSaml2IssuerShowAll()
+    public function isSaml2IssuerShowAll() : bool
     {
         return $this->Saml2IssuerShowAll;
     }
@@ -79,12 +83,12 @@ public function isSaml2IssuerShowAll()
 
     /**
      * Set the value of the Saml2IssuerShowAll-property
-     * @param boolean $saml2IssuerShowAll
+     *
+     * @param bool $saml2IssuerShowAll
      * @return void
      */
-    public function setSaml2IssuerShowAll($saml2IssuerShowAll)
+    public function setSaml2IssuerShowAll(bool $saml2IssuerShowAll) : void
     {
-        Assert::boolean($saml2IssuerShowAll);
         $this->Saml2IssuerShowAll = $saml2IssuerShowAll;
     }
 
@@ -93,23 +97,22 @@ public function setSaml2IssuerShowAll($saml2IssuerShowAll)
      * Convert this Issuer to XML.
      *
      * @param \DOMElement|null $parent The element we should append to.
-     *
      * @return \DOMElement The current Issuer object converted into a \DOMElement.
      */
-    public function toXML(\DOMElement $parent = null)
+    public function toXML(DOMElement $parent = null) : DOMElement
     {
-        if (($this->isSaml2IssuerShowAll() && ($this->getFormat() === Constants::NAMEID_ENTITY))
-            || ($this->getFormat() !== Constants::NAMEID_ENTITY)
+        if (($this->Saml2IssuerShowAll && ($this->Format === Constants::NAMEID_ENTITY))
+            || ($this->Format !== Constants::NAMEID_ENTITY)
         ) {
             return parent::toXML($parent);
         }
 
         /*
-         * if $this->isSaml2IssuerShowAll() is set false
+         * if $this->Saml2IssuerShowAll is set false
          * From saml-core-2.0-os 8.3.6, when the entity Format is used: "The NameQualifier, SPNameQualifier, and
          * SPProvidedID attributes MUST be omitted."
-         * if $this->isSaml2IssuerShowAll() is set true when the entity Format is used: "The NameQualifier, SPNameQualifier, and
-         * SPProvidedID attributes are not omitted."
+         * if $this->isSaml2IssuerShowAll() is set true when the entity Format is used: "The NameQualifier,
+         * SPNameQualifier, and SPProvidedID attributes are not omitted."
          */
 
         if ($parent === null) {
@@ -121,7 +124,10 @@ public function toXML(\DOMElement $parent = null)
         $element = $doc->createElementNS(Constants::NS_SAML, 'saml:Issuer');
         $parent->appendChild($element);
 
-        $value = $element->ownerDocument->createTextNode($this->getValue());
+        if (empty($this->value)) {
+            throw new \Exception("Cannot convert Issuer to XML with no value.");
+        }
+        $value = $element->ownerDocument->createTextNode($this->value);
         $element->appendChild($value);
 
         return $element;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameID.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameID.php
index c53dc9bf4a..eb26795417 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameID.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameID.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
 /**
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameIDType.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameIDType.php
index cc869f067d..25088f776c 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameIDType.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/NameIDType.php
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * SAML NameIDType abstract data type.
  *
@@ -7,9 +6,11 @@
  * @package simplesamlphp/saml2
  */
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
-use Webmozart\Assert\Assert;
+use DOMElement;
 
 abstract class NameIDType extends BaseIDType
 {
@@ -29,7 +30,7 @@ abstract class NameIDType extends BaseIDType
      *
      * @see saml-core-2.0-os
      */
-    public $Format = null;
+    protected $Format = null;
 
     /**
      * A name identifier established by a service provider or affiliation of providers for the entity, if different from
@@ -41,14 +42,14 @@ abstract class NameIDType extends BaseIDType
      *
      * @see saml-core-2.0-os
      */
-    public $SPProvidedID = null;
+    protected $SPProvidedID = null;
 
     /**
      * The NameIDType complex type is used when an element serves to represent an entity by a string-valued name.
      *
-     * @var string|null
+     * @var string
      */
-    public $value = null;
+    protected $value = '';
 
 
     /**
@@ -56,7 +57,7 @@ abstract class NameIDType extends BaseIDType
      *
      * @param \DOMElement|null $xml The XML element we should load, if any.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         parent::__construct($xml);
 
@@ -65,22 +66,23 @@ public function __construct(\DOMElement $xml = null)
         }
 
         if ($xml->hasAttribute('Format')) {
-            $this->setFormat($xml->getAttribute('Format'));
+            $this->Format = $xml->getAttribute('Format');
         }
 
         if ($xml->hasAttribute('SPProvidedID')) {
-            $this->setSPProvidedID($xml->getAttribute('SPProvidedID'));
+            $this->SPProvidedID = $xml->getAttribute('SPProvidedID');
         }
 
-        $this->setValue(trim($xml->textContent));
+        $this->value = trim($xml->textContent);
     }
 
 
     /**
      * Collect the value of the Format-property
+     *
      * @return string|null
      */
-    public function getFormat()
+    public function getFormat() : ?string
     {
         return $this->Format;
     }
@@ -88,21 +90,22 @@ public function getFormat()
 
     /**
      * Set the value of the Format-property
+     *
      * @param string|null $format
      * @return void
      */
-    public function setFormat($format = null)
+    public function setFormat(string $format = null) : void
     {
-        Assert::nullOrString($format);
         $this->Format = $format;
     }
 
 
     /**
      * Collect the value of the value-property
-     * @return string|null
+     *
+     * @return string
      */
-    public function getValue()
+    public function getValue() : string
     {
         return $this->value;
     }
@@ -110,21 +113,22 @@ public function getValue()
 
     /**
      * Set the value of the value-property
-     * @param string|null $value
+     * @param string $value
+     *
      * @return void
      */
-    public function setValue($value)
+    public function setValue(string $value) : void
     {
-        Assert::nullOrString($value);
         $this->value = $value;
     }
 
 
     /**
      * Collect the value of the SPProvidedID-property
+     *
      * @return string|null
      */
-    public function getSPProvidedID()
+    public function getSPProvidedID() : ?string
     {
         return $this->SPProvidedID;
     }
@@ -132,72 +136,35 @@ public function getSPProvidedID()
 
     /**
      * Set the value of the SPProvidedID-property
+     *
      * @param string|null $spProvidedID
      * @return void
      */
-    public function setSPProvidedID($spProvidedID)
+    public function setSPProvidedID(string $spProvidedID = null) : void
     {
-        Assert::nullOrString($spProvidedID);
         $this->SPProvidedID = $spProvidedID;
     }
 
 
-    /**
-     * Create a \SAML2\XML\saml\NameID object from an array with its contents.
-     *
-     * @param array $nameId An array whose keys correspond to the fields of a NameID.
-     * @throws \InvalidArgumentException If the array does not contain the "Value" key.
-     * @return \SAML2\XML\saml\NameID The corresponding NameID object.
-     *
-     * @deprecated
-     */
-    public static function fromArray(array $nameId)
-    {
-        $nid = new NameID();
-        if (!array_key_exists('Value', $nameId)) {
-            throw new \InvalidArgumentException('Missing "Value" in array, cannot create NameID from it.');
-        }
-        $nid->setValue($nameId['Value']);
-
-        if (array_key_exists('NameQualifier', $nameId) && $nameId['NameQualifier'] !== null) {
-            $nid->setNameQualifier($nameId['NameQualifier']);
-        }
-        if (array_key_exists('SPNameQualifier', $nameId) && $nameId['SPNameQualifier'] !== null) {
-            $nid->setSPNameQualifier($nameId['SPNameQualifier']);
-        }
-        if (array_key_exists('SPProvidedID', $nameId) && $nameId['SPProvidedID'] !== null) {
-            $nid->setSPProvidedID($nameId['SPProvidedID']);
-        }
-        if (array_key_exists('Format', $nameId) && $nameId['Format'] !== null) {
-            $nid->setFormat($nameId['Format']);
-        }
-        return $nid;
-    }
-
-
     /**
      * Convert this NameIDType to XML.
      *
      * @param \DOMElement $parent The element we are converting to XML.
      * @return \DOMElement The XML element after adding the data corresponding to this NameIDType.
      */
-    public function toXML(\DOMElement $parent = null)
+    public function toXML(DOMElement $parent = null) : DOMElement
     {
-        Assert::nullOrString($this->getFormat());
-        Assert::nullOrString($this->getSPProvidedID());
-        Assert::string($this->getValue());
-
         $element = parent::toXML($parent);
 
-        if ($this->getFormat() !== null) {
-            $element->setAttribute('Format', $this->getFormat());
+        if ($this->Format !== null) {
+            $element->setAttribute('Format', $this->Format);
         }
 
-        if ($this->getSPProvidedID() !== null) {
-            $element->setAttribute('SPProvidedID', $this->getSPProvidedID());
+        if ($this->SPProvidedID !== null) {
+            $element->setAttribute('SPProvidedID', $this->SPProvidedID);
         }
 
-        $value = $element->ownerDocument->createTextNode($this->getValue());
+        $value = $element->ownerDocument->createTextNode($this->value);
         $element->appendChild($value);
 
         return $element;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmation.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmation.php
index dced4035d7..f933ece1e7 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmation.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmation.php
@@ -1,10 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
+use DOMElement;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 SubjectConfirmation element.
@@ -16,23 +20,23 @@ class SubjectConfirmation
     /**
      * The method we can use to verify this Subject.
      *
-     * @var string
+     * @var string|null
      */
-    public $Method;
+    private $Method = null;
 
     /**
      * The NameID of the entity that can use this element to verify the Subject.
      *
      * @var \SAML2\XML\saml\NameID|null
      */
-    public $NameID;
+    private $NameID = null;
 
     /**
      * SubjectConfirmationData element with extra data for verification of the Subject.
      *
      * @var \SAML2\XML\saml\SubjectConfirmationData|null
      */
-    public $SubjectConfirmationData;
+    private $SubjectConfirmationData = null;
 
 
     /**
@@ -41,7 +45,7 @@ class SubjectConfirmation
      * @param \DOMElement|null $xml The XML element we should load.
      * @throws \Exception
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -50,29 +54,32 @@ public function __construct(\DOMElement $xml = null)
         if (!$xml->hasAttribute('Method')) {
             throw new \Exception('SubjectConfirmation element without Method attribute.');
         }
-        $this->setMethod($xml->getAttribute('Method'));
+        $this->Method = $xml->getAttribute('Method');
 
+        /** @var \DOMElement[] $nid */
         $nid = Utils::xpQuery($xml, './saml_assertion:NameID');
         if (count($nid) > 1) {
             throw new \Exception('More than one NameID in a SubjectConfirmation element.');
         } elseif (!empty($nid)) {
-            $this->setNameID(new NameID($nid[0]));
+            $this->NameID = new NameID($nid[0]);
         }
 
+        /** @var \DOMElement[] $scd */
         $scd = Utils::xpQuery($xml, './saml_assertion:SubjectConfirmationData');
         if (count($scd) > 1) {
             throw new \Exception('More than one SubjectConfirmationData child in a SubjectConfirmation element.');
         } elseif (!empty($scd)) {
-            $this->setSubjectConfirmationData(new SubjectConfirmationData($scd[0]));
+            $this->SubjectConfirmationData = new SubjectConfirmationData($scd[0]);
         }
     }
 
 
     /**
      * Collect the value of the Method-property
-     * @return string
+     *
+     * @return string|null
      */
-    public function getMethod()
+    public function getMethod() : ?string
     {
         return $this->Method;
     }
@@ -80,21 +87,22 @@ public function getMethod()
 
     /**
      * Set the value of the Method-property
+     *
      * @param string $method
      * @return void
      */
-    public function setMethod($method)
+    public function setMethod(string $method) : void
     {
-        Assert::string($method);
         $this->Method = $method;
     }
 
 
     /**
      * Collect the value of the NameID-property
-     * @return \SAML2\XML\saml\NameID
+     *
+     * @return \SAML2\XML\saml\NameID|null
      */
-    public function getNameID()
+    public function getNameID() : ?NameID
     {
         return $this->NameID;
     }
@@ -102,10 +110,11 @@ public function getNameID()
 
     /**
      * Set the value of the NameID-property
+     *
      * @param \SAML2\XML\saml\NameID $nameId
      * @return void
      */
-    public function setNameID(NameID $nameId)
+    public function setNameID(NameID $nameId = null) : void
     {
         $this->NameID = $nameId;
     }
@@ -113,9 +122,10 @@ public function setNameID(NameID $nameId)
 
     /**
      * Collect the value of the SubjectConfirmationData-property
+     *
      * @return \SAML2\XML\saml\SubjectConfirmationData|null
      */
-    public function getSubjectConfirmationData()
+    public function getSubjectConfirmationData() : ?SubjectConfirmationData
     {
         return $this->SubjectConfirmationData;
     }
@@ -123,10 +133,11 @@ public function getSubjectConfirmationData()
 
     /**
      * Set the value of the SubjectConfirmationData-property
+     *
      * @param \SAML2\XML\saml\SubjectConfirmationData|null $subjectConfirmationData
      * @return void
      */
-    public function setSubjectConfirmationData($subjectConfirmationData = null)
+    public function setSubjectConfirmationData(SubjectConfirmationData $subjectConfirmationData = null) : void
     {
         $this->SubjectConfirmationData = $subjectConfirmationData;
     }
@@ -138,22 +149,21 @@ public function setSubjectConfirmationData($subjectConfirmationData = null)
      * @param  \DOMElement $parent The parent element we should append this element to.
      * @return \DOMElement This element, as XML.
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getMethod());
-        Assert::nullOrIsInstanceOf($this->getNameID(), NameID::class);
-        Assert::nullOrIsInstanceOf($this->getSubjectConfirmationData(), SubjectConfirmationData::class);
+        Assert::notNull($this->Method, "Cannot convert SubjectConfirmation to XML without a Method set.");
 
         $e = $parent->ownerDocument->createElementNS(Constants::NS_SAML, 'saml:SubjectConfirmation');
         $parent->appendChild($e);
 
-        $e->setAttribute('Method', $this->getMethod());
+        /** @psalm-suppress PossiblyNullArgument */
+        $e->setAttribute('Method', $this->Method);
 
-        if ($this->getNameID() !== null) {
-            $this->getNameID()->toXML($e);
+        if ($this->NameID !== null) {
+            $this->NameID->toXML($e);
         }
-        if ($this->getSubjectConfirmationData() !== null) {
-            $this->getSubjectConfirmationData()->toXML($e);
+        if ($this->SubjectConfirmationData !== null) {
+            $this->SubjectConfirmationData->toXML($e);
         }
 
         return $e;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmationData.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmationData.php
index e3937d7d44..a37dc9c4cf 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmationData.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/saml/SubjectConfirmationData.php
@@ -1,13 +1,17 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\saml;
 
+use DOMElement;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
+use Webmozart\Assert\Assert;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
 use SAML2\XML\ds\KeyInfo;
-use Webmozart\Assert\Assert;
 
 /**
  * Class representing SAML 2 SubjectConfirmationData element.
@@ -21,35 +25,35 @@ class SubjectConfirmationData
      *
      * @var int|null
      */
-    public $NotBefore;
+    private $NotBefore = null;
 
     /**
      * The time after which this element is invalid, as an unix timestamp.
      *
      * @var int|null
      */
-    public $NotOnOrAfter;
+    private $NotOnOrAfter = null;
 
     /**
      * The Recipient this Subject is valid for. Either an entity or a location.
      *
      * @var string|null
      */
-    public $Recipient;
+    private $Recipient = null;
 
     /**
      * The ID of the AuthnRequest this is a response to.
      *
      * @var string|null
      */
-    public $InResponseTo;
+    private $InResponseTo = null;
 
     /**
      * The IP(v6) address of the user.
      *
      * @var string|null
      */
-    public $Address;
+    private $Address = null;
 
     /**
      * The various key information elements.
@@ -59,14 +63,15 @@ class SubjectConfirmationData
      *
      * @var (\SAML2\XML\ds\KeyInfo|\SAML2\XML\Chunk)[]
      */
-    public $info = [];
+    private $info = [];
 
 
     /**
      * Collect the value of the NotBefore-property
+     *
      * @return int|null
      */
-    public function getNotBefore()
+    public function getNotBefore() : ?int
     {
         return $this->NotBefore;
     }
@@ -74,21 +79,22 @@ public function getNotBefore()
 
     /**
      * Set the value of the NotBefore-property
+     *
      * @param int|null $notBefore
      * @return void
      */
-    public function setNotBefore($notBefore = null)
+    public function setNotBefore(int $notBefore = null) : void
     {
-        Assert::nullOrInteger($notBefore);
         $this->NotBefore = $notBefore;
     }
 
 
     /**
      * Collect the value of the NotOnOrAfter-property
+     *
      * @return int|null
      */
-    public function getNotOnOrAfter()
+    public function getNotOnOrAfter() : ?int
     {
         return $this->NotOnOrAfter;
     }
@@ -96,21 +102,22 @@ public function getNotOnOrAfter()
 
     /**
      * Set the value of the NotOnOrAfter-property
+     *
      * @param int|null $notOnOrAfter
      * @return void
      */
-    public function setNotOnOrAfter($notOnOrAfter = null)
+    public function setNotOnOrAfter(int $notOnOrAfter = null) : void
     {
-        Assert::nullOrInteger($notOnOrAfter);
         $this->NotOnOrAfter = $notOnOrAfter;
     }
 
 
     /**
      * Collect the value of the Recipient-property
+     *
      * @return string|null
      */
-    public function getRecipient()
+    public function getRecipient() : ?string
     {
         return $this->Recipient;
     }
@@ -118,21 +125,22 @@ public function getRecipient()
 
     /**
      * Set the value of the Recipient-property
+     *
      * @param string|null $recipient
      * @return void
      */
-    public function setRecipient($recipient = null)
+    public function setRecipient(string $recipient = null) : void
     {
-        Assert::nullOrString($recipient);
         $this->Recipient = $recipient;
     }
 
 
     /**
      * Collect the value of the InResponseTo-property
+     *
      * @return string|null
      */
-    public function getInResponseTo()
+    public function getInResponseTo() : ?string
     {
         return $this->InResponseTo;
     }
@@ -140,21 +148,22 @@ public function getInResponseTo()
 
     /**
      * Set the value of the InResponseTo-property
+     *
      * @param string|null $inResponseTo
      * @return void
      */
-    public function setInResponseTo($inResponseTo = null)
+    public function setInResponseTo(string $inResponseTo = null) : void
     {
-        Assert::nullOrString($inResponseTo);
         $this->InResponseTo = $inResponseTo;
     }
 
 
     /**
      * Collect the value of the Address-property
+     *
      * @return string|null
      */
-    public function getAddress()
+    public function getAddress() : ?string
     {
         return $this->Address;
     }
@@ -162,12 +171,12 @@ public function getAddress()
 
     /**
      * Set the value of the Address-property
+     *
      * @param string|null $address
      * @return void
      */
-    public function setAddress($address = null)
+    public function setAddress(string $address = null) : void
     {
-        Assert::nullOrstring($address);
         if (!is_null($address) && !filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
             Utils::getContainer()->getLogger()->warning(sprintf('Provided argument (%s) is not a valid IP address.', $address));
         }
@@ -177,9 +186,10 @@ public function setAddress($address = null)
 
     /**
      * Collect the value of the info-property
+     *
      * @return (\SAML2\XML\ds\KeyInfo|\SAML2\XML\Chunk)[]
      */
-    public function getInfo()
+    public function getInfo() : array
     {
         return $this->info;
     }
@@ -187,10 +197,11 @@ public function getInfo()
 
     /**
      * Set the value of the info-property
+     *
      * @param (\SAML2\XML\ds\KeyInfo|\SAML2\XML\Chunk)[] $info
      * @return void
      */
-    public function setInfo(array $info)
+    public function setInfo(array $info) : void
     {
         $this->info = $info;
     }
@@ -198,10 +209,11 @@ public function setInfo(array $info)
 
     /**
      * Add the value to the info-property
+     *
      * @param \SAML2\XML\Chunk|\SAML2\XML\ds\KeyInfo $info
      * @return void
      */
-    public function addInfo($info)
+    public function addInfo($info) : void
     {
         Assert::isInstanceOfAny($info, [Chunk::class, KeyInfo::class]);
         $this->info[] = $info;
@@ -213,7 +225,7 @@ public function addInfo($info)
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
@@ -234,8 +246,8 @@ public function __construct(\DOMElement $xml = null)
         if ($xml->hasAttribute('Address')) {
             $this->setAddress($xml->getAttribute('Address'));
         }
-        for ($n = $xml->firstChild; $n !== null; $n = $n->nextSibling) {
-            if (!($n instanceof \DOMElement)) {
+        foreach ($xml->childNodes as $n) {
+            if (!($n instanceof DOMElement)) {
                 continue;
             }
             if ($n->namespaceURI !== XMLSecurityDSig::XMLDSIGNS) {
@@ -260,31 +272,25 @@ public function __construct(\DOMElement $xml = null)
      * @param  \DOMElement $parent The parent element we should append this element to.
      * @return \DOMElement This element, as XML.
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::nullOrInteger($this->getNotBefore());
-        Assert::nullOrInteger($this->getNotOnOrAfter());
-        Assert::nullOrString($this->getRecipient());
-        Assert::nullOrString($this->getInResponseTo());
-        Assert::nullOrString($this->getAddress());
-
         $e = $parent->ownerDocument->createElementNS(Constants::NS_SAML, 'saml:SubjectConfirmationData');
         $parent->appendChild($e);
 
-        if ($this->getNotBefore() !== null) {
-            $e->setAttribute('NotBefore', gmdate('Y-m-d\TH:i:s\Z', $this->getNotBefore()));
+        if ($this->NotBefore !== null) {
+            $e->setAttribute('NotBefore', gmdate('Y-m-d\TH:i:s\Z', $this->NotBefore));
         }
-        if ($this->getNotOnOrAfter() !== null) {
-            $e->setAttribute('NotOnOrAfter', gmdate('Y-m-d\TH:i:s\Z', $this->getNotOnOrAfter()));
+        if ($this->NotOnOrAfter !== null) {
+            $e->setAttribute('NotOnOrAfter', gmdate('Y-m-d\TH:i:s\Z', $this->NotOnOrAfter));
         }
-        if ($this->getRecipient() !== null) {
-            $e->setAttribute('Recipient', $this->getRecipient());
+        if ($this->Recipient !== null) {
+            $e->setAttribute('Recipient', $this->Recipient);
         }
-        if ($this->getInResponseTo() !== null) {
-            $e->setAttribute('InResponseTo', $this->getInResponseTo());
+        if ($this->InResponseTo !== null) {
+            $e->setAttribute('InResponseTo', $this->InResponseTo);
         }
-        if ($this->getAddress() !== null) {
-            $e->setAttribute('Address', $this->getAddress());
+        if ($this->Address !== null) {
+            $e->setAttribute('Address', $this->Address);
         }
         /** @var \SAML2\XML\ds\KeyInfo|\SAML2\XML\Chunk $n */
         foreach ($this->getInfo() as $n) {
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/samlp/Extensions.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/samlp/Extensions.php
index 61e805fa3e..0f9904da6b 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/samlp/Extensions.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/samlp/Extensions.php
@@ -1,7 +1,11 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\samlp;
 
+use DOMElement;
+
 use SAML2\Constants;
 use SAML2\Utils;
 use SAML2\XML\Chunk;
@@ -17,11 +21,12 @@ class Extensions
      * Get a list of Extensions in the given element.
      *
      * @param  \DOMElement $parent The element that may contain the samlp:Extensions element.
-     * @return array      Array of extensions.
+     * @return array Array of extensions.
      */
-    public static function getList(\DOMElement $parent)
+    public static function getList(DOMElement $parent) : array
     {
         $ret = [];
+        /** @var \DOMElement $node */
         foreach (Utils::xpQuery($parent, './saml_protocol:Extensions/*') as $node) {
             $ret[] = new Chunk($node);
         }
@@ -33,11 +38,11 @@ public static function getList(\DOMElement $parent)
     /**
      * Add a list of Extensions to the given element.
      *
-     * @param \DOMElement        $parent     The element we should add the extensions to.
+     * @param \DOMElement $parent The element we should add the extensions to.
      * @param \SAML2\XML\Chunk[] $extensions List of extension objects.
      * @return void
      */
-    public static function addList(\DOMElement $parent, array $extensions)
+    public static function addList(DOMElement $parent, array $extensions) : void
     {
         if (empty($extensions)) {
             return;
diff --git a/vendor/simplesamlphp/saml2/src/SAML2/XML/shibmd/Scope.php b/vendor/simplesamlphp/saml2/src/SAML2/XML/shibmd/Scope.php
index dad3e310e6..b1dab87d51 100644
--- a/vendor/simplesamlphp/saml2/src/SAML2/XML/shibmd/Scope.php
+++ b/vendor/simplesamlphp/saml2/src/SAML2/XML/shibmd/Scope.php
@@ -1,10 +1,14 @@
 <?php
 
+declare(strict_types=1);
+
 namespace SAML2\XML\shibmd;
 
-use SAML2\Utils;
+use DOMElement;
 use Webmozart\Assert\Assert;
 
+use SAML2\Utils;
+
 /**
  * Class which represents the Scope element found in Shibboleth metadata.
  *
@@ -23,14 +27,14 @@ class Scope
      *
      * @var string
      */
-    public $scope;
+    private $scope = '';
 
     /**
      * Whether this is a regexp scope.
      *
      * @var bool
      */
-    public $regexp = false;
+    private $regexp = false;
 
 
     /**
@@ -38,22 +42,23 @@ class Scope
      *
      * @param \DOMElement|null $xml The XML element we should load.
      */
-    public function __construct(\DOMElement $xml = null)
+    public function __construct(DOMElement $xml = null)
     {
         if ($xml === null) {
             return;
         }
 
-        $this->setScope($xml->textContent);
-        $this->setIsRegexpScope(Utils::parseBoolean($xml, 'regexp', false));
+        $this->scope = $xml->textContent;
+        $this->regexp = Utils::parseBoolean($xml, 'regexp', false);
     }
 
 
     /**
      * Collect the value of the scope-property
+     *
      * @return string
      */
-    public function getScope()
+    public function getScope() : string
     {
         return $this->scope;
     }
@@ -61,21 +66,22 @@ public function getScope()
 
     /**
      * Set the value of the scope-property
+     *
      * @param string $scope
      * @return void
      */
-    public function setScope($scope)
+    public function setScope(string $scope) : void
     {
-        Assert::string($scope);
         $this->scope = $scope;
     }
 
 
     /**
      * Collect the value of the regexp-property
-     * @return boolean
+     *
+     * @return bool
      */
-    public function isRegexpScope()
+    public function isRegexpScope() : bool
     {
         return $this->regexp;
     }
@@ -83,12 +89,12 @@ public function isRegexpScope()
 
     /**
      * Set the value of the regexp-property
-     * @param boolean $regexp
+     *
+     * @param bool $regexp
      * @return void
      */
-    public function setIsRegexpScope($regexp)
+    public function setIsRegexpScope(bool $regexp) : void
     {
-        Assert::boolean($regexp);
         $this->regexp = $regexp;
     }
 
@@ -99,19 +105,18 @@ public function setIsRegexpScope($regexp)
      * @param \DOMElement $parent The element we should append this Scope to.
      * @return \DOMElement
      */
-    public function toXML(\DOMElement $parent)
+    public function toXML(DOMElement $parent) : DOMElement
     {
-        Assert::string($this->getScope());
-        Assert::nullOrBoolean($this->isRegexpScope());
+        Assert::notEmpty($this->scope);
 
         $doc = $parent->ownerDocument;
 
         $e = $doc->createElementNS(Scope::NS, 'shibmd:Scope');
         $parent->appendChild($e);
 
-        $e->appendChild($doc->createTextNode($this->getScope()));
+        $e->appendChild($doc->createTextNode($this->scope));
 
-        if ($this->isRegexpScope() === true) {
+        if ($this->regexp === true) {
             $e->setAttribute('regexp', 'true');
         } else {
             $e->setAttribute('regexp', 'false');
diff --git a/vendor/simplesamlphp/saml2/src/_autoload.php b/vendor/simplesamlphp/saml2/src/_autoload.php
index 1061c3b9c2..e002b67459 100644
--- a/vendor/simplesamlphp/saml2/src/_autoload.php
+++ b/vendor/simplesamlphp/saml2/src/_autoload.php
@@ -1,18 +1,21 @@
 <?php
 
+declare(strict_types=1);
+
 /**
- * Temporary autoloader to ensure compatibility with old, non-PSR-2 compliant classes.
+ * Temporary autoloader to ensure compatibility with old, non-PSR-4 compliant classes.
  *
  * @author Jaime Pérez Crespo <jaime.perez@uninett.no>
  * @package SimpleSAMLphp
  */
 
 /**
- * Autoload function that looks for classes migrated to PSR-2.
+ * Autoload function that looks for classes migrated to PSR-4.
  *
  * @param string $className Name of the class.
+ * @return void
  */
-function SAML2_autoload($className)
+function SAML2_autoload(string $className) : void
 {
     // handle classes that have been renamed
     $renamed = [
diff --git a/vendor/simplesamlphp/saml2/tests/autoload.php b/vendor/simplesamlphp/saml2/tests/autoload.php
new file mode 100644
index 0000000000..10bf4fcc9a
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/tests/autoload.php
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+use SAML2\Compat\ContainerSingleton;
+use SAML2\Compat\MockContainer;
+
+// Load Composer autoloader
+require __DIR__ . '/../vendor/autoload.php';
+
+// And set the Mock container as the Container to use.
+ContainerSingleton::setContainer(new MockContainer());
diff --git a/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/corrupted-metadata-selfsigned.xml b/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/corrupted-metadata-selfsigned.xml
new file mode 100644
index 0000000000..3c978a5408
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/corrupted-metadata-selfsigned.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://idp.example.org/saml2/idp/metadata.php" ID="_e3369c45cf941d5ace90fbf936604c2409fd8bf1ca9bec5607c30e18169fd73d"><ds:Signature>
+  <ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+    <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
+  <ds:Reference URI="#_e3369c45cf941d5ace90fbf936604c2409fd8bf1ca9bec5607c30e18169fd73d"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>dM5kF0HTkW9fnJOS77yNgTAwBj4=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>i5u6pKkDLYEX9KAV7Z0dd/jEgJ6KoOePF2NcrkIcz492OxDImS9il43Y0W3KRZPdq9fq6BQKzNifPhCN8wk8VhoceM/1Am3Nxv8d6hx+1IOeVmJT5kBMcRO8GFee6CnbwtsMH1TkU37vXt7isf237Pzi2hxDCVaKOPbNmm6lTS8=</ds:SignatureValue>
+<s:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDEjCCAnugAwIBAgIJANIdJROXilWcMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQGEwJVUzELMAkGA1UECAwCSEkxETAPBgNVBAcMCEhvbm9sdWx1MRYwFAYDVQQKDA1TaW1wbGVTQU1McGhwMRQwEgYDVQQLDAtEZXZlbG9wbWVudDEfMB0GA1UEAwwWc2VsZnNpZ25lZC5leGFtcGxlLm9yZzEiMCAGCSqGSIb3DQEJARYTbm9yZXBseUBleGFtcGxlLm9yZzAgFw0xOTA3MTgxNjMwMTZaGA8yMTE5MDYyNDE2MzAxNlowgaAxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJISTERMA8GA1UEBwwISG9ub2x1bHUxFjAUBgNVBAoMDVNpbXBsZVNBTUxwaHAxFDASBgNVBAsMC0RldmVsb3BtZW50MR8wHQYDVQQDDBZzZWxmc2lnbmVkLmV4YW1wbGUub3JnMSIwIAYJKoZIhvcNAQkBFhNub3JlcGx5QGV4YW1wbGUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwjX17mpEFt9pdka/jnseuSNosBqTRH6Pw9sQkuTH19xrRMdlGigfgdOQqvwUN1LcOF+zvFNQnZ3yTqpRxjGGcTtExKPeRI5Avef6aFO6AiDCKt831b95pnZuRsC0XweojS1xkEyiplzFZ0UjGTEG06QYvPYXJwDrTqSZuTOZGAQIDAQABo1AwTjAdBgNVHQ4EFgQUdWqf6TRDUhnJNM7vZB60oZ6bEgIwHwYDVR0jBBgwFoAUdWqf6TRDUhnJNM7vZB60oZ6bEgIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQBS+7YLLJJiDJ7OIg4PQb1bK2JpSNAimT1ZuhcgeeApM81OTh9AAS5OchRcjYmf4u1nJmfXk5RnJUHpFGGzjXoTtCrdwTUFV+u0WEkM+bB1nfuQHaHqr1UC6H956keHpedQ0N/9+0/hMoqwERQiaQLfoH9tIHv83Lq3iTc8uuJ/XA==</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>
+  <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+    <md:KeyDescriptor use="signing">
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:X509Data>
+          <ds:X509Certificate>MIIGHzCCBAegAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCTkwxFTATBgNVBAgTDFp1aWQtSG9sbGFuZDESMBAGA1UEBxMJUGlqbmFja2VyMRQwEgYDVQQKEwtNT08tQXJjaGl2ZTEgMB4GCSqGSIb3DQEJARYRdHZkaWplbkBnbWFpbC5jb20xFzAVBgNVBAMTDk1PTy1BcmNoaXZlLm5sMB4XDTE3MDYyOTEzNTcxMFoXDTI3MDYyNzEzNTcxMFowgZUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIEwxadWlkLUhvbGxhbmQxEjAQBgNVBAcTCVBpam5hY2tlcjEUMBIGA1UEChMLTU9PLUFyY2hpdmUxIDAeBgkqhkiG9w0BCQEWEXR2ZGlqZW5AZ21haWwuY29tMSMwIQYDVQQDExpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw8a1UbecDb9297f4RD3gDB1CG+Lzlz771u6wv+gGH3slSzV3VsCoARtAXjJExl8RJWRzD1J39UwLnalEyOklD/5tBT9oWMLppCFX4d1O0oszj5DUs9KIEYJ6pPB7ddqGTk/1q8nwlwKsrMIXFJ3yZOAybVPE33najzpMSKqXq23OuyXs6F/AQ1WxQdpCGeI408guhXYycsOcARtIAS4b9W4qw0FXP5sipJafB453McQMjuJ/nX19Uu4vjqAbndZxl7DDpnuPBE0BIFlGSOl2RDgJ0mWuYSZyBiaGio4SqUqMLy4evsNX3An9mplAQYgxH3QQoamismbChw3bBqqZMCAwEAAaOCAYIwggF+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKmdvXHiKRfPK7Ril7HHtWjgC4y+MIG2BgNVHSMEga4wgauAFLv3Qlv+TKAu5aYX4JPeHDPHYsasoYGPpIGMMIGJMQswCQYDVQQGEwJOTDEVMBMGA1UECBMMWnVpZC1Ib2xsYW5kMRIwEAYDVQQHEwlQaWpuYWNrZXIxFDASBgNVBAoTC01PTy1BcmNoaXZlMSAwHgYJKoZIhvcNAQkBFhF0dmRpamVuQGdtYWlsLmNvbTEXMBUGA1UEAxMOTU9PLUFyY2hpdmUubmyCAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFCAICMAsGA1UdDwQEAwIFoDAlBgNVHREEHjAcghpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDANBgkqhkiG9w0BAQsFAAOCAgEACcl027bjDDJJfB3u/amNPRGNgy/Yir+kMoRyDCDHYN9+bqwtY+5N1I/SwfeWcCJepe96CsZPrHypHzPOKNHEKyUwM8KrKF9rFI1ySRjEdeB/9FUbKCkXpTZTXT7OCqh1hxEjWGxfHQWj0uXeqS56zvDXY3uZECqexuO6xNNzS+ArRFePB/6tbm1tshdioRjHFGSNR6gG4YqSdZCJOzHSNqA2uwdnPR2kwbu2n60jL20hw9F9FDSj1GhccRuq3SurXZ+M/AJJ7fnVQdGREKgvfhisIWWvIagAns7DZ/r3VUvPmuGxee2ZSLgYVN8mfx3A/WEAAfKb/SgRUvpOa8z7sFV6sUx/9hbfustdDb3jTGRzplhpz403HXXQmf/P7MNM5zOg0TEWJsLsv7lmMbBY796x6rafJ5WFxvhyGCr2mDqRP6H2y1kmoVNEIAeSHhJGIj9Kki+fqChSQFNWmtNzz11C88TNnr6Iol5g/pHiFhGcvnpFSiCQ4gXNoHzHAfPZ9gwZyARuwRjKR3u0D2PtRUAe8YYddpL51GzHmNF9yQyaPagqLcdWbPlMb2Gjs5faWjpAhiVyCR8zlzvN9+5ZbQK8hpp4S/aV1XsXINJMHf7QA0KZfgnIg91lda4siaQbuNYWg4jCkUBe9ugqhOL8RKkJPGevlEvFMh74VHrQjjA=</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+    </md:KeyDescriptor>
+    <md:KeyDescriptor use="encryption">
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:X509Data>
+          <ds:X509Certificate>MIIGHzCCBAegAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCTkwxFTATBgNVBAgTDFp1aWQtSG9sbGFuZDESMBAGA1UEBxMJUGlqbmFja2VyMRQwEgYDVQQKEwtNT08tQXJjaGl2ZTEgMB4GCSqGSIb3DQEJARYRdHZkaWplbkBnbWFpbC5jb20xFzAVBgNVBAMTDk1PTy1BcmNoaXZlLm5sMB4XDTE3MDYyOTEzNTcxMFoXDTI3MDYyNzEzNTcxMFowgZUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIEwxadWlkLUhvbGxhbmQxEjAQBgNVBAcTCVBpam5hY2tlcjEUMBIGA1UEChMLTU9PLUFyY2hpdmUxIDAeBgkqhkiG9w0BCQEWEXR2ZGlqZW5AZ21haWwuY29tMSMwIQYDVQQDExpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw8a1UbecDb9297f4RD3gDB1CG+Lzlz771u6wv+gGH3slSzV3VsCoARtAXjJExl8RJWRzD1J39UwLnalEyOklD/5tBT9oWMLppCFX4d1O0oszj5DUs9KIEYJ6pPB7ddqGTk/1q8nwlwKsrMIXFJ3yZOAybVPE33najzpMSKqXq23OuyXs6F/AQ1WxQdpCGeI408guhXYycsOcARtIAS4b9W4qw0FXP5sipJafB453McQMjuJ/nX19Uu4vjqAbndZxl7DDpnuPBE0BIFlGSOl2RDgJ0mWuYSZyBiaGio4SqUqMLy4evsNX3An9mplAQYgxH3QQoamismbChw3bBqqZMCAwEAAaOCAYIwggF+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKmdvXHiKRfPK7Ril7HHtWjgC4y+MIG2BgNVHSMEga4wgauAFLv3Qlv+TKAu5aYX4JPeHDPHYsasoYGPpIGMMIGJMQswCQYDVQQGEwJOTDEVMBMGA1UECBMMWnVpZC1Ib2xsYW5kMRIwEAYDVQQHEwlQaWpuYWNrZXIxFDASBgNVBAoTC01PTy1BcmNoaXZlMSAwHgYJKoZIhvcNAQkBFhF0dmRpamVuQGdtYWlsLmNvbTEXMBUGA1UEAxMOTU9PLUFyY2hpdmUubmyCAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFCAICMAsGA1UdDwQEAwIFoDAlBgNVHREEHjAcghpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDANBgkqhkiG9w0BAQsFAAOCAgEACcl027bjDDJJfB3u/amNPRGNgy/Yir+kMoRyDCDHYN9+bqwtY+5N1I/SwfeWcCJepe96CsZPrHypHzPOKNHEKyUwM8KrKF9rFI1ySRjEdeB/9FUbKCkXpTZTXT7OCqh1hxEjWGxfHQWj0uXeqS56zvDXY3uZECqexuO6xNNzS+ArRFePB/6tbm1tshdioRjHFGSNR6gG4YqSdZCJOzHSNqA2uwdnPR2kwbu2n60jL20hw9F9FDSj1GhccRuq3SurXZ+M/AJJ7fnVQdGREKgvfhisIWWvIagAns7DZ/r3VUvPmuGxee2ZSLgYVN8mfx3A/WEAAfKb/SgRUvpOa8z7sFV6sUx/9hbfustdDb3jTGRzplhpz403HXXQmf/P7MNM5zOg0TEWJsLsv7lmMbBY796x6rafJ5WFxvhyGCr2mDqRP6H2y1kmoVNEIAeSHhJGIj9Kki+fqChSQFNWmtNzz11C88TNnr6Iol5g/pHiFhGcvnpFSiCQ4gXNoHzHAfPZ9gwZyARuwRjKR3u0D2PtRUAe8YYddpL51GzHmNF9yQyaPagqLcdWbPlMb2Gjs5faWjpAhiVyCR8zlzvN9+5ZbQK8hpp4S/aV1XsXINJMHf7QA0KZfgnIg91lda4siaQbuNYWg4jCkUBe9ugqhOL8RKkJPGevlEvFMh74VHrQjjA=</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+    </md:KeyDescriptor>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.org/saml2/idp/SingleLogoutService.php"/>
+    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.org/saml2/idp/SSOService.php"/>
+  </md:IDPSSODescriptor>
+</md:EntityDescriptor>
+
diff --git a/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/expired-metadata.xml b/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/expired-metadata.xml
new file mode 100644
index 0000000000..9fea64a116
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/expired-metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" validUntil="2019-07-19T16:46:00Z" entityID="https://idp.example.org/saml2/idp/metadata.php">
+  <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+    <md:KeyDescriptor use="signing">
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:X509Data>
+          <ds:X509Certificate>MIIGHzCCBAegAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCTkwxFTATBgNVBAgTDFp1aWQtSG9sbGFuZDESMBAGA1UEBxMJUGlqbmFja2VyMRQwEgYDVQQKEwtNT08tQXJjaGl2ZTEgMB4GCSqGSIb3DQEJARYRdHZkaWplbkBnbWFpbC5jb20xFzAVBgNVBAMTDk1PTy1BcmNoaXZlLm5sMB4XDTE3MDYyOTEzNTcxMFoXDTI3MDYyNzEzNTcxMFowgZUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIEwxadWlkLUhvbGxhbmQxEjAQBgNVBAcTCVBpam5hY2tlcjEUMBIGA1UEChMLTU9PLUFyY2hpdmUxIDAeBgkqhkiG9w0BCQEWEXR2ZGlqZW5AZ21haWwuY29tMSMwIQYDVQQDExpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw8a1UbecDb9297f4RD3gDB1CG+Lzlz771u6wv+gGH3slSzV3VsCoARtAXjJExl8RJWRzD1J39UwLnalEyOklD/5tBT9oWMLppCFX4d1O0oszj5DUs9KIEYJ6pPB7ddqGTk/1q8nwlwKsrMIXFJ3yZOAybVPE33najzpMSKqXq23OuyXs6F/AQ1WxQdpCGeI408guhXYycsOcARtIAS4b9W4qw0FXP5sipJafB453McQMjuJ/nX19Uu4vjqAbndZxl7DDpnuPBE0BIFlGSOl2RDgJ0mWuYSZyBiaGio4SqUqMLy4evsNX3An9mplAQYgxH3QQoamismbChw3bBqqZMCAwEAAaOCAYIwggF+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKmdvXHiKRfPK7Ril7HHtWjgC4y+MIG2BgNVHSMEga4wgauAFLv3Qlv+TKAu5aYX4JPeHDPHYsasoYGPpIGMMIGJMQswCQYDVQQGEwJOTDEVMBMGA1UECBMMWnVpZC1Ib2xsYW5kMRIwEAYDVQQHEwlQaWpuYWNrZXIxFDASBgNVBAoTC01PTy1BcmNoaXZlMSAwHgYJKoZIhvcNAQkBFhF0dmRpamVuQGdtYWlsLmNvbTEXMBUGA1UEAxMOTU9PLUFyY2hpdmUubmyCAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFCAICMAsGA1UdDwQEAwIFoDAlBgNVHREEHjAcghpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDANBgkqhkiG9w0BAQsFAAOCAgEACcl027bjDDJJfB3u/amNPRGNgy/Yir+kMoRyDCDHYN9+bqwtY+5N1I/SwfeWcCJepe96CsZPrHypHzPOKNHEKyUwM8KrKF9rFI1ySRjEdeB/9FUbKCkXpTZTXT7OCqh1hxEjWGxfHQWj0uXeqS56zvDXY3uZECqexuO6xNNzS+ArRFePB/6tbm1tshdioRjHFGSNR6gG4YqSdZCJOzHSNqA2uwdnPR2kwbu2n60jL20hw9F9FDSj1GhccRuq3SurXZ+M/AJJ7fnVQdGREKgvfhisIWWvIagAns7DZ/r3VUvPmuGxee2ZSLgYVN8mfx3A/WEAAfKb/SgRUvpOa8z7sFV6sUx/9hbfustdDb3jTGRzplhpz403HXXQmf/P7MNM5zOg0TEWJsLsv7lmMbBY796x6rafJ5WFxvhyGCr2mDqRP6H2y1kmoVNEIAeSHhJGIj9Kki+fqChSQFNWmtNzz11C88TNnr6Iol5g/pHiFhGcvnpFSiCQ4gXNoHzHAfPZ9gwZyARuwRjKR3u0D2PtRUAe8YYddpL51GzHmNF9yQyaPagqLcdWbPlMb2Gjs5faWjpAhiVyCR8zlzvN9+5ZbQK8hpp4S/aV1XsXINJMHf7QA0KZfgnIg91lda4siaQbuNYWg4jCkUBe9ugqhOL8RKkJPGevlEvFMh74VHrQjjA=</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+    </md:KeyDescriptor>
+    <md:KeyDescriptor use="encryption">
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:X509Data>
+          <ds:X509Certificate>MIIGHzCCBAegAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCTkwxFTATBgNVBAgTDFp1aWQtSG9sbGFuZDESMBAGA1UEBxMJUGlqbmFja2VyMRQwEgYDVQQKEwtNT08tQXJjaGl2ZTEgMB4GCSqGSIb3DQEJARYRdHZkaWplbkBnbWFpbC5jb20xFzAVBgNVBAMTDk1PTy1BcmNoaXZlLm5sMB4XDTE3MDYyOTEzNTcxMFoXDTI3MDYyNzEzNTcxMFowgZUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIEwxadWlkLUhvbGxhbmQxEjAQBgNVBAcTCVBpam5hY2tlcjEUMBIGA1UEChMLTU9PLUFyY2hpdmUxIDAeBgkqhkiG9w0BCQEWEXR2ZGlqZW5AZ21haWwuY29tMSMwIQYDVQQDExpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw8a1UbecDb9297f4RD3gDB1CG+Lzlz771u6wv+gGH3slSzV3VsCoARtAXjJExl8RJWRzD1J39UwLnalEyOklD/5tBT9oWMLppCFX4d1O0oszj5DUs9KIEYJ6pPB7ddqGTk/1q8nwlwKsrMIXFJ3yZOAybVPE33najzpMSKqXq23OuyXs6F/AQ1WxQdpCGeI408guhXYycsOcARtIAS4b9W4qw0FXP5sipJafB453McQMjuJ/nX19Uu4vjqAbndZxl7DDpnuPBE0BIFlGSOl2RDgJ0mWuYSZyBiaGio4SqUqMLy4evsNX3An9mplAQYgxH3QQoamismbChw3bBqqZMCAwEAAaOCAYIwggF+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKmdvXHiKRfPK7Ril7HHtWjgC4y+MIG2BgNVHSMEga4wgauAFLv3Qlv+TKAu5aYX4JPeHDPHYsasoYGPpIGMMIGJMQswCQYDVQQGEwJOTDEVMBMGA1UECBMMWnVpZC1Ib2xsYW5kMRIwEAYDVQQHEwlQaWpuYWNrZXIxFDASBgNVBAoTC01PTy1BcmNoaXZlMSAwHgYJKoZIhvcNAQkBFhF0dmRpamVuQGdtYWlsLmNvbTEXMBUGA1UEAxMOTU9PLUFyY2hpdmUubmyCAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFCAICMAsGA1UdDwQEAwIFoDAlBgNVHREEHjAcghpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDANBgkqhkiG9w0BAQsFAAOCAgEACcl027bjDDJJfB3u/amNPRGNgy/Yir+kMoRyDCDHYN9+bqwtY+5N1I/SwfeWcCJepe96CsZPrHypHzPOKNHEKyUwM8KrKF9rFI1ySRjEdeB/9FUbKCkXpTZTXT7OCqh1hxEjWGxfHQWj0uXeqS56zvDXY3uZECqexuO6xNNzS+ArRFePB/6tbm1tshdioRjHFGSNR6gG4YqSdZCJOzHSNqA2uwdnPR2kwbu2n60jL20hw9F9FDSj1GhccRuq3SurXZ+M/AJJ7fnVQdGREKgvfhisIWWvIagAns7DZ/r3VUvPmuGxee2ZSLgYVN8mfx3A/WEAAfKb/SgRUvpOa8z7sFV6sUx/9hbfustdDb3jTGRzplhpz403HXXQmf/P7MNM5zOg0TEWJsLsv7lmMbBY796x6rafJ5WFxvhyGCr2mDqRP6H2y1kmoVNEIAeSHhJGIj9Kki+fqChSQFNWmtNzz11C88TNnr6Iol5g/pHiFhGcvnpFSiCQ4gXNoHzHAfPZ9gwZyARuwRjKR3u0D2PtRUAe8YYddpL51GzHmNF9yQyaPagqLcdWbPlMb2Gjs5faWjpAhiVyCR8zlzvN9+5ZbQK8hpp4S/aV1XsXINJMHf7QA0KZfgnIg91lda4siaQbuNYWg4jCkUBe9ugqhOL8RKkJPGevlEvFMh74VHrQjjA=</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+    </md:KeyDescriptor>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.org/saml2/idp/SingleLogoutService.php"/>
+    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.org/saml2/idp/SSOService.php"/>
+  </md:IDPSSODescriptor>
+</md:EntityDescriptor>
+
diff --git a/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/valid-metadata-selfsigned.xml b/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/valid-metadata-selfsigned.xml
new file mode 100644
index 0000000000..67ed45b806
--- /dev/null
+++ b/vendor/simplesamlphp/saml2/tests/resources/xml/metadata/valid-metadata-selfsigned.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://idp.example.org/saml2/idp/metadata.php" ID="_e3369c45cf941d5ace90fbf936604c2409fd8bf1ca9bec5607c30e18169fd73d"><ds:Signature>
+  <ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+    <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
+  <ds:Reference URI="#_e3369c45cf941d5ace90fbf936604c2409fd8bf1ca9bec5607c30e18169fd73d"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>dM5kF0HTkW9fnJOS77yNgTAwBj4=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>i5u6pKkDLYEX9KAV7Z0dd/jEgJ6KoOePF2NcrkIcz492OxDImS9il43Y0W3KRZPdq9fq6BQKzNifPhCN8wk8VhoceM/1Am3Nxv8d6hx+1IOeVmJT5kBMcRO8GFee6CnbwtsMH1TkU37vXt7isf237Pzi2hxDCVaKOPbNmm6lTS8=</ds:SignatureValue>
+<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIDEjCCAnugAwIBAgIJANIdJROXilWcMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYDVQQGEwJVUzELMAkGA1UECAwCSEkxETAPBgNVBAcMCEhvbm9sdWx1MRYwFAYDVQQKDA1TaW1wbGVTQU1McGhwMRQwEgYDVQQLDAtEZXZlbG9wbWVudDEfMB0GA1UEAwwWc2VsZnNpZ25lZC5leGFtcGxlLm9yZzEiMCAGCSqGSIb3DQEJARYTbm9yZXBseUBleGFtcGxlLm9yZzAgFw0xOTA3MTgxNjMwMTZaGA8yMTE5MDYyNDE2MzAxNlowgaAxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJISTERMA8GA1UEBwwISG9ub2x1bHUxFjAUBgNVBAoMDVNpbXBsZVNBTUxwaHAxFDASBgNVBAsMC0RldmVsb3BtZW50MR8wHQYDVQQDDBZzZWxmc2lnbmVkLmV4YW1wbGUub3JnMSIwIAYJKoZIhvcNAQkBFhNub3JlcGx5QGV4YW1wbGUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwjX17mpEFt9pdka/jnseuSNosBqTRH6Pw9sQkuTH19xrRMdlGigfgdOQqvwUN1LcOF+zvFNQnZ3yTqpRxjGGcTtExKPeRI5Avef6aFO6AiDCKt831b95pnZuRsC0XweojS1xkEyiplzFZ0UjGTEG06QYvPYXJwDrTqSZuTOZGAQIDAQABo1AwTjAdBgNVHQ4EFgQUdWqf6TRDUhnJNM7vZB60oZ6bEgIwHwYDVR0jBBgwFoAUdWqf6TRDUhnJNM7vZB60oZ6bEgIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQBS+7YLLJJiDJ7OIg4PQb1bK2JpSNAimT1ZuhcgeeApM81OTh9AAS5OchRcjYmf4u1nJmfXk5RnJUHpFGGzjXoTtCrdwTUFV+u0WEkM+bB1nfuQHaHqr1UC6H956keHpedQ0N/9+0/hMoqwERQiaQLfoH9tIHv83Lq3iTc8uuJ/XA==</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>
+  <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+    <md:KeyDescriptor use="signing">
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:X509Data>
+          <ds:X509Certificate>MIIGHzCCBAegAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCTkwxFTATBgNVBAgTDFp1aWQtSG9sbGFuZDESMBAGA1UEBxMJUGlqbmFja2VyMRQwEgYDVQQKEwtNT08tQXJjaGl2ZTEgMB4GCSqGSIb3DQEJARYRdHZkaWplbkBnbWFpbC5jb20xFzAVBgNVBAMTDk1PTy1BcmNoaXZlLm5sMB4XDTE3MDYyOTEzNTcxMFoXDTI3MDYyNzEzNTcxMFowgZUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIEwxadWlkLUhvbGxhbmQxEjAQBgNVBAcTCVBpam5hY2tlcjEUMBIGA1UEChMLTU9PLUFyY2hpdmUxIDAeBgkqhkiG9w0BCQEWEXR2ZGlqZW5AZ21haWwuY29tMSMwIQYDVQQDExpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw8a1UbecDb9297f4RD3gDB1CG+Lzlz771u6wv+gGH3slSzV3VsCoARtAXjJExl8RJWRzD1J39UwLnalEyOklD/5tBT9oWMLppCFX4d1O0oszj5DUs9KIEYJ6pPB7ddqGTk/1q8nwlwKsrMIXFJ3yZOAybVPE33najzpMSKqXq23OuyXs6F/AQ1WxQdpCGeI408guhXYycsOcARtIAS4b9W4qw0FXP5sipJafB453McQMjuJ/nX19Uu4vjqAbndZxl7DDpnuPBE0BIFlGSOl2RDgJ0mWuYSZyBiaGio4SqUqMLy4evsNX3An9mplAQYgxH3QQoamismbChw3bBqqZMCAwEAAaOCAYIwggF+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKmdvXHiKRfPK7Ril7HHtWjgC4y+MIG2BgNVHSMEga4wgauAFLv3Qlv+TKAu5aYX4JPeHDPHYsasoYGPpIGMMIGJMQswCQYDVQQGEwJOTDEVMBMGA1UECBMMWnVpZC1Ib2xsYW5kMRIwEAYDVQQHEwlQaWpuYWNrZXIxFDASBgNVBAoTC01PTy1BcmNoaXZlMSAwHgYJKoZIhvcNAQkBFhF0dmRpamVuQGdtYWlsLmNvbTEXMBUGA1UEAxMOTU9PLUFyY2hpdmUubmyCAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFCAICMAsGA1UdDwQEAwIFoDAlBgNVHREEHjAcghpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDANBgkqhkiG9w0BAQsFAAOCAgEACcl027bjDDJJfB3u/amNPRGNgy/Yir+kMoRyDCDHYN9+bqwtY+5N1I/SwfeWcCJepe96CsZPrHypHzPOKNHEKyUwM8KrKF9rFI1ySRjEdeB/9FUbKCkXpTZTXT7OCqh1hxEjWGxfHQWj0uXeqS56zvDXY3uZECqexuO6xNNzS+ArRFePB/6tbm1tshdioRjHFGSNR6gG4YqSdZCJOzHSNqA2uwdnPR2kwbu2n60jL20hw9F9FDSj1GhccRuq3SurXZ+M/AJJ7fnVQdGREKgvfhisIWWvIagAns7DZ/r3VUvPmuGxee2ZSLgYVN8mfx3A/WEAAfKb/SgRUvpOa8z7sFV6sUx/9hbfustdDb3jTGRzplhpz403HXXQmf/P7MNM5zOg0TEWJsLsv7lmMbBY796x6rafJ5WFxvhyGCr2mDqRP6H2y1kmoVNEIAeSHhJGIj9Kki+fqChSQFNWmtNzz11C88TNnr6Iol5g/pHiFhGcvnpFSiCQ4gXNoHzHAfPZ9gwZyARuwRjKR3u0D2PtRUAe8YYddpL51GzHmNF9yQyaPagqLcdWbPlMb2Gjs5faWjpAhiVyCR8zlzvN9+5ZbQK8hpp4S/aV1XsXINJMHf7QA0KZfgnIg91lda4siaQbuNYWg4jCkUBe9ugqhOL8RKkJPGevlEvFMh74VHrQjjA=</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+    </md:KeyDescriptor>
+    <md:KeyDescriptor use="encryption">
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:X509Data>
+          <ds:X509Certificate>MIIGHzCCBAegAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCTkwxFTATBgNVBAgTDFp1aWQtSG9sbGFuZDESMBAGA1UEBxMJUGlqbmFja2VyMRQwEgYDVQQKEwtNT08tQXJjaGl2ZTEgMB4GCSqGSIb3DQEJARYRdHZkaWplbkBnbWFpbC5jb20xFzAVBgNVBAMTDk1PTy1BcmNoaXZlLm5sMB4XDTE3MDYyOTEzNTcxMFoXDTI3MDYyNzEzNTcxMFowgZUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIEwxadWlkLUhvbGxhbmQxEjAQBgNVBAcTCVBpam5hY2tlcjEUMBIGA1UEChMLTU9PLUFyY2hpdmUxIDAeBgkqhkiG9w0BCQEWEXR2ZGlqZW5AZ21haWwuY29tMSMwIQYDVQQDExpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKw8a1UbecDb9297f4RD3gDB1CG+Lzlz771u6wv+gGH3slSzV3VsCoARtAXjJExl8RJWRzD1J39UwLnalEyOklD/5tBT9oWMLppCFX4d1O0oszj5DUs9KIEYJ6pPB7ddqGTk/1q8nwlwKsrMIXFJ3yZOAybVPE33najzpMSKqXq23OuyXs6F/AQ1WxQdpCGeI408guhXYycsOcARtIAS4b9W4qw0FXP5sipJafB453McQMjuJ/nX19Uu4vjqAbndZxl7DDpnuPBE0BIFlGSOl2RDgJ0mWuYSZyBiaGio4SqUqMLy4evsNX3An9mplAQYgxH3QQoamismbChw3bBqqZMCAwEAAaOCAYIwggF+MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFKmdvXHiKRfPK7Ril7HHtWjgC4y+MIG2BgNVHSMEga4wgauAFLv3Qlv+TKAu5aYX4JPeHDPHYsasoYGPpIGMMIGJMQswCQYDVQQGEwJOTDEVMBMGA1UECBMMWnVpZC1Ib2xsYW5kMRIwEAYDVQQHEwlQaWpuYWNrZXIxFDASBgNVBAoTC01PTy1BcmNoaXZlMSAwHgYJKoZIhvcNAQkBFhF0dmRpamVuQGdtYWlsLmNvbTEXMBUGA1UEAxMOTU9PLUFyY2hpdmUubmyCAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFCAICMAsGA1UdDwQEAwIFoDAlBgNVHREEHjAcghpzaWduaW5nLmlkcC5tb28tYXJjaGl2ZS5ubDANBgkqhkiG9w0BAQsFAAOCAgEACcl027bjDDJJfB3u/amNPRGNgy/Yir+kMoRyDCDHYN9+bqwtY+5N1I/SwfeWcCJepe96CsZPrHypHzPOKNHEKyUwM8KrKF9rFI1ySRjEdeB/9FUbKCkXpTZTXT7OCqh1hxEjWGxfHQWj0uXeqS56zvDXY3uZECqexuO6xNNzS+ArRFePB/6tbm1tshdioRjHFGSNR6gG4YqSdZCJOzHSNqA2uwdnPR2kwbu2n60jL20hw9F9FDSj1GhccRuq3SurXZ+M/AJJ7fnVQdGREKgvfhisIWWvIagAns7DZ/r3VUvPmuGxee2ZSLgYVN8mfx3A/WEAAfKb/SgRUvpOa8z7sFV6sUx/9hbfustdDb3jTGRzplhpz403HXXQmf/P7MNM5zOg0TEWJsLsv7lmMbBY796x6rafJ5WFxvhyGCr2mDqRP6H2y1kmoVNEIAeSHhJGIj9Kki+fqChSQFNWmtNzz11C88TNnr6Iol5g/pHiFhGcvnpFSiCQ4gXNoHzHAfPZ9gwZyARuwRjKR3u0D2PtRUAe8YYddpL51GzHmNF9yQyaPagqLcdWbPlMb2Gjs5faWjpAhiVyCR8zlzvN9+5ZbQK8hpp4S/aV1XsXINJMHf7QA0KZfgnIg91lda4siaQbuNYWg4jCkUBe9ugqhOL8RKkJPGevlEvFMh74VHrQjjA=</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+    </md:KeyDescriptor>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.org/saml2/idp/SingleLogoutService.php"/>
+    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
+    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.org/saml2/idp/SSOService.php"/>
+  </md:IDPSSODescriptor>
+</md:EntityDescriptor>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/.appveyor.yml b/vendor/simplesamlphp/simplesamlphp/.appveyor.yml
new file mode 100644
index 0000000000..6bae47a324
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/.appveyor.yml
@@ -0,0 +1,30 @@
+build: false
+shallow_clone: false
+version: '1.17.1.{build}'
+platform: 'x64'
+clone_folder: C:\projects\simplesamlphp
+
+environment:
+  matrix:
+    - PHP_VERSION: "5.6"
+    - PHP_VERSION: "7.0"
+    - PHP_VERSION: "7.1"
+    - PHP_VERSION: "7.2"
+    - PHP_VERSION: "7.3"
+
+install:
+  - ps: Invoke-WebRequest "https://raw.githubusercontent.com/ChadSikorra/ps-install-php/master/Install-PHP.ps1" -OutFile "Install-PHP.ps1"
+  - ps: .\Install-PHP.ps1 -Version $Env:PHP_VERSION -Highest -Arch x64 -Extensions mbstring,intl,openssl,curl,pdo_mysql,pdo_sqlite
+  - refreshenv
+  - cd C:\projects\simplesamlphp
+  - php -r "readfile('https://getcomposer.org/installer');" | php
+
+before_test:
+  - cd C:\projects\simplesamlphp
+  # For 2.0 (or once the externalized modules are no longer included), remove the --ignore-platform-reqs
+  - php composer.phar install --no-interaction --no-progress --optimize-autoloader --prefer-source --no-ansi --ignore-platform-reqs
+
+test_script:
+  - cd C:\projects\simplesamlphp
+  - vendor\bin\phpunit.bat
+  
diff --git a/vendor/simplesamlphp/simplesamlphp/CONTRIBUTING.md b/vendor/simplesamlphp/simplesamlphp/CONTRIBUTING.md
index d16eec4696..11441b987f 100644
--- a/vendor/simplesamlphp/simplesamlphp/CONTRIBUTING.md
+++ b/vendor/simplesamlphp/simplesamlphp/CONTRIBUTING.md
@@ -8,10 +8,14 @@ These guidelines briefly explain how to contribute to SimpleSAMLphp effectively
 ## Team members
 Currently, the core team members are:
 
-* Jaime Pérez Crespo, *main developer and release manager*, UNINETT <jaime.perez@uninett.no>
-* Olav Morken, *main developer*, UNINETT <olav.morken@uninett.no>
+* Jaime Pérez Crespo, *maintainer and main developer*, UNINETT <jaime.perez@uninett.no>
+* Tim van Dijen, *main developer*
+* Thijs Kinkhorst, *main developer*
+
+Two other persons are listed here for historical reasons, even though they are no longer involved in the project:
+
 * Andreas Åkre Solberg, *architect and original developer*, UNINETT <andreas.solberg@uninett.no>
-* Hanne Moa, *developer*, UNINETT <hanne.moa@uninett.no>
+* Olav Morken, *architect and main developer*, UNINETT <olav.morken@uninett.no>
 
 We have been lucky enough to have so many people help us through the years. SimpleSAMLphp wouldn't have reached so far without them. We want to thank them from here, but unfortunately they are so many it is nearly impossible to mention all of them. [Here is a Github page that summarizes everyone's contributions](https://github.com/simplesamlphp/simplesamlphp/graphs/contributors?from=2007-09-09&to=2015-09-06&type=c).
 
@@ -31,7 +35,7 @@ New features are always welcome, provided they will be useful to someone apart f
 When submitting a pull request, please make sure to account for:
 
 ### Coding standards
-* Respect the coding standards. We try to comply with PHP's [PSR-2](http://www.php-fig.org/psr/psr-2/). Pay special attention to the rules below:
+* Respect the coding standards. We try to comply with PHP's [PSR-12](http://www.php-fig.org/psr/psr-12/). Pay special attention to the rules below:
     * Lines should not be longer than 80 characters.
     * Use **4 spaces** instead of tabs.
     * Keep the keywords in **lowercase**, including `true`, `false` and `null`.
diff --git a/vendor/simplesamlphp/simplesamlphp/README.md b/vendor/simplesamlphp/simplesamlphp/README.md
index eba29fc6bc..d4f424d2ad 100644
--- a/vendor/simplesamlphp/simplesamlphp/README.md
+++ b/vendor/simplesamlphp/simplesamlphp/README.md
@@ -1,7 +1,7 @@
 SimpleSAMLphp
 =============
 [![Build Status](https://travis-ci.org/simplesamlphp/simplesamlphp.svg?branch=master)](https://travis-ci.org/simplesamlphp/simplesamlphp)
-[![Coverage Status](https://img.shields.io/coveralls/simplesamlphp/simplesamlphp.svg)](https://coveralls.io/r/simplesamlphp/simplesamlphp)
+[![Coverage Status](https://codecov.io/gh/simplesamlphp/simplesamlphp/branch/master/graph/badge.svg)](https://codecov.io/gh/simplesamlphp/simplesamlphp)
 
 This is the official repository of the SimpleSAMLphp software.
 
diff --git a/vendor/simplesamlphp/simplesamlphp/SECURITY.md b/vendor/simplesamlphp/simplesamlphp/SECURITY.md
new file mode 100644
index 0000000000..676cf9becf
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/SECURITY.md
@@ -0,0 +1,29 @@
+# Security Policy
+
+SimpleSAMLphp is a software product critical for the security of applications and the privacy of users. As such, we take every security issue very seriously, and try to solve them as fast as possible, avoiding any potential damage to both users of this software and end users.
+
+This page contains information about security vulnerabilities, incidents or issues related to SimpleSAMLphp. Read below to learn how to properly report vulnerabilities, as well as to find information about issues already reported and fixed.
+
+## Supported Versions
+
+Only the current minor version (X.Y) receives bug and security fixes as a general rule. Release candidates are not considered stable, meaning the previous minor version will still receive fixes until the release candidate promotes to stable.
+
+## Reporting a Vulnerability
+
+In case you find a vulnerability in SimpleSAMLphp, or you want to confirm a possible security issue in the software, please get in touch with us through [UNINETT's CERT team](https://www.uninett.no/cert). Please use our PGP public key to encrypt any possible sensitive data that you may need to submit. We will get back to you as soon as possible according to our working hours in Central European Time.
+
+When reporting a security issue, please add as much information as possible to help us identify, confirm, replicate and fix the problem. In particular, remember to include the following information in your report:
+
+* The version or versions of SimpleSAMLphp affected.
+* An exact version that can be used to replicate the issue.
+* Any module or modules involved in the issue.
+* Any particular configuration details relevant to the setup affected.
+* A detailed description and a clear and concise, step-by-step guide to allow us reproduce the issue.
+* Screenshots, videos, or any other media that would help identify the issue.
+* Pointers to the exact line or lines in the code where the vulnerability is supposed to be.
+* Context on how you discovered the issue.
+* Your own name and whether you want to be credited for the discovery or not.
+
+Please **DO NOT** report security incidents related to systems that use SimpleSAMLphp, where this software is not the cause of the incident. Issues related to the use (or misuse) of infrastructure, misconfiguration of the software, malfunction of a particular system or user-related errors should not be reported either. If you are using SimpleSAMLphp to authenticate or login to services, but you don't know what SimpleSAMLphp is or you are not sure about the nature of the issue, please contact the organization running the service for you.
+
+Finally, be reasonable. We'll do our best to resolve the issue according to our principles of security and transparency. Every confirmed vulnerability will be published and resolved in a timely manner. All we ask in return is that you contact us privately first in order to avoid any potential damage to those using the software.
diff --git a/vendor/simplesamlphp/simplesamlphp/TESTING.md b/vendor/simplesamlphp/simplesamlphp/TESTING.md
index c38db47e8f..302fb309a3 100644
--- a/vendor/simplesamlphp/simplesamlphp/TESTING.md
+++ b/vendor/simplesamlphp/simplesamlphp/TESTING.md
@@ -40,15 +40,14 @@ throws an exception in a specific situation:
 ```php
   /**
     * Test SimpleSAML\Utils\HTTP::addURLParameters().
-    *
-    * @expectedException \InvalidArgumentException
     */
   public function testAddURLParametersInvalidParameters() {
+      $this->expectException(ExpectedException::class);
 ```
 
-Refer to [the `phpunit 4.8` documentation](https://phpunit.de/manual/4.8/en/installation.html)
-for more information on how to write tests. We currently use the `phpunit 4.8`
-since it is the last version to support php 5.3.
+Refer to [the `phpunit 5.7` documentation](https://phpunit.de/manual/5.7/en/installation.html)
+for more information on how to write tests. We currently use the `phpunit 5.7`
+since it is the last version to support php 5.6.
 
 Once you have implemented your tests, you can run them locally. First,
 make sure the `config` directory is **not** in the root of your
@@ -59,7 +58,7 @@ you have `phpunit` installed and run:
 phpunit -c ./phpunit.xml
 ```
 
-If your default version of `phpunit` is more recent than 4.8, you can run
+If your default version of `phpunit` is more recent than 5.7, you can run
 the old version installed by composer
 
 ```sh
diff --git a/vendor/simplesamlphp/simplesamlphp/attributemap/deprecatedSchacNS.php b/vendor/simplesamlphp/simplesamlphp/attributemap/deprecatedSchacNS.php
index 4a613348e1..d8ce0e79dc 100644
--- a/vendor/simplesamlphp/simplesamlphp/attributemap/deprecatedSchacNS.php
+++ b/vendor/simplesamlphp/simplesamlphp/attributemap/deprecatedSchacNS.php
@@ -32,4 +32,5 @@
     SCHAC_NEW_NS.'schacUserPresenceID' => SCHAC_OLD_NS.'schacUserPresenceID',
     SCHAC_NEW_NS.'schacUserPrivateAttribute' => SCHAC_OLD_NS.'schacUserPrivateAttribute',
     SCHAC_NEW_NS.'schacUserStatus' => SCHAC_OLD_NS.'schacUserStatus',
+    SCHAC_NEW_NS.'schacYearOfBirth' => SCHAC_OLD_NS.'schacYearOfBirth',
 ];
diff --git a/vendor/simplesamlphp/simplesamlphp/attributemap/newSchacNS.php b/vendor/simplesamlphp/simplesamlphp/attributemap/newSchacNS.php
index 16e67394ee..8de37c992c 100644
--- a/vendor/simplesamlphp/simplesamlphp/attributemap/newSchacNS.php
+++ b/vendor/simplesamlphp/simplesamlphp/attributemap/newSchacNS.php
@@ -32,4 +32,5 @@
     SCHAC_OLD_NS.'schacUserPresenceID' => SCHAC_NEW_NS.'schacUserPresenceID',
     SCHAC_OLD_NS.'schacUserPrivateAttribute' => SCHAC_NEW_NS.'schacUserPrivateAttribute',
     SCHAC_OLD_NS.'schacUserStatus' => SCHAC_NEW_NS.'schacUserStatus',
+    SCHAC_OLD_NS.'schacYearOfBirth' => SCHAC_NEW_NS.'schacYearOfBirth',
 ];
diff --git a/vendor/simplesamlphp/simplesamlphp/attributemap/oid2name.php b/vendor/simplesamlphp/simplesamlphp/attributemap/oid2name.php
index f36dd1cab3..6c2cda72da 100644
--- a/vendor/simplesamlphp/simplesamlphp/attributemap/oid2name.php
+++ b/vendor/simplesamlphp/simplesamlphp/attributemap/oid2name.php
@@ -83,6 +83,7 @@
     'urn:oid:1.3.6.1.4.1.5923.1.2.1.5'   => 'eduOrgSuperiorURI',
     'urn:oid:1.3.6.1.4.1.5923.1.2.1.6'   => 'eduOrgWhitePagesURI',
     'urn:oid:1.3.6.1.4.1.5923.1.5.1.1'   => 'isMemberOf',
+    'urn:oid:1.3.6.1.4.1.25178.1.0.2.3'  => 'schacYearOfBirth',
     'urn:oid:1.3.6.1.4.1.25178.1.2.1'    => 'schacMotherTongue',
     'urn:oid:1.3.6.1.4.1.25178.1.2.2'    => 'schacGender',
     'urn:oid:1.3.6.1.4.1.25178.1.2.3'    => 'schacDateOfBirth',
diff --git a/vendor/simplesamlphp/simplesamlphp/attributemap/oid2urn.php b/vendor/simplesamlphp/simplesamlphp/attributemap/oid2urn.php
index a2b0a78e32..4d25dece2d 100644
--- a/vendor/simplesamlphp/simplesamlphp/attributemap/oid2urn.php
+++ b/vendor/simplesamlphp/simplesamlphp/attributemap/oid2urn.php
@@ -80,6 +80,7 @@
     'urn:oid:1.3.6.1.4.1.5923.1.2.1.4'   => 'urn:mace:dir:attribute-def:eduOrgLegalName',
     'urn:oid:1.3.6.1.4.1.5923.1.2.1.5'   => 'urn:mace:dir:attribute-def:eduOrgSuperiorURI',
     'urn:oid:1.3.6.1.4.1.5923.1.2.1.6'   => 'urn:mace:dir:attribute-def:eduOrgWhitePagesURI',
+    'urn:oid:1.3.6.1.4.1.25178.1.0.2.3'  => 'urn:mace:terena.org:attribute-def:schacYearOfBirth',
     'urn:oid:1.3.6.1.4.1.25178.1.2.1'    => 'urn:mace:terena.org:attribute-def:schacMotherTongue',
     'urn:oid:1.3.6.1.4.1.25178.1.2.2'    => 'urn:mace:terena.org:attribute-def:schacGender',
     'urn:oid:1.3.6.1.4.1.25178.1.2.3'    => 'urn:mace:terena.org:attribute-def:schacDateOfBirth',
diff --git a/vendor/simplesamlphp/simplesamlphp/attributemap/urn2oid.php b/vendor/simplesamlphp/simplesamlphp/attributemap/urn2oid.php
index 4abf467844..e7acc59424 100644
--- a/vendor/simplesamlphp/simplesamlphp/attributemap/urn2oid.php
+++ b/vendor/simplesamlphp/simplesamlphp/attributemap/urn2oid.php
@@ -185,4 +185,5 @@
     'urn:mace:terena.org:attribute-def:schacUserPresenceID'       => 'urn:oid:1.3.6.1.4.1.25178.1.2.12',
     'urn:mace:terena.org:attribute-def:schacUserPrivateAttribute' => 'urn:oid:1.3.6.1.4.1.25178.1.2.18',
     'urn:mace:terena.org:attribute-def:schacUserStatus'           => 'urn:oid:1.3.6.1.4.1.25178.1.2.19',
+    'urn:mace:terena.org:attribute-def:schacYearOfBirth'          => 'urn:oid:1.3.6.1.4.1.25178.1.0.2.3',
 ];
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/build-release.sh b/vendor/simplesamlphp/simplesamlphp/bin/build-release.sh
index da576e5973..c2b880b4a0 100755
--- a/vendor/simplesamlphp/simplesamlphp/bin/build-release.sh
+++ b/vendor/simplesamlphp/simplesamlphp/bin/build-release.sh
@@ -41,12 +41,12 @@
 fi
 
 # Set the version in composer.json
-php "$TARGET/composer.phar" config version "$VERSION" -d "$TARGET"
+php "$TARGET/composer.phar" config version "v$VERSION" -d "$TARGET"
 
 # Install dependencies (without vcs history or dev tools)
 php "$TARGET/composer.phar" install --no-dev --prefer-dist -o -d "$TARGET"
 
-cd $TARGET 
+cd $TARGET
 npm install
 npm audit fix
 npm run build
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/bin/check-syntax.sh
deleted file mode 100755
index 0be70baff9..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/bin/check-syntax.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-
-PHP='/usr/bin/env php'
-RETURN=0
-
-# check PHP files
-for FILE in `find attributemap bin config-templates lib metadata-templates modules templates www -name "*.php"`; do
-    $PHP -l $FILE > /dev/null 2>&1
-    if [ $? -ne 0 ]; then
-        echo "Syntax check failed for ${FILE}"
-        RETURN=`expr ${RETURN} + 1`
-    fi
-done
-
-# check JSON files
-for FILE in `find dictionaries modules -name "*.json"`; do
-    $PHP -r "exit((json_decode(file_get_contents('$FILE')) === null) ? 1 : 0);"
-    if [ $? -ne 0 ]; then
-        echo "Syntax check failed for ${FILE}"
-        RETURN=`expr ${RETURN} + 1`
-    fi
-done
-
-exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/importPdoMetadata.php b/vendor/simplesamlphp/simplesamlphp/bin/importPdoMetadata.php
index abf4fdd484..3dbd6cf8ca 100755
--- a/vendor/simplesamlphp/simplesamlphp/bin/importPdoMetadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/bin/importPdoMetadata.php
@@ -2,8 +2,8 @@
 <?php
 $baseDir = dirname(dirname(__FILE__));
 
-require_once $baseDir.DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'_autoload.php';
-require_once \SimpleSAML\Utils\Config::getConfigDir().DIRECTORY_SEPARATOR.'config.php';
+require_once $baseDir . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . '_autoload.php';
+require_once \SimpleSAML\Utils\Config::getConfigDir() . DIRECTORY_SEPARATOR . 'config.php';
 
 # Iterate through configured metadata sources and ensure
 # that a PDO source exists.
@@ -13,14 +13,15 @@
         $mdshp = new \SimpleSAML\Metadata\MetaDataStorageHandlerPdo($s);
         $mdshp->initDatabase();
 
-        foreach (glob("metadata/*.php") as $filename) {
+        $metadataDir = rtrim(\SimpleSAML\Configuration::getInstance()->getString('metadatadir'), '/');
+        foreach (glob("{$metadataDir}/*.php") as $filename) {
             $metadata = [];
             require_once $filename;
             $set = basename($filename, ".php");
-            echo "importing set '$set'...".PHP_EOL;
+            echo "importing set '$set'..." . PHP_EOL;
 
             foreach ($metadata as $k => $v) {
-                echo "\t$k".PHP_EOL;
+                echo "\t$k" . PHP_EOL;
                 $mdshp->addEntry($k, $set, $v);
             }
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/initMDSPdo.php b/vendor/simplesamlphp/simplesamlphp/bin/initMDSPdo.php
index 403b4d2de0..ca60292003 100755
--- a/vendor/simplesamlphp/simplesamlphp/bin/initMDSPdo.php
+++ b/vendor/simplesamlphp/simplesamlphp/bin/initMDSPdo.php
@@ -5,10 +5,10 @@
 $baseDir = dirname(dirname(__FILE__));
 
 // Add library autoloader and configuration
-require_once $baseDir.DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'_autoload.php';
-require_once \SimpleSAML\Utils\Config::getConfigDir().DIRECTORY_SEPARATOR.'config.php';
+require_once $baseDir . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . '_autoload.php';
+require_once \SimpleSAML\Utils\Config::getConfigDir() . DIRECTORY_SEPARATOR . 'config.php';
 
-echo "Initializing Metadata Database...".PHP_EOL;
+echo "Initializing Metadata Database..." . PHP_EOL;
 
 # Iterate through configured metadata sources and ensure
 # that a PDO source exists.
@@ -19,9 +19,9 @@
         $result = $metadataStorageHandler->initDatabase();
 
         if ($result === false) {
-            echo "Failed to initialize metadata database.".PHP_EOL;
+            echo "Failed to initialize metadata database." . PHP_EOL;
         } else {
-            echo "Successfully initialized metadata database.".PHP_EOL;
+            echo "Successfully initialized metadata database." . PHP_EOL;
         }
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/memcacheSync.php b/vendor/simplesamlphp/simplesamlphp/bin/memcacheSync.php
index 0dfdc31f47..910841e1c8 100755
--- a/vendor/simplesamlphp/simplesamlphp/bin/memcacheSync.php
+++ b/vendor/simplesamlphp/simplesamlphp/bin/memcacheSync.php
@@ -1,7 +1,6 @@
 #!/usr/bin/env php
 <?php
 
-
 // Check that the memcache library is enabled
 if (!class_exists('Memcache') && !class_exists('Memcached')) {
     echo "Error: the memcached (or memcache) PHP extension appears to be unavailable.\n";
@@ -22,7 +21,7 @@
 $baseDir = dirname(dirname(__FILE__));
 
 // Add library autoloader
-require_once($baseDir.'/lib/_autoload.php');
+require_once($baseDir . '/lib/_autoload.php');
 
 // Initialize the configuration
 $configdir = SimpleSAML\Utils\Config::getConfigDir();
@@ -39,21 +38,21 @@
 foreach ($stats as $group) {
     foreach ($group as $server => $state) {
         if ($state === false) {
-            echo "WARNING: Server ".$server." is down.\n";
+            echo "WARNING: Server " . $server . " is down.\n";
             $warnServerDown++;
             continue;
         }
 
         $items = $state['curr_items'];
-        echo "Server ".$server." has ".$items." items.\n";
+        echo "Server " . $server . " has " . $items . " items.\n";
         $serverKeys = getServerKeys($server);
         $keys = array_merge($keys, $serverKeys);
     }
 }
 
-echo "Total number of keys: ".count($keys)."\n";
+echo "Total number of keys: " . count($keys) . "\n";
 $keys = array_unique($keys);
-echo "Total number of unique keys: ".count($keys)."\n";
+echo "Total number of unique keys: " . count($keys) . "\n";
 
 echo "Starting synchronization.\n" ;
 
@@ -70,19 +69,19 @@
 
 
 echo "Synchronization done.\n";
-echo $sync." keys in sync.\n";
+echo $sync . " keys in sync.\n";
 if ($skipped > 0) {
-    echo $skipped." keys skipped.\n";
+    echo $skipped . " keys skipped.\n";
     echo "Keys are skipped because they are either expired, or are of a type unknown\n";
     echo "to SimpleSAMLphp.\n";
 }
 
 if ($warnServerDown > 0) {
-    echo "WARNING: ".$warnServerDown." server(s) down. Not all servers are synchronized.\n";
+    echo "WARNING: " . $warnServerDown . " server(s) down. Not all servers are synchronized.\n";
 }
 
 if ($warnBigSlab > 0) {
-    echo "WARNING: ".$warnBigSlab." slab(s) may have contained more keys than we were told about.\n";
+    echo "WARNING: " . $warnBigSlab . " slab(s) may have contained more keys than we were told about.\n";
 }
 
 /**
@@ -98,7 +97,7 @@ function getServerKeys($server)
     $host = $server[0];
     $port = (int) $server[1];
 
-    echo "Connecting to: ".$host.":".$port."\n";
+    echo "Connecting to: " . $host . ":" . $port . "\n";
     $socket = fsockopen($host, $port);
     echo "Connected. Finding keys.\n";
 
@@ -126,7 +125,7 @@ function getServerKeys($server)
     // Dump keys in slabs
     $keys = [];
     foreach ($slabs as $slab) {
-        if (fwrite($socket, "stats cachedump ".$slab." 1000000\r\n") === false) {
+        if (fwrite($socket, "stats cachedump " . $slab . " 1000000\r\n") === false) {
             echo "Error requesting cache dump from server.\n";
             exit(1);
         }
@@ -147,17 +146,17 @@ function getServerKeys($server)
             if (preg_match('/^ITEM (.*) \[\d+ b; \d+ s\]/', $line, $matches)) {
                 $keys[] = $matches[1];
             } else {
-                echo "Unknown result from cache dump: ".$line."\n";
+                echo "Unknown result from cache dump: " . $line . "\n";
             }
         }
         if ($resultSize > 1900000 || count($keys) >= 1000000) {
-            echo "WARNING: Slab ".$slab." on server ".$host.":".$port.
+            echo "WARNING: Slab " . $slab . " on server " . $host . ":" . $port .
                 " may have contained more keys than we were told about.\n";
             $GLOBALS['warnBigSlab'] += 1;
         }
     }
 
-    echo "Found ".count($keys)." key(s).\n";
+    echo "Found " . count($keys) . " key(s).\n";
     fclose($socket);
 
     return $keys;
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/pwgen.php b/vendor/simplesamlphp/simplesamlphp/bin/pwgen.php
index b9789cb57b..7ef18b3e53 100755
--- a/vendor/simplesamlphp/simplesamlphp/bin/pwgen.php
+++ b/vendor/simplesamlphp/simplesamlphp/bin/pwgen.php
@@ -1,16 +1,16 @@
 #!/usr/bin/env php
 <?php
+
 /*
  * Interactive script to generate password hashes.
  *
  */
 
-
 // This is the base directory of the SimpleSAMLphp installation
 $baseDir = dirname(dirname(__FILE__));
 
 // Add library autoloader
-require_once($baseDir.'/lib/_autoload.php');
+require_once($baseDir . '/lib/_autoload.php');
 
 
 echo "Enter password: ";
@@ -21,4 +21,4 @@
     exit(1);
 }
 
-echo "\n  ".SimpleSAML\Utils\Crypto::pwHash($password)."\n\n";
+echo "\n  " . SimpleSAML\Utils\Crypto::pwHash($password) . "\n\n";
diff --git a/vendor/simplesamlphp/simplesamlphp/bin/translateAttributes.php b/vendor/simplesamlphp/simplesamlphp/bin/translateAttributes.php
new file mode 100755
index 0000000000..7ed0a21117
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/bin/translateAttributes.php
@@ -0,0 +1,123 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * This script loads attribute names from the attributemap/ directory, and dumps them into an attributes.po
+ * translation file for each supported language.
+ */
+
+$base = __DIR__ . '/../';
+
+include_once($base . 'vendor/autoload.php');
+
+include_once($base . 'attributemap/name2urn.php');
+$names = $attributemap;
+
+include_once($base . 'attributemap/urn2oid.php');
+$urns = $attributemap;
+
+include_once($base . 'attributemap/newSchacNS.php');
+$schac = $attributemap;
+
+/*
+ * We are still using the old JSON dictionaries as authoritative source here. It is actually convenient to keep
+ * something equivalent to this, in order to automate propagation of attribute translations to the PO files. We should
+ * probably consider moving the "dictionaries/attributes.definition.json" file somewhere else, and keep using it as
+ * the authoritative source of known attributes for this script.
+ */
+$defs = json_decode(file_get_contents($base . 'dictionaries/attributes.definition.json'), true);
+$trans = json_decode(file_get_contents($base . 'dictionaries/attributes.translation.json'), true);
+
+$attributes = [];
+
+$languages = SimpleSAML\Locale\Language::$language_names;
+$languages['nb'] = $languages['no'];
+unset($languages['no']);
+
+
+// build the list of attributes with their corresponding aliases
+foreach ($names as $name => $urn) {
+    $lower = str_replace([':', '-'], '_', strtolower($name));
+    if (!array_key_exists('attribute_'  . $lower, $defs)) {
+        $defs['attribute_' . $lower] = [];
+    }
+    if (!array_key_exists('attribute_' . $lower, $trans)) {
+        $trans['attribute_' . $lower] = [];
+    }
+    if (array_key_exists('no', $trans['attribute_' . $lower])) {
+        // fix the locale code
+        $trans['attribute_' . $lower]['nb'] = $trans['attribute_' . $lower]['no'];
+        unset($trans['attribute_' . $lower]['no']);
+    }
+    $names = [$name, $urn, $urns[$urn]];
+    if (array_key_exists($urn, $schac)) {
+        $names[] = $schac[$urn];
+    }
+    $attributes[$name] = [
+        'names' => $names,
+        'translations' => array_merge(
+            [
+                'en' => $defs['attribute_' . $lower]['en'],
+            ],
+            $trans['attribute_' . $lower]
+        ),
+    ];
+}
+
+// process other sets of attributes
+foreach (['facebook', 'linkedin', 'openid', 'twitter', 'windowslive'] as $set) {
+    include_once($base . 'attributemap/' . $set . '2name.php');
+    foreach ($attributemap as $alias => $attr) {
+        if (array_key_exists($attr, $attributes)) {
+            $attributes[$attr]['names'][] = $alias;
+        }
+    }
+}
+
+// build the dictionaries per language
+foreach (array_keys($languages) as $language) {
+    $strings = new Gettext\Translations();
+
+    // load existing translations in the PO files
+    $strings->addFromPoFile($base . 'locales/' . $language . "/LC_MESSAGES/attributes.po");
+
+    foreach ($attributes as $attribute) {
+        foreach ($attribute['names'] as $name) {
+            if (empty($name)) {
+                continue;
+            }
+            $translation = new Gettext\Translation('', $name);
+            if (
+                array_key_exists($language, $attribute['translations'])
+                && !is_null($attribute['translations'][$language])
+            ) {
+                $t = $strings->find($translation);
+                if ($t) {
+                    if ($t->getOriginal() === $t->getTranslation()) {
+                        $t->setTranslation($attribute['translations'][$language]);
+                        $translation = $t;
+                    }
+                }
+            }
+            if (!is_null($attribute['translations']['en']) && $language !== 'en') {
+                $translation->addComment('English string: ' . $attribute['translations']['en']);
+            }
+            $strings[] = $translation;
+        }
+    }
+
+    foreach ($strings as $entry) {
+        if ($entry->getTranslation() === '') {
+            // ensure that all entries contain a translation string
+            $entry->setTranslation($entry->getOriginal());
+        }
+    }
+
+    // remove headers that only cause unnecessary changes in our commits
+    $strings->deleteHeader('POT-Creation-Date');
+    $strings->deleteHeader('PO-Revision-Date');
+
+    $strings->setLanguage($language);
+    echo "Saving translations to " . $base . "locales/" . $language . "/LC_MESSAGES/attributes.po\n";
+    Gettext\Generators\Po::toFile($strings, $base . 'locales/' . $language . '/LC_MESSAGES/attributes.po');
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/composer.json b/vendor/simplesamlphp/simplesamlphp/composer.json
index 945bf8e9cc..7041c4259b 100644
--- a/vendor/simplesamlphp/simplesamlphp/composer.json
+++ b/vendor/simplesamlphp/simplesamlphp/composer.json
@@ -5,6 +5,7 @@
     "keywords": [ "saml2", "shibboleth","oauth","ws-federation","sp","idp" ],
     "homepage": "http://simplesamlphp.org",
     "license": "LGPL-2.1-or-later",
+    "version": "v1.18.8",
     "authors": [
         {
             "name": "Andreas Åkre Solberg",
@@ -25,8 +26,14 @@
         },
         "files": ["lib/_autoload_modules.php"]
     },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\": ["tests", "tests/lib/SimpleSAML"]
+        },
+        "files": ["tests/_autoload_modules.php"]
+    },
     "require": {
-        "php": ">=5.5",
+        "php": ">=5.6",
         "ext-SPL": "*",
         "ext-zlib": "*",
         "ext-pcre": "*",
@@ -36,23 +43,55 @@
         "ext-hash": "*",
         "ext-json": "*",
         "ext-mbstring": "*",
-        "simplesamlphp/saml2": "^3.3",
-        "robrichards/xmlseclibs": "^3.0.4",
-        "whitehat101/apr1-md5": "~1.0",
-        "twig/twig": "~1.0 || ~2.0",
         "gettext/gettext": "^4.6",
-        "jaimeperez/twig-configurable-i18n": "^2.0",
+        "phpmailer/phpmailer": "^6.0",
+        "robrichards/xmlseclibs": "^3.0.4",
+        "simplesamlphp/saml2": "^3.4 || ^4.0",
+        "simplesamlphp/simplesamlphp-module-adfs": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authorize": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authtwitter": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authwindowslive": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authx509": "^0.9",
+        "simplesamlphp/simplesamlphp-module-authyubikey": "^0.9",
+        "simplesamlphp/simplesamlphp-module-cas": "^0.9",
+        "simplesamlphp/simplesamlphp-module-cdc": "^0.9",
+        "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+        "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9",
+        "simplesamlphp/simplesamlphp-module-discopower": "^0.9",
+        "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0",
+        "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9",
+        "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+        "simplesamlphp/simplesamlphp-module-memcookie": "^1.2",
+        "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9",
+        "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9",
+        "simplesamlphp/simplesamlphp-module-negotiate": "^0.9",
+        "simplesamlphp/simplesamlphp-module-oauth": "^0.9",
+        "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9",
+        "simplesamlphp/simplesamlphp-module-radius": "^0.9",
+        "simplesamlphp/simplesamlphp-module-riak": "^0.9",
+        "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9",
+        "simplesamlphp/simplesamlphp-module-sanitycheck": "^0.9",
+        "simplesamlphp/simplesamlphp-module-statistics": "^0.9",
+        "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9",
+        "simplesamlphp/twig-configurable-i18n": "^2.2",
         "symfony/routing": "^3.4 || ^4.0",
         "symfony/http-foundation": "^3.4 || ^4.0",
         "symfony/config": "^3.4 || ^4.0",
         "symfony/http-kernel": "^3.4 || ^4.0",
         "symfony/dependency-injection": "^3.4 || ^4.0",
-        "symfony/yaml": "^3.4 || ^4.0"
+        "symfony/yaml": "^3.4 || ^4.0",
+        "twig/twig": "~1.0 || ~2.0"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.8",
+        "ext-curl": "*",
         "mikey179/vfsstream": "~1.6",
-        "ext-curl": "*"
+        "phpunit/phpunit": "~5.7",
+        "sensiolabs/security-checker": "^5.0.3",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+        "squizlabs/php_codesniffer": "^3.5",
+        "vimeo/psalm": "~1.1.9"
     },
     "suggest": {
         "predis/predis": "Needed if a Redis server is used to store session information",
diff --git a/vendor/simplesamlphp/simplesamlphp/composer.lock b/vendor/simplesamlphp/simplesamlphp/composer.lock
index b828386ff6..5d46b544b1 100644
--- a/vendor/simplesamlphp/simplesamlphp/composer.lock
+++ b/vendor/simplesamlphp/simplesamlphp/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "0603e3b6481824853d37eeb5801017d3",
+    "content-hash": "bf371c4b318dde371166f24e06842287",
     "packages": [
         {
             "name": "gettext/gettext",
-            "version": "v4.8.0",
+            "version": "v4.8.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-gettext/Gettext.git",
-                "reference": "207719c6eae36f5ac7c2c9542f6a4d4b76307e5a"
+                "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/207719c6eae36f5ac7c2c9542f6a4d4b76307e5a",
-                "reference": "207719c6eae36f5ac7c2c9542f6a4d4b76307e5a",
+                "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/e474f872f2c8636cf53fd283ec4ce1218f3d236a",
+                "reference": "e474f872f2c8636cf53fd283ec4ce1218f3d236a",
                 "shasum": ""
             },
             "require": {
@@ -66,31 +66,31 @@
                 "po",
                 "translation"
             ],
-            "time": "2019-11-04T18:03:29+00:00"
+            "time": "2019-12-02T10:21:14+00:00"
         },
         {
             "name": "gettext/languages",
-            "version": "2.5.0",
+            "version": "2.6.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git",
-                "reference": "78db2d17933f0765a102f368a6663f057162ddbd"
+                "url": "https://github.com/php-gettext/Languages.git",
+                "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/78db2d17933f0765a102f368a6663f057162ddbd",
-                "reference": "78db2d17933f0765a102f368a6663f057162ddbd",
+                "url": "https://api.github.com/repos/php-gettext/Languages/zipball/38ea0482f649e0802e475f0ed19fa993bcb7a618",
+                "reference": "38ea0482f649e0802e475f0ed19fa993bcb7a618",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4"
+                "friendsofphp/php-cs-fixer": "^2.16.0",
+                "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4"
             },
             "bin": [
-                "bin/export-plural-rules",
-                "bin/export-plural-rules.php"
+                "bin/export-plural-rules"
             ],
             "type": "library",
             "autoload": {
@@ -110,7 +110,7 @@
                 }
             ],
             "description": "gettext languages with plural rules",
-            "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules",
+            "homepage": "https://github.com/php-gettext/Languages",
             "keywords": [
                 "cldr",
                 "i18n",
@@ -127,105 +127,196 @@
                 "translations",
                 "unicode"
             ],
-            "time": "2018-11-13T22:06:07+00:00"
+            "time": "2019-11-13T10:30:21+00:00"
         },
         {
-            "name": "jaimeperez/twig-configurable-i18n",
-            "version": "v2.1",
+            "name": "paragonie/random_compat",
+            "version": "v2.0.18",
             "source": {
                 "type": "git",
-                "url": "https://github.com/jaimeperez/twig-configurable-i18n.git",
-                "reference": "38a22aaa6b31efdc0d76d58f5934dea3ebac8556"
+                "url": "https://github.com/paragonie/random_compat.git",
+                "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/jaimeperez/twig-configurable-i18n/zipball/38a22aaa6b31efdc0d76d58f5934dea3ebac8556",
-                "reference": "38a22aaa6b31efdc0d76d58f5934dea3ebac8556",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
+                "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
                 "shasum": ""
             },
             "require": {
-                "twig/extensions": "^1.5"
+                "php": ">=5.2.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.8.36",
-                "twig/twig": "^1.37 || ^2.7"
+                "phpunit/phpunit": "4.*|5.*"
             },
-            "type": "project",
+            "suggest": {
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "lib/random.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+            "keywords": [
+                "csprng",
+                "polyfill",
+                "pseudorandom",
+                "random"
+            ],
+            "time": "2019-01-03T20:59:08+00:00"
+        },
+        {
+            "name": "phpfastcache/riak-client",
+            "version": "3.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPSocialNetwork/riak-php-client.git",
+                "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPSocialNetwork/riak-php-client/zipball/d771f75d16196006604a30bb15adc1c6a9b0fcc9",
+                "reference": "d771f75d16196006604a30bb15adc1c6a9b0fcc9",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "ext-json": "*",
+                "php": ">=5.4"
+            },
+            "conflict": {
+                "basho/riak": "*"
+            },
+            "require-dev": {
+                "apigen/apigen": "4.1.*",
+                "phpunit/phpunit": "4.8.*"
+            },
+            "type": "library",
             "autoload": {
                 "psr-4": {
-                    "JaimePerez\\TwigConfigurableI18n\\": "src/"
+                    "Basho\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-2.1"
+                "Apache-2.0"
             ],
             "authors": [
                 {
-                    "name": "Jaime Perez",
-                    "email": "jaime.perez@uninett.no"
+                    "name": "Georges.L",
+                    "email": "contact@geolim4.com",
+                    "homepage": "https://github.com/Geolim4",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Christopher Mancini",
+                    "email": "cmancini@basho.com",
+                    "homepage": "https://github.com/christophermancini",
+                    "role": "Former Lead Developer"
+                },
+                {
+                    "name": "Alex Moore",
+                    "email": "amoore@basho.com",
+                    "homepage": "https://github.com/alexmoore",
+                    "role": "Former Developer"
                 }
             ],
-            "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
+            "description": "Riak client for PHP (Fork of the official basho/riak due to maintainer significant inactivity)",
+            "homepage": "https://github.com/PHPSocialNetwork/riak-php-client",
             "keywords": [
-                "extension",
-                "gettext",
-                "i18n",
-                "internationalization",
-                "translation",
-                "twig"
+                "basho",
+                "client",
+                "crdt",
+                "data",
+                "database",
+                "datatype",
+                "driver",
+                "kv",
+                "nosql",
+                "riak"
             ],
-            "abandoned": "simplesamlphp/twig-configurable-i18n",
-            "time": "2019-06-07T11:03:28+00:00"
+            "time": "2017-11-23T21:33:15+00:00"
         },
         {
-            "name": "paragonie/random_compat",
-            "version": "v2.0.18",
+            "name": "phpmailer/phpmailer",
+            "version": "v6.1.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/paragonie/random_compat.git",
-                "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
+                "url": "https://github.com/PHPMailer/PHPMailer.git",
+                "reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
-                "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
+                "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
+                "reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.2.0"
+                "ext-ctype": "*",
+                "ext-filter": "*",
+                "php": ">=5.5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "4.*|5.*"
+                "doctrine/annotations": "^1.2",
+                "friendsofphp/php-cs-fixer": "^2.2",
+                "phpunit/phpunit": "^4.8 || ^5.7"
             },
             "suggest": {
-                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+                "ext-mbstring": "Needed to send email in multibyte encoding charset",
+                "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+                "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+                "psr/log": "For optional PSR-3 debug logging",
+                "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
+                "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
             },
             "type": "library",
             "autoload": {
-                "files": [
-                    "lib/random.php"
-                ]
+                "psr-4": {
+                    "PHPMailer\\PHPMailer\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-2.1-only"
             ],
             "authors": [
                 {
-                    "name": "Paragon Initiative Enterprises",
-                    "email": "security@paragonie.com",
-                    "homepage": "https://paragonie.com"
+                    "name": "Marcus Bointon",
+                    "email": "phpmailer@synchromedia.co.uk"
+                },
+                {
+                    "name": "Jim Jagielski",
+                    "email": "jimjag@gmail.com"
+                },
+                {
+                    "name": "Andy Prevost",
+                    "email": "codeworxtech@users.sourceforge.net"
+                },
+                {
+                    "name": "Brent R. Matzelle"
                 }
             ],
-            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
-            "keywords": [
-                "csprng",
-                "polyfill",
-                "pseudorandom",
-                "random"
+            "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+            "funding": [
+                {
+                    "url": "https://github.com/synchro",
+                    "type": "github"
+                }
             ],
-            "time": "2019-01-03T20:59:08+00:00"
+            "time": "2020-07-14T18:50:27+00:00"
         },
         {
             "name": "psr/container",
@@ -278,16 +369,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.2",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
-                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -321,20 +412,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2019-11-01T11:05:21+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "robrichards/xmlseclibs",
-            "version": "3.0.4",
+            "version": "3.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/robrichards/xmlseclibs.git",
-                "reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5"
+                "reference": "8d8e56ca7914440a8c60caff1a865e7dff1d9a5a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/0a53d3c3aa87564910cae4ed01416441d3ae0db5",
-                "reference": "0a53d3c3aa87564910cae4ed01416441d3ae0db5",
+                "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/8d8e56ca7914440a8c60caff1a865e7dff1d9a5a",
+                "reference": "8d8e56ca7914440a8c60caff1a865e7dff1d9a5a",
                 "shasum": ""
             },
             "require": {
@@ -359,20 +450,54 @@
                 "xml",
                 "xmldsig"
             ],
-            "time": "2019-11-05T11:44:22+00:00"
+            "time": "2020-04-22T17:19:51+00:00"
+        },
+        {
+            "name": "simplesamlphp/composer-module-installer",
+            "version": "v1.1.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/composer-module-installer.git",
+                "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/45161b5406f3e9c82459d0f9a5a1dba064953cfa",
+                "reference": "45161b5406f3e9c82459d0f9a5a1dba064953cfa",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.1|^2.0",
+                "simplesamlphp/simplesamlphp": "*"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "SimpleSamlPhp\\Composer\\ModuleInstallerPlugin"
+            },
+            "autoload": {
+                "psr-0": {
+                    "SimpleSamlPhp\\Composer": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-only"
+            ],
+            "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.",
+            "time": "2020-08-25T19:04:33+00:00"
         },
         {
             "name": "simplesamlphp/saml2",
-            "version": "v3.4.2",
+            "version": "v3.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/simplesamlphp/saml2.git",
-                "reference": "3806d276edb066c60aa3d748ffd0681d92ffbda7"
+                "reference": "acc47782592866423942dc30002c5220203ab466"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/3806d276edb066c60aa3d748ffd0681d92ffbda7",
-                "reference": "3806d276edb066c60aa3d748ffd0681d92ffbda7",
+                "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/acc47782592866423942dc30002c5220203ab466",
+                "reference": "acc47782592866423942dc30002c5220203ab466",
                 "shasum": ""
             },
             "require": {
@@ -418,857 +543,3956 @@
                 }
             ],
             "description": "SAML2 PHP library from SimpleSAMLphp",
-            "time": "2019-11-06T10:00:32+00:00"
+            "time": "2020-05-14T16:38:12+00:00"
         },
         {
-            "name": "symfony/config",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-adfs",
+            "version": "v0.9.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/config.git",
-                "reference": "c111091db748ed394fd8c3e473a90ad3b80e08ad"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git",
+                "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/c111091db748ed394fd8c3e473a90ad3b80e08ad",
-                "reference": "c111091db748ed394fd8c3e473a90ad3b80e08ad",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/425e5ebbdd097c92fe5265a6b48d32a3095c7237",
+                "reference": "425e5ebbdd097c92fe5265a6b48d32a3095c7237",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/filesystem": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.3",
-                "symfony/finder": "<3.3"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/event-dispatcher": "~3.3|~4.0",
-                "symfony/finder": "~3.3|~4.0",
-                "symfony/yaml": "~3.0|~4.0"
-            },
-            "suggest": {
-                "symfony/yaml": "To use the yaml reference dumper"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "<1.7"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Config\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\adfs\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-2.1-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Symfony Config Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-30T12:46:47+00:00"
+            "description": "A module that implements the WS-federation IDP",
+            "keywords": [
+                "adfs",
+                "simplesamlphp"
+            ],
+            "time": "2020-03-31T14:29:24+00:00"
         },
         {
-            "name": "symfony/debug",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-authcrypt",
+            "version": "v0.9.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authcrypt.git",
+                "reference": "2ad0f234b92ab0abe94e97fa3e1e04f9c743eb9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/f72e33fdb1170b326e72c3157f0cd456351dd086",
-                "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authcrypt/zipball/2ad0f234b92ab0abe94e97fa3e1e04f9c743eb9d",
+                "reference": "2ad0f234b92ab0abe94e97fa3e1e04f9c743eb9d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
-            },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4 <1.7",
+                "whitehat101/apr1-md5": "~1.0"
             },
             "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authcrypt\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-2.1-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
                 }
             ],
-            "description": "Symfony Debug Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-24T15:33:53+00:00"
+            "description": "This module provides authentication against password hashes or .htpasswd files",
+            "keywords": [
+                "authcrypt",
+                "simplesamlphp"
+            ],
+            "time": "2020-08-12T21:30:50+00:00"
         },
         {
-            "name": "symfony/dependency-injection",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-authfacebook",
+            "version": "v0.9.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "413a2c0cae6a1a5d8720bdfeebc0dbbfac24155d"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook.git",
+                "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/413a2c0cae6a1a5d8720bdfeebc0dbbfac24155d",
-                "reference": "413a2c0cae6a1a5d8720bdfeebc0dbbfac24155d",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authfacebook/zipball/9152731e939ad4a49e0f06da5f0009ebde0d2b5c",
+                "reference": "9152731e939ad4a49e0f06da5f0009ebde0d2b5c",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/container": "^1.0"
-            },
-            "conflict": {
-                "symfony/config": "<3.3.7",
-                "symfony/finder": "<3.3",
-                "symfony/proxy-manager-bridge": "<3.4",
-                "symfony/yaml": "<3.4"
-            },
-            "provide": {
-                "psr/container-implementation": "1.0"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "symfony/config": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/config": "",
-                "symfony/expression-language": "For using expressions in service container configuration",
-                "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
-                "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\DependencyInjection\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authfacebook\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Andjelko Horvat",
+                    "email": "comel@vingd.com"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Symfony DependencyInjection Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-24T15:33:53+00:00"
+            "description": "A module that is able to authenticate against Facebook",
+            "keywords": [
+                "facebook",
+                "simplesamlphp"
+            ],
+            "time": "2020-03-13T11:29:21+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-authorize",
+            "version": "v0.9.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authorize.git",
+                "reference": "c2607a5252ee1256b50ce7795e35513b116998d4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177",
-                "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authorize/zipball/c2607a5252ee1256b50ce7795e35513b116998d4",
+                "reference": "c2607a5252ee1256b50ce7795e35513b116998d4",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.3"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/stopwatch": "~2.8|~3.0|~4.0"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authorize\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Ernesto Revilla",
+                    "email": "erny@yaco.es"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-24T15:33:53+00:00"
+            "description": "This module provides a user authorization filter based on attribute matching",
+            "keywords": [
+                "authorize",
+                "simplesamlphp"
+            ],
+            "time": "2020-02-25T15:16:57+00:00"
         },
         {
-            "name": "symfony/filesystem",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-authtwitter",
+            "version": "v0.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "00e3a6ddd723b8bcfe4f2a1b6f82b98eeeb51516"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authtwitter.git",
+                "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/00e3a6ddd723b8bcfe4f2a1b6f82b98eeeb51516",
-                "reference": "00e3a6ddd723b8bcfe4f2a1b6f82b98eeeb51516",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authtwitter/zipball/29a15e58061222632fea9eb2c807aef5e2c0d54a",
+                "reference": "29a15e58061222632fea9eb2c807aef5e2c0d54a",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": ">=5.5",
+                "simplesamlphp/composer-module-installer": "~1.0",
+                "simplesamlphp/simplesamlphp-module-oauth": "^0.9"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.35",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authtwitter\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-08-20T13:31:17+00:00"
+            "description": "A module that is able to perform authentication against Twitter",
+            "keywords": [
+                "simplesamlphp",
+                "twitter"
+            ],
+            "time": "2019-12-03T09:00:09+00:00"
         },
         {
-            "name": "symfony/http-foundation",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-authwindowslive",
+            "version": "v0.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "7b4626ab40d8562707e6d1c9a6fab977a86c2037"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authwindowslive.git",
+                "reference": "f40aecec6c0adaedb6693309840c98cec783876e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7b4626ab40d8562707e6d1c9a6fab977a86c2037",
-                "reference": "7b4626ab40d8562707e6d1c9a6fab977a86c2037",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authwindowslive/zipball/f40aecec6c0adaedb6693309840c98cec783876e",
+                "reference": "f40aecec6c0adaedb6693309840c98cec783876e",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-mbstring": "~1.1",
-                "symfony/polyfill-php70": "~1.6"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "symfony/expression-language": "~2.8|~3.0|~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\HttpFoundation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authwindowslive\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Symfony HttpFoundation Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-24T15:33:53+00:00"
+            "description": "A module that is able to perform authentication against Windows Live",
+            "keywords": [
+                "live",
+                "simplesamlphp",
+                "windows",
+                "windowslive"
+            ],
+            "time": "2019-12-03T09:01:13+00:00"
         },
         {
-            "name": "symfony/http-kernel",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-authx509",
+            "version": "v0.9.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "a2e189ee513dc02df98bf8ac8e1a765afd91e41f"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authX509.git",
+                "reference": "d4bae5d1c02f291d420607c14a157cef3bc36f5c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a2e189ee513dc02df98bf8ac8e1a765afd91e41f",
-                "reference": "a2e189ee513dc02df98bf8ac8e1a765afd91e41f",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authX509/zipball/d4bae5d1c02f291d420607c14a157cef3bc36f5c",
+                "reference": "d4bae5d1c02f291d420607c14a157cef3bc36f5c",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0",
-                "symfony/debug": "^3.3.3|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/config": "<2.8",
-                "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4",
-                "symfony/var-dumper": "<3.3",
-                "twig/twig": "<1.34|<2.4,>=2"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0"
+                "php": ">=5.5",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9"
             },
             "require-dev": {
-                "psr/cache": "~1.0",
-                "symfony/browser-kit": "~2.8|~3.0|~4.0",
-                "symfony/class-loader": "~2.8|~3.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/console": "~2.8|~3.0|~4.0",
-                "symfony/css-selector": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "^3.4.10|^4.0.10",
-                "symfony/dom-crawler": "~2.8|~3.0|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/finder": "~2.8|~3.0|~4.0",
-                "symfony/process": "~2.8|~3.0|~4.0",
-                "symfony/routing": "~3.4|~4.0",
-                "symfony/stopwatch": "~2.8|~3.0|~4.0",
-                "symfony/templating": "~2.8|~3.0|~4.0",
-                "symfony/translation": "~2.8|~3.0|~4.0",
-                "symfony/var-dumper": "~3.3|~4.0"
-            },
-            "suggest": {
-                "symfony/browser-kit": "",
-                "symfony/config": "",
-                "symfony/console": "",
-                "symfony/dependency-injection": "",
-                "symfony/finder": "",
-                "symfony/var-dumper": ""
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.15"
             },
-            "type": "library",
+            "type": "simplesamlphp-module",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
+                "ssp-mixedcase-module-name": "authX509"
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\HttpKernel\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "SimpleSAML\\Module\\authX509\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-2.1-or-later"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Joost van Dijk",
+                    "email": "Joost.vanDijk@surfnet.nl"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Symfony HttpKernel Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-11-01T09:46:31+00:00"
+            "description": "A module that is able to authenticate users based on X509 client certificates",
+            "keywords": [
+                "simplesamlphp",
+                "x509"
+            ],
+            "time": "2020-07-31T14:36:54+00:00"
         },
         {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.12.0",
+            "name": "simplesamlphp/simplesamlphp-module-authyubikey",
+            "version": "v0.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "550ebaac289296ce228a706d0867afc34687e3f4"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-authyubikey.git",
+                "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
-                "reference": "550ebaac289296ce228a706d0867afc34687e3f4",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-authyubikey/zipball/8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2",
+                "reference": "8c27bfeb4981d2e6fa40a831e945f40c5a4ad3d2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4"
             },
-            "suggest": {
-                "ext-ctype": "For best performance"
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
-            "type": "library",
+            "type": "simplesamlphp-module",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "1.12-dev"
-                }
+                "ssp-mixedcase-module-name": "authYubikey"
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "SimpleSAML\\modules\\yubikey\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
+            "description": "A module that is able to authenticate against YubiKey",
             "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
+                "authyubikey",
+                "simplesamlphp"
             ],
-            "time": "2019-08-06T08:03:45+00:00"
+            "time": "2019-12-03T08:52:49+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.12.0",
+            "name": "simplesamlphp/simplesamlphp-module-cas",
+            "version": "v0.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-cas.git",
+                "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
-                "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cas/zipball/63b72e4600550c507cdfc32fdd208ad59a64321e",
+                "reference": "63b72e4600550c507cdfc32fdd208ad59a64321e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+                "webmozart/assert": "~1.4"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.12-dev"
-                }
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
+                    "SimpleSAML\\Module\\cas\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
                 }
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
+            "description": "A module that provides CAS authentication",
             "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
+                "cas",
+                "simplesamlphp"
             ],
-            "time": "2019-08-06T08:03:45+00:00"
+            "time": "2019-12-03T09:03:06+00:00"
         },
         {
-            "name": "symfony/polyfill-php70",
-            "version": "v1.12.0",
+            "name": "simplesamlphp/simplesamlphp-module-cdc",
+            "version": "v0.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-php70.git",
-                "reference": "54b4c428a0054e254223797d2713c31e08610831"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-cdc.git",
+                "reference": "16a5bfac7299e04e5feb472af328e07598708166"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831",
-                "reference": "54b4c428a0054e254223797d2713c31e08610831",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-cdc/zipball/16a5bfac7299e04e5feb472af328e07598708166",
+                "reference": "16a5bfac7299e04e5feb472af328e07598708166",
                 "shasum": ""
             },
             "require": {
-                "paragonie/random_compat": "~1.0|~2.0|~9.99",
-                "php": ">=5.3.3"
+                "simplesamlphp/composer-module-installer": ">=1.1.6"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.12-dev"
-                }
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
             },
+            "type": "simplesamlphp-module",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php70\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ],
-                "classmap": [
-                    "Resources/stubs"
-                ]
+                    "SimpleSAML\\Module\\cdc\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Jaime Perez Crespo",
+                    "email": "jaime.perez@uninett.no"
                 }
             ],
-            "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
+            "description": "A SimpleSAMLphp module that allows integration with CDC",
+            "homepage": "https://simplesamlphp.org/",
             "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
+                "cdc",
+                "simplesamlphp"
             ],
-            "time": "2019-08-06T08:03:45+00:00"
+            "time": "2019-12-03T09:04:11+00:00"
         },
         {
-            "name": "symfony/routing",
-            "version": "v3.4.33",
+            "name": "simplesamlphp/simplesamlphp-module-consent",
+            "version": "v0.9.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/routing.git",
-                "reference": "ebc745e728f7a9fb571e7c116a14245c00b8f366"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-consent.git",
+                "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/ebc745e728f7a9fb571e7c116a14245c00b8f366",
-                "reference": "ebc745e728f7a9fb571e7c116a14245c00b8f366",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consent/zipball/2f84d15e96afb5a32b6d1cff93370f501ca7867d",
+                "reference": "2f84d15e96afb5a32b6d1cff93370f501ca7867d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "conflict": {
-                "symfony/config": "<3.3.1",
-                "symfony/dependency-injection": "<3.3",
-                "symfony/yaml": "<3.4"
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
             },
             "require-dev": {
-                "doctrine/annotations": "~1.0",
-                "psr/log": "~1.0",
-                "symfony/config": "^3.3.1|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/http-foundation": "~2.8|~3.0|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
-            },
-            "suggest": {
-                "doctrine/annotations": "For using the annotation loader",
-                "symfony/config": "For using the all-in-one router or any loader",
-                "symfony/expression-language": "For using expression matching",
-                "symfony/http-foundation": "For using a Symfony Request object",
-                "symfony/yaml": "For using the YAML loader"
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "<1.7"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\consent\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "lavmrk@gmail.com"
+                }
+            ],
+            "description": "A module that will ask for user consent before releasing attributes",
+            "keywords": [
+                "consent",
+                "simplesamlphp"
+            ],
+            "time": "2020-06-15T14:26:23+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-consentadmin",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin.git",
+                "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-consentadmin/zipball/466e8d0d751f0080162d78e63ab2e125b24d17a1",
+                "reference": "466e8d0d751f0080162d78e63ab2e125b24d17a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "extra": {
+                "ssp-mixedcase-module-name": "consentAdmin"
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Jacob Christiansen",
+                    "email": "jach@wayf.dk"
+                },
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                }
+            ],
+            "description": "A module that allows users to manage their consent",
+            "keywords": [
+                "consentadmin",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T09:06:40+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-discopower",
+            "version": "v0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git",
+                "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/c892926e8186d0a2c638f7032dfc30540c1f92fb",
+                "reference": "c892926e8186d0a2c638f7032dfc30540c1f92fb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4 <1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\modules\\discopower\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed",
+            "keywords": [
+                "discopower",
+                "discovery",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-13T07:51:43+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-exampleattributeserver.git",
+                "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-exampleattributeserver/zipball/63e0323e81c32bc3c9eaa01ea45194bb10153708",
+                "reference": "63e0323e81c32bc3c9eaa01ea45194bb10153708",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\exampleattributeserver\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "An example for SAML attributes queries",
+            "keywords": [
+                "exampleattributeserver",
+                "simplesamlphp"
+            ],
+            "time": "2019-05-28T12:37:15+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-expirycheck",
+            "version": "v0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck.git",
+                "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-expirycheck/zipball/59c59cdf87e2679257b46c07bb4c27666a11cc20",
+                "reference": "59c59cdf87e2679257b46c07bb4c27666a11cc20",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\expirycheck\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Alex Mihičinac",
+                    "email": "alexm@arnes.si"
+                }
+            ],
+            "description": "The expirycheck module validates user's expiry date",
+            "keywords": [
+                "expirycheck",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-14T13:20:46+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-ldap",
+            "version": "v0.9.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-ldap.git",
+                "reference": "27f0ef60482ff6a063dac5b7d59e8d3d407b52ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-ldap/zipball/27f0ef60482ff6a063dac5b7d59e8d3d407b52ac",
+                "reference": "27f0ef60482ff6a063dac5b7d59e8d3d407b52ac",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "suggest": {
+                "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\ldap\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that provides authentication against LDAP stores",
+            "keywords": [
+                "ldap",
+                "simplesamlphp"
+            ],
+            "time": "2020-07-14T16:33:01+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-memcachemonitor",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcachemonitor.git",
+                "reference": "0e08e87707cd7b1fb91bbcf65cc454d8849571b0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcachemonitor/zipball/0e08e87707cd7b1fb91bbcf65cc454d8849571b0",
+                "reference": "0e08e87707cd7b1fb91bbcf65cc454d8849571b0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "~0.0.6"
+            },
+            "type": "simplesamlphp-module",
+            "extra": {
+                "ssp-mixedcase-module-name": "memcacheMonitor"
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                },
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able display usage statistics of a memcache(d) store",
+            "keywords": [
+                "memcachemonitor",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T09:19:35+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-memcookie",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie.git",
+                "reference": "39535304e8d464b7baa1e82cb441fa432947ff57"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-memcookie/zipball/39535304e8d464b7baa1e82cb441fa432947ff57",
+                "reference": "39535304e8d464b7baa1e82cb441fa432947ff57",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": ">=1.1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.6"
+            },
+            "type": "simplesamlphp-module",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                },
+                {
+                    "name": "Jaime Perez Crespo",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.",
+            "homepage": "https://simplesamlphp.org/",
+            "keywords": [
+                "Auth MemCookie",
+                "apache",
+                "cookies",
+                "simplesamlphp"
+            ],
+            "time": "2019-08-08T18:33:47+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-metarefresh",
+            "version": "v0.9.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git",
+                "reference": "e284306a7097297765b5b78a4e28f19f18d4e001"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/e284306a7097297765b5b78a4e28f19f18d4e001",
+                "reference": "e284306a7097297765b5b78a4e28f19f18d4e001",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.18"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\metarefresh\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "The metarefresh module will download and parse metadata documents and store them locally",
+            "keywords": [
+                "metarefresh",
+                "simplesamlphp"
+            ],
+            "time": "2020-07-31T14:43:37+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-negotiate",
+            "version": "v0.9.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-negotiate.git",
+                "reference": "68c9a1a2b81c68978ba6cfe19f0a7527300768ba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-negotiate/zipball/68c9a1a2b81c68978ba6cfe19f0a7527300768ba",
+                "reference": "68c9a1a2b81c68978ba6cfe19f0a7527300768ba",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "sensiolabs/security-checker": "^5.0.3",
+                "simplesamlphp/simplesamlphp": "dev-testing-1.18",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "suggest": {
+                "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\negotiate\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism",
+            "keywords": [
+                "negotiate",
+                "simplesamlphp"
+            ],
+            "time": "2020-08-03T13:02:36+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-oauth",
+            "version": "v0.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-oauth.git",
+                "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-oauth/zipball/d14d7aca6e699ec12b3f4dd0128373faa1a2cc61",
+                "reference": "d14d7aca6e699ec12b3f4dd0128373faa1a2cc61",
+                "shasum": ""
+            },
+            "require": {
+                "simplesamlphp/composer-module-installer": ">=1.1.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.36",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olav.morken@uninett.no"
+                },
+                {
+                    "name": "Jaime Perez Crespo",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "A SimpleSAMLphp module that allows integration with OAuth1,",
+            "homepage": "https://simplesamlphp.org/",
+            "keywords": [
+                "oauth1",
+                "simplesamlphp"
+            ],
+            "time": "2020-04-29T19:37:43+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-preprodwarning",
+            "version": "v0.9.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning.git",
+                "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-preprodwarning/zipball/8e032de33a75eb44857dc06d886ad94ee3af4638",
+                "reference": "8e032de33a75eb44857dc06d886ad94ee3af4638",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "^1.4"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\preprodwarning\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "Display a warning when using a pre-production environment",
+            "keywords": [
+                "preprodwarning",
+                "simplesamlphp"
+            ],
+            "time": "2020-04-09T13:05:27+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-radius",
+            "version": "v0.9.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-radius.git",
+                "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-radius/zipball/36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d",
+                "reference": "36bd0f39f9a13f7eb96ead97c97c3634aa1c3f2d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.7"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\radius\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "A module that is able perform authentication against a RADIUS server",
+            "keywords": [
+                "radius",
+                "simplesamlphp"
+            ],
+            "time": "2019-10-03T18:13:07+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-riak",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-riak.git",
+                "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-riak/zipball/c1a9d9545cb4e05b9205b34624850bb777aca991",
+                "reference": "c1a9d9545cb4e05b9205b34624850bb777aca991",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "phpfastcache/riak-client": "^3.4",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\riak\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
+                }
+            ],
+            "description": "A module that is able to store key/value pairs in a Riak store",
+            "keywords": [
+                "riak",
+                "simplesamlphp"
+            ],
+            "time": "2019-12-03T08:28:45+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-sanitycheck",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-sanitycheck.git",
+                "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sanitycheck/zipball/15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a",
+                "reference": "15d6664eae73a233c3c4c72fd8a5c2be72b6ed2a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "~1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\sanitycheck\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "Perform sanity checks on configuration",
+            "keywords": [
+                "sanitycheck",
+                "simplesamlphp"
+            ],
+            "time": "2020-05-07T11:34:29+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-smartattributes",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-smartattributes.git",
+                "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-smartattributes/zipball/b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6",
+                "reference": "b45d3ecd916e359a9cae05f9ae9df09b5c42f4e6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\smartattributes\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.",
+            "keywords": [
+                "simplesamlphp",
+                "smartattributes"
+            ],
+            "time": "2019-12-03T09:24:09+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-sqlauth",
+            "version": "v0.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-sqlauth.git",
+                "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-sqlauth/zipball/31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b",
+                "reference": "31bce8763ad97f4b4473e4ad4a5a96ddc136ef6b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "webmozart/assert": "^1.4"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\sqlauth\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Olav Morken",
+                    "email": "olavmrk@gmail.com"
+                }
+            ],
+            "description": "This is a authentication module for authenticating a user against a SQL database",
+            "keywords": [
+                "simplesamlphp",
+                "sqlauth"
+            ],
+            "time": "2019-12-03T09:07:09+00:00"
+        },
+        {
+            "name": "simplesamlphp/simplesamlphp-module-statistics",
+            "version": "v0.9.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/simplesamlphp-module-statistics.git",
+                "reference": "1bb1e46921d8dc84707bc9cd3c307c8abd723ac7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-statistics/zipball/1bb1e46921d8dc84707bc9cd3c307c8abd723ac7",
+                "reference": "1bb1e46921d8dc84707bc9cd3c307c8abd723ac7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "simplesamlphp/composer-module-installer": "~1.1",
+                "webmozart/assert": "^1.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "simplesamlphp/simplesamlphp": "^1.17",
+                "simplesamlphp/simplesamlphp-test-framework": "^0.0.12"
+            },
+            "type": "simplesamlphp-module",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\Module\\statistics\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Åkre Solberg",
+                    "email": "andreas.solberg@uninett.no"
+                }
+            ],
+            "description": "The SimpleSAMLphp statistics module",
+            "keywords": [
+                "simplesamlphp",
+                "statistics"
+            ],
+            "time": "2019-12-03T08:42:27+00:00"
+        },
+        {
+            "name": "simplesamlphp/twig-configurable-i18n",
+            "version": "v2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/simplesamlphp/twig-configurable-i18n.git",
+                "reference": "b036c134157ce40ed66da2fc9d01f63e3b1d3abd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/simplesamlphp/twig-configurable-i18n/zipball/b036c134157ce40ed66da2fc9d01f63e3b1d3abd",
+                "reference": "b036c134157ce40ed66da2fc9d01f63e3b1d3abd",
+                "shasum": ""
+            },
+            "require": {
+                "twig/extensions": "^1.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8.36 || ~7.5",
+                "twig/twig": "^1.37 || ^2.7"
+            },
+            "type": "project",
+            "autoload": {
+                "psr-4": {
+                    "SimpleSAML\\TwigConfigurableI18n\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1"
+            ],
+            "authors": [
+                {
+                    "name": "Jaime Perez",
+                    "email": "jaime.perez@uninett.no"
+                }
+            ],
+            "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
+            "keywords": [
+                "extension",
+                "gettext",
+                "i18n",
+                "internationalization",
+                "translation",
+                "twig"
+            ],
+            "time": "2019-07-09T08:35:44+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "9e2aa97f0d51f114983666f5aa362426d53e004a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/9e2aa97f0d51f114983666f5aa362426d53e004a",
+                "reference": "9e2aa97f0d51f114983666f5aa362426d53e004a",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3",
+                "symfony/finder": "<3.3"
+            },
+            "require-dev": {
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/event-dispatcher": "~3.3|~4.0",
+                "symfony/finder": "~3.3|~4.0",
+                "symfony/yaml": "~3.0|~4.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-23T09:37:51+00:00"
+        },
+        {
+            "name": "symfony/debug",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/debug.git",
+                "reference": "7ce874f4432d8b11cc45a80cc5130a6e2609728d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/7ce874f4432d8b11cc45a80cc5130a6e2609728d",
+                "reference": "7ce874f4432d8b11cc45a80cc5130a6e2609728d",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "psr/log": "~1.0"
+            },
+            "conflict": {
+                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+            },
+            "require-dev": {
+                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Debug\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Debug Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-16T09:41:49+00:00"
+        },
+        {
+            "name": "symfony/dependency-injection",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/dependency-injection.git",
+                "reference": "3a14abc01c36e81fc1c4c48b42c103b9dd892ed3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3a14abc01c36e81fc1c4c48b42c103b9dd892ed3",
+                "reference": "3a14abc01c36e81fc1c4c48b42c103b9dd892ed3",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "psr/container": "^1.0"
+            },
+            "conflict": {
+                "symfony/config": "<3.3.7",
+                "symfony/finder": "<3.3",
+                "symfony/proxy-manager-bridge": "<3.4",
+                "symfony/yaml": "<3.4"
+            },
+            "provide": {
+                "psr/container-implementation": "1.0"
+            },
+            "require-dev": {
+                "symfony/config": "~3.3|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/yaml": "~3.4|~4.0"
+            },
+            "suggest": {
+                "symfony/config": "",
+                "symfony/expression-language": "For using expressions in service container configuration",
+                "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
+                "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
+                "symfony/yaml": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\DependencyInjection\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony DependencyInjection Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-23T09:37:51+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081",
+                "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/stopwatch": "~2.8|~3.0|~4.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-05T15:06:23+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10",
+                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-30T17:48:24+00:00"
+        },
+        {
+            "name": "symfony/http-foundation",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/http-foundation.git",
+                "reference": "5219dba1253aa07ed3ad82f73c08146fb3f517d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5219dba1253aa07ed3ad82f73c08146fb3f517d0",
+                "reference": "5219dba1253aa07ed3ad82f73c08146fb3f517d0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-mbstring": "~1.1",
+                "symfony/polyfill-php70": "~1.6"
+            },
+            "require-dev": {
+                "symfony/expression-language": "~2.8|~3.0|~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\HttpFoundation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony HttpFoundation Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-23T09:37:51+00:00"
+        },
+        {
+            "name": "symfony/http-kernel",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/http-kernel.git",
+                "reference": "4a1c6b310806adce0f299411951d06747edf9e28"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4a1c6b310806adce0f299411951d06747edf9e28",
+                "reference": "4a1c6b310806adce0f299411951d06747edf9e28",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "psr/log": "~1.0",
+                "symfony/debug": "^3.3.3|~4.0",
+                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+                "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-php56": "~1.8"
+            },
+            "conflict": {
+                "symfony/config": "<2.8",
+                "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4",
+                "symfony/var-dumper": "<3.3",
+                "twig/twig": "<1.34|<2.4,>=2"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/cache": "~1.0",
+                "symfony/browser-kit": "~2.8|~3.0|~4.0",
+                "symfony/class-loader": "~2.8|~3.0",
+                "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/console": "~2.8|~3.0|~4.0",
+                "symfony/css-selector": "~2.8|~3.0|~4.0",
+                "symfony/dependency-injection": "^3.4.10|^4.0.10",
+                "symfony/dom-crawler": "~2.8|~3.0|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/finder": "~2.8|~3.0|~4.0",
+                "symfony/process": "~2.8|~3.0|~4.0",
+                "symfony/routing": "~3.4|~4.0",
+                "symfony/stopwatch": "~2.8|~3.0|~4.0",
+                "symfony/templating": "~2.8|~3.0|~4.0",
+                "symfony/translation": "~2.8|~3.0|~4.0",
+                "symfony/var-dumper": "~3.3|~4.0"
+            },
+            "suggest": {
+                "symfony/browser-kit": "",
+                "symfony/config": "",
+                "symfony/console": "",
+                "symfony/dependency-injection": "",
+                "symfony/finder": "",
+                "symfony/var-dumper": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\HttpKernel\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony HttpKernel Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-24T03:48:59+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php56",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php56.git",
+                "reference": "13df84e91cd168f247c2f2ec82cc0fa24901c011"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/13df84e91cd168f247c2f2ec82cc0fa24901c011",
+                "reference": "13df84e91cd168f247c2f2ec82cc0fa24901c011",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-util": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php56\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php70",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php70.git",
+                "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3",
+                "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3",
+                "shasum": ""
+            },
+            "require": {
+                "paragonie/random_compat": "~1.0|~2.0|~9.99",
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php70\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-util",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-util.git",
+                "reference": "46b910c71e9828f8ec2aa7a0314de1130d9b295a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/46b910c71e9828f8ec2aa7a0314de1130d9b295a",
+                "reference": "46b910c71e9828f8ec2aa7a0314de1130d9b295a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Util\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony utilities for portability of PHP codes",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compat",
+                "compatibility",
+                "polyfill",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/routing",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/routing.git",
+                "reference": "58381b7b815c1e3afaf60a534fbf769157fe5fe7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/58381b7b815c1e3afaf60a534fbf769157fe5fe7",
+                "reference": "58381b7b815c1e3afaf60a534fbf769157fe5fe7",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8"
+            },
+            "conflict": {
+                "symfony/config": "<3.3.1",
+                "symfony/dependency-injection": "<3.3",
+                "symfony/yaml": "<3.4"
+            },
+            "require-dev": {
+                "doctrine/annotations": "~1.0",
+                "psr/log": "~1.0",
+                "symfony/config": "^3.3.1|~4.0",
+                "symfony/dependency-injection": "~3.3|~4.0",
+                "symfony/expression-language": "~2.8|~3.0|~4.0",
+                "symfony/http-foundation": "~2.8|~3.0|~4.0",
+                "symfony/yaml": "~3.4|~4.0"
+            },
+            "suggest": {
+                "doctrine/annotations": "For using the annotation loader",
+                "symfony/config": "For using the all-in-one router or any loader",
+                "symfony/expression-language": "For using expression matching",
+                "symfony/http-foundation": "For using a Symfony Request object",
+                "symfony/yaml": "For using the YAML loader"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Routing\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Routing Component",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "router",
+                "routing",
+                "uri",
+                "url"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-23T09:37:51+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v3.4.43",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "e7fa05917ae931332a42d65b577ece4d497aad81"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/e7fa05917ae931332a42d65b577ece4d497aad81",
+                "reference": "e7fa05917ae931332a42d65b577ece4d497aad81",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "~3.4|~4.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-23T09:37:51+00:00"
+        },
+        {
+            "name": "twig/extensions",
+            "version": "v1.5.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/twigphp/Twig-extensions.git",
+                "reference": "57873c8b0c1be51caa47df2cdb824490beb16202"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202",
+                "reference": "57873c8b0c1be51caa47df2cdb824490beb16202",
+                "shasum": ""
+            },
+            "require": {
+                "twig/twig": "^1.27|^2.0"
+            },
+            "require-dev": {
+                "symfony/phpunit-bridge": "^3.4",
+                "symfony/translation": "^2.7|^3.4"
+            },
+            "suggest": {
+                "symfony/translation": "Allow the time_diff output to be translated"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Twig_Extensions_": "lib/"
+                },
+                "psr-4": {
+                    "Twig\\Extensions\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Common additional features for Twig that do not directly belong in core",
+            "keywords": [
+                "i18n",
+                "text"
+            ],
+            "time": "2018-12-05T18:34:18+00:00"
+        },
+        {
+            "name": "twig/twig",
+            "version": "v1.42.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/twigphp/Twig.git",
+                "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
+                "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "require-dev": {
+                "psr/container": "^1.0",
+                "symfony/phpunit-bridge": "^4.4|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.42-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Twig_": "lib/"
+                },
+                "psr-4": {
+                    "Twig\\": "src/"
+                }
+            },
+            "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": "Twig Team",
+                    "role": "Contributors"
+                },
+                {
+                    "name": "Armin Ronacher",
+                    "email": "armin.ronacher@active-4.com",
+                    "role": "Project Founder"
+                }
+            ],
+            "description": "Twig, the flexible, fast, and secure template language for PHP",
+            "homepage": "https://twig.symfony.com",
+            "keywords": [
+                "templating"
+            ],
+            "time": "2020-02-11T05:59:23+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
+                "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2019-08-24T08:43:50+00:00"
+        },
+        {
+            "name": "whitehat101/apr1-md5",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/whitehat101/apr1-md5.git",
+                "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/whitehat101/apr1-md5/zipball/8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819",
+                "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.0.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "WhiteHat101\\Crypt\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jeremy Ebler",
+                    "email": "jebler@gmail.com"
+                }
+            ],
+            "description": "Apache's APR1-MD5 algorithm in pure PHP",
+            "homepage": "https://github.com/whitehat101/apr1-md5",
+            "keywords": [
+                "MD5",
+                "apr1"
+            ],
+            "time": "2015-02-11T11:06:42+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "composer/ca-bundle",
+            "version": "1.2.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "8a7ecad675253e4654ea05505233285377405215"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8a7ecad675253e4654ea05505233285377405215",
+                "reference": "8a7ecad675253e4654ea05505233285377405215",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-08-23T12:54:47+00:00"
+        },
+        {
+            "name": "composer/xdebug-handler",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/xdebug-handler.git",
+                "reference": "ebd27a9866ae8254e873866f795491f02418c5a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5",
+                "reference": "ebd27a9866ae8254e873866f795491f02418c5a5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0 || ^8.0",
+                "psr/log": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Composer\\XdebugHandler\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "John Stevenson",
+                    "email": "john-stevenson@blueyonder.co.uk"
+                }
+            ],
+            "description": "Restarts a process without Xdebug.",
+            "keywords": [
+                "Xdebug",
+                "performance"
+            ],
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-08-19T10:27:58+00:00"
+        },
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "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"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "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": "2015-06-14T21:17:01+00:00"
+        },
+        {
+            "name": "guzzlehttp/guzzle",
+            "version": "6.5.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
+                "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "guzzlehttp/promises": "^1.0",
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "^1.17.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+                "psr/log": "^1.1"
+            },
+            "suggest": {
+                "psr/log": "Required for using the Log middleware"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "time": "2020-06-16T21:01:06+00:00"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "v1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2016-12-20T10:07:11+00:00"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "1.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/http-message": "~1.0",
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-zlib": "*",
+                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+            },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "PSR-7 message implementation that also provides common utility methods",
+            "keywords": [
+                "http",
+                "message",
+                "psr-7",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
+            ],
+            "time": "2019-07-01T23:21:34+00:00"
+        },
+        {
+            "name": "mikey179/vfsstream",
+            "version": "v1.6.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/bovigo/vfsStream.git",
+                "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe",
+                "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.5|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "org\\bovigo\\vfs\\": "src/main/php"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Frank Kleine",
+                    "homepage": "http://frankkleine.de/",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Virtual file system to mock the real file system in unit tests.",
+            "homepage": "http://vfs.bovigo.org/",
+            "time": "2019-10-30T15:31:00+00:00"
+        },
+        {
+            "name": "muglug/package-versions-56",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/muglug/PackageVersions.git",
+                "reference": "a67bed26deaaf9269a348e53063bc8d4dcc60ffd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/muglug/PackageVersions/zipball/a67bed26deaaf9269a348e53063bc8d4dcc60ffd",
+                "reference": "a67bed26deaaf9269a348e53063bc8d4dcc60ffd",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.0",
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "composer/composer": "^1.3",
+                "ext-zip": "*",
+                "phpunit/phpunit": "^5.7.5"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "Muglug\\PackageVersions\\Installer",
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Muglug\\PackageVersions\\": "src/PackageVersions"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com"
+                },
+                {
+                    "name": "Abdul Malik Ikhsan",
+                    "email": "samsonasik@gmail.com"
+                },
+                {
+                    "name": "Matt Brown",
+                    "email": "github@muglug.com"
+                }
+            ],
+            "description": "A backport of ocramius/package-versions that supports php ^5.6. Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
+            "time": "2018-03-26T03:22:13+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^4.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "time": "2017-10-19T19:58:43+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v3.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0|~5.0"
+            },
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
+            },
+            "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": "2018-02-28T20:30:58+00:00"
+        },
+        {
+            "name": "openlss/lib-array2xml",
+            "version": "0.5.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nullivex/lib-array2xml.git",
+                "reference": "c8b5998a342d7861f2e921403f44e0a2f3ef2be0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/c8b5998a342d7861f2e921403f44e0a2f3ef2be0",
+                "reference": "c8b5998a342d7861f2e921403f44e0a2f3ef2be0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "LSS": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Bryan Tong",
+                    "email": "contact@nullivex.com",
+                    "homepage": "http://bryantong.com"
+                },
+                {
+                    "name": "Tony Butler",
+                    "email": "spudz76@gmail.com",
+                    "homepage": "http://openlss.org"
+                }
+            ],
+            "description": "Array2XML conversion library credit to lalit.org",
+            "homepage": "http://openlss.org",
+            "keywords": [
+                "array",
+                "array conversion",
+                "xml",
+                "xml conversion"
+            ],
+            "time": "2016-11-10T19:10:18+00:00"
+        },
+        {
+            "name": "php-coveralls/php-coveralls",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae",
+                "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzlehttp/guzzle": "^6.0",
+                "php": "^5.5 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/php-coveralls"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpCoveralls\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp",
+                    "role": "Original creator"
+                },
+                {
+                    "name": "Takashi Matsuo",
+                    "email": "tmatsuo@google.com"
+                },
+                {
+                    "name": "Google Inc"
+                },
+                {
+                    "name": "Dariusz Ruminski",
+                    "email": "dariusz.ruminski@gmail.com",
+                    "homepage": "https://github.com/keradus"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
+                }
+            ],
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
+            "keywords": [
+                "ci",
+                "coverage",
+                "github",
+                "test"
+            ],
+            "time": "2019-11-20T16:29:20+00:00"
+        },
+        {
+            "name": "php-cs-fixer/diff",
+            "version": "v1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHP-CS-Fixer/diff.git",
+                "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756",
+                "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7.23 || ^6.4.3",
+                "symfony/process": "^3.3"
+            },
+            "type": "library",
+            "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"
+                },
+                {
+                    "name": "SpacePossum"
+                }
+            ],
+            "description": "sebastian/diff v2 backport support for PHP5.6",
+            "homepage": "https://github.com/PHP-CS-Fixer",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2018-02-15T16:58:55+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": [
+                        "src"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2017-09-11T18:02:19+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "3.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2",
+                "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0",
+                "phpdocumentor/reflection-common": "^1.0.0",
+                "phpdocumentor/type-resolver": "^0.4.0",
+                "webmozart/assert": "^1.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^0.9.4",
+                "phpunit/phpunit": "^4.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2017-11-10T14:09:06+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "0.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.5 || ^7.0",
+                "phpdocumentor/reflection-common": "^1.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^0.9.4",
+                "phpunit/phpunit": "^5.2||^4.8.24"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "time": "2017-07-14T14:27:02+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "v1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2020-03-05T15:02:03+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "4.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "^1.3",
+                "phpunit/php-text-template": "^1.2",
+                "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+                "sebastian/code-unit-reverse-lookup": "^1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "^1.0 || ^2.0"
+            },
+            "require-dev": {
+                "ext-xdebug": "^2.1.4",
+                "phpunit/phpunit": "^5.7"
+            },
+            "suggest": {
+                "ext-xdebug": "^2.5.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "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": "2017-04-02T07:44:40+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.4.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Routing\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "classmap": [
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Symfony Routing Component",
-            "homepage": "https://symfony.com",
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
             "keywords": [
-                "router",
-                "routing",
-                "uri",
-                "url"
+                "filesystem",
+                "iterator"
             ],
-            "time": "2019-10-24T15:33:53+00:00"
+            "time": "2017-11-27T13:52:08+00:00"
         },
         {
-            "name": "symfony/yaml",
-            "version": "v3.4.33",
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "dab657db15207879217fc81df4f875947bf68804"
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804",
-                "reference": "dab657db15207879217fc81df4f875947bf68804",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": ">=5.3.3"
             },
-            "conflict": {
-                "symfony/console": "<3.4"
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
             },
-            "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
             },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "classmap": [
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-10-24T15:33:53+00:00"
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
         },
         {
-            "name": "twig/extensions",
-            "version": "v1.5.4",
+            "name": "phpunit/php-token-stream",
+            "version": "1.4.12",
             "source": {
                 "type": "git",
-                "url": "https://github.com/twigphp/Twig-extensions.git",
-                "reference": "57873c8b0c1be51caa47df2cdb824490beb16202"
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202",
-                "reference": "57873c8b0c1be51caa47df2cdb824490beb16202",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
                 "shasum": ""
             },
             "require": {
-                "twig/twig": "^1.27|^2.0"
+                "ext-tokenizer": "*",
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "^3.4",
-                "symfony/translation": "^2.7|^3.4"
-            },
-            "suggest": {
-                "symfony/translation": "Allow the time_diff output to be translated"
+                "phpunit/phpunit": "~4.2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.4-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Twig_Extensions_": "lib/"
-                },
-                "psr-4": {
-                    "Twig\\Extensions\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Common additional features for Twig that do not directly belong in core",
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
             "keywords": [
-                "i18n",
-                "text"
+                "tokenizer"
             ],
-            "time": "2018-12-05T18:34:18+00:00"
+            "abandoned": true,
+            "time": "2017-12-04T08:55:13+00:00"
         },
         {
-            "name": "twig/twig",
-            "version": "v1.42.3",
+            "name": "phpunit/phpunit",
+            "version": "5.7.27",
             "source": {
                 "type": "git",
-                "url": "https://github.com/twigphp/Twig.git",
-                "reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e"
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/201baee843e0ffe8b0b956f336dd42b2a92fae4e",
-                "reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5.0",
-                "symfony/polyfill-ctype": "^1.8"
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "^1.2.4",
+                "sebastian/diff": "^1.4.3",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.1",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "^1.0.6|^2.0.1",
+                "symfony/yaml": "~2.1|~3.0|~4.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
             },
             "require-dev": {
-                "psr/container": "^1.0",
-                "symfony/debug": "^3.4|^4.2",
-                "symfony/phpunit-bridge": "^4.4@dev|^5.0"
+                "ext-pdo": "*"
             },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.42-dev"
+                    "dev-master": "5.7.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Twig_": "lib/"
-                },
-                "psr-4": {
-                    "Twig\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1276,103 +4500,106 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com",
-                    "homepage": "http://fabien.potencier.org",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Twig Team",
-                    "homepage": "https://twig.symfony.com/contributors",
-                    "role": "Contributors"
-                },
-                {
-                    "name": "Armin Ronacher",
-                    "email": "armin.ronacher@active-4.com",
-                    "role": "Project Founder"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Twig, the flexible, fast, and secure template language for PHP",
-            "homepage": "https://twig.symfony.com",
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
             "keywords": [
-                "templating"
+                "phpunit",
+                "testing",
+                "xunit"
             ],
-            "time": "2019-08-24T12:51:03+00:00"
+            "time": "2018-02-01T05:50:59+00:00"
         },
         {
-            "name": "webmozart/assert",
-            "version": "1.5.0",
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "3.4.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
-                "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
-                "symfony/polyfill-ctype": "^1.8"
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3-dev"
+                    "dev-master": "3.2.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Assertions to validate method input/output with nice error messages.",
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
             "keywords": [
-                "assert",
-                "check",
-                "validate"
+                "mock",
+                "xunit"
             ],
-            "time": "2019-08-24T08:43:50+00:00"
+            "abandoned": true,
+            "time": "2017-06-30T09:13:00+00:00"
         },
         {
-            "name": "whitehat101/apr1-md5",
-            "version": "v1.0.0",
+            "name": "psr/http-message",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/whitehat101/apr1-md5.git",
-                "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819"
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/whitehat101/apr1-md5/zipball/8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819",
-                "reference": "8b261c9fc0481b4e9fa9d01c6ca70867b5d5e819",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.0"
             },
-            "require-dev": {
-                "phpunit/phpunit": "4.0.*"
-            },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "WhiteHat101\\Crypt\\": "src"
+                    "Psr\\Http\\Message\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1381,54 +4608,48 @@
             ],
             "authors": [
                 {
-                    "name": "Jeremy Ebler",
-                    "email": "jebler@gmail.com"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Apache's APR1-MD5 algorithm in pure PHP",
-            "homepage": "https://github.com/whitehat101/apr1-md5",
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
             "keywords": [
-                "MD5",
-                "apr1"
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
             ],
-            "time": "2015-02-11T11:06:42+00:00"
-        }
-    ],
-    "packages-dev": [
+            "time": "2016-08-06T14:39:51+00:00"
+        },
         {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+                "url": "https://github.com/ralouphie/getallheaders.git",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3,<8.0-DEV"
+                "php": ">=5.6"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
+                "files": [
+                    "src/getallheaders.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1436,49 +4657,43 @@
             ],
             "authors": [
                 {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
+                    "name": "Ralph Khattar",
+                    "email": "ralph.khattar@gmail.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": "2015-06-14T21:17:01+00:00"
+            "description": "A polyfill for getallheaders.",
+            "time": "2019-03-08T08:55:37+00:00"
         },
         {
-            "name": "mikey179/vfsstream",
-            "version": "v1.6.8",
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/bovigo/vfsStream.git",
-                "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe"
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe",
-                "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^5.6 || ^7.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.5|^5.0"
+                "phpunit/phpunit": "^5.7 || ^6.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.6.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "org\\bovigo\\vfs\\": "src/main/php"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1486,259 +4701,274 @@
             ],
             "authors": [
                 {
-                    "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Virtual file system to mock the real file system in unit tests.",
-            "homepage": "http://vfs.bovigo.org/",
-            "time": "2019-10-30T15:31:00+00:00"
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
         },
         {
-            "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "phpunit/phpunit": "~4.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
+                    "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": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
             "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
+                "comparator",
+                "compare",
+                "equality"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2017-01-29T09:50:25+00:00"
         },
         {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "3.2.2",
+            "name": "sebastian/diff",
+            "version": "1.4.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157"
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157",
-                "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5",
-                "phpdocumentor/reflection-common": "^1.0@dev",
-                "phpdocumentor/type-resolver": "^0.3.0",
-                "webmozart/assert": "^1.0"
+                "php": "^5.3.3 || ^7.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^4.4"
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
             },
             "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
                 }
             },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-08-08T06:39:58+00:00"
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
         },
         {
-            "name": "phpdocumentor/type-resolver",
-            "version": "0.3.0",
+            "name": "sebastian/environment",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773"
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773",
-                "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^5.6 || ^7.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "phpunit/phpunit": "^5.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "time": "2017-06-03T08:32:36+00:00"
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-11-26T07:53:53+00:00"
         },
         {
-            "name": "phpspec/prophecy",
-            "version": "1.9.0",
+            "name": "sebastian/exporter",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203"
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203",
-                "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~2.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Prophecy\\": "src/Prophecy"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
                 },
                 {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
             "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
+                "export",
+                "exporter"
             ],
-            "time": "2019-10-03T11:07:50+00:00"
+            "time": "2016-11-19T08:54:04+00:00"
         },
         {
-            "name": "phpunit/php-code-coverage",
-            "version": "2.2.4",
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-token-stream": "~1.3",
-                "sebastian/environment": "^1.3.2",
-                "sebastian/version": "~1.0"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
+                "phpunit/phpunit": "~4.2"
             },
             "suggest": {
-                "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
+                "ext-uopz": "*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
@@ -1753,40 +4983,41 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
             "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
+                "global state"
             ],
-            "time": "2015-10-06T15:47:00+00:00"
+            "time": "2015-10-12T03:26:01+00:00"
         },
         {
-            "name": "phpunit/php-file-iterator",
-            "version": "1.4.5",
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
-                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
@@ -1801,36 +5032,39 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2017-11-27T13:52:08+00:00"
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-02-18T15:18:39+00:00"
         },
         {
-            "name": "phpunit/php-text-template",
-            "version": "1.2.1",
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
-                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
             "autoload": {
                 "classmap": [
                     "src/"
@@ -1841,43 +5075,44 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "time": "2015-06-21T13:50:34+00:00"
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
         },
         {
-            "name": "phpunit/php-timer",
-            "version": "1.0.9",
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
-                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+                "php": ">=5.6.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
@@ -1892,42 +5127,34 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
-            "keywords": [
-                "timer"
-            ],
-            "time": "2017-02-26T11:10:40+00:00"
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
         },
         {
-            "name": "phpunit/php-token-stream",
-            "version": "1.4.12",
+            "name": "sebastian/version",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
+                "php": ">=5.6"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
@@ -1942,516 +5169,618 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-            "keywords": [
-                "tokenizer"
-            ],
-            "time": "2017-12-04T08:55:13+00:00"
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
         },
         {
-            "name": "phpunit/phpunit",
-            "version": "4.8.36",
+            "name": "sensiolabs/security-checker",
+            "version": "v5.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
+                "url": "https://github.com/sensiolabs/security-checker.git",
+                "reference": "46be3f58adac13084497961e10eed9a7fb4d44d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
+                "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/46be3f58adac13084497961e10eed9a7fb4d44d1",
+                "reference": "46be3f58adac13084497961e10eed9a7fb4d44d1",
                 "shasum": ""
             },
             "require": {
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpspec/prophecy": "^1.3.1",
-                "phpunit/php-code-coverage": "~2.1",
-                "phpunit/php-file-iterator": "~1.4",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-timer": "^1.0.6",
-                "phpunit/phpunit-mock-objects": "~2.3",
-                "sebastian/comparator": "~1.2.2",
-                "sebastian/diff": "~1.2",
-                "sebastian/environment": "~1.3",
-                "sebastian/exporter": "~1.2",
-                "sebastian/global-state": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.1|~3.0"
-            },
-            "suggest": {
-                "phpunit/php-invoker": "~1.1"
+                "composer/ca-bundle": "^1.0",
+                "php": ">=5.5.9",
+                "symfony/console": "~2.7|~3.0|~4.0"
             },
             "bin": [
-                "phpunit"
+                "security-checker"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.8.x-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "SensioLabs\\Security\\": "SensioLabs/Security"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "Fabien Potencier",
+                    "email": "fabien.potencier@gmail.com"
                 }
             ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2017-06-21T08:07:12+00:00"
+            "description": "A security checker for your composer.lock",
+            "time": "2018-12-19T17:14:59+00:00"
         },
         {
-            "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.8",
+            "name": "simplesamlphp/simplesamlphp-test-framework",
+            "version": "v0.0.14",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+                "url": "https://github.com/simplesamlphp/simplesamlphp-test-framework.git",
+                "reference": "d9b90d829ffd1597f0119570b4b1f5b7c91a56e1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-test-framework/zipball/d9b90d829ffd1597f0119570b4b1f5b7c91a56e1",
+                "reference": "d9b90d829ffd1597f0119570b4b1f5b7c91a56e1",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2",
-                "sebastian/exporter": "~1.2"
+                "php": ">=5.6",
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "~5.7|^6.0|^7.0|^8.0",
+                "vimeo/psalm": "1.1.9|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
-            },
-            "suggest": {
-                "ext-soap": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3.x-dev"
-                }
+                "ext-curl": "*",
+                "ext-krb5": "*",
+                "simplesamlphp/simplesamlphp": "dev-master"
             },
+            "bin": [
+                "bin/check-syntax-json.sh",
+                "bin/check-syntax-php.sh",
+                "bin/check-syntax-xml.sh",
+                "bin/check-syntax-yaml.sh"
+            ],
+            "type": "project",
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "SimpleSAML\\TestUtils\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "LGPL-3.0-or-later"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "name": "Tim van Dijen",
+                    "email": "tvdijen@gmail.com"
                 }
             ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "description": "Test framework for SimpleSAMLphp and related repositories ",
             "keywords": [
-                "mock",
-                "xunit"
+                "test-framework"
             ],
-            "abandoned": true,
-            "time": "2015-10-02T06:51:40+00:00"
+            "time": "2019-10-22T20:45:13+00:00"
         },
         {
-            "name": "sebastian/comparator",
-            "version": "1.2.4",
+            "name": "squizlabs/php_codesniffer",
+            "version": "3.5.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
-                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "sebastian/diff": "~1.2",
-                "sebastian/exporter": "~1.2 || ~2.0"
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
             },
+            "bin": [
+                "bin/phpcs",
+                "bin/phpcbf"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2.x-dev"
+                    "dev-master": "3.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": "Greg Sherwood",
+                    "role": "lead"
                 }
             ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
             "keywords": [
-                "comparator",
-                "compare",
-                "equality"
+                "phpcs",
+                "standards"
             ],
-            "time": "2017-01-29T09:50:25+00:00"
+            "time": "2020-08-10T04:50:15+00:00"
         },
         {
-            "name": "sebastian/diff",
-            "version": "1.4.3",
+            "name": "symfony/console",
+            "version": "v3.4.43",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+                "url": "https://github.com/symfony/console.git",
+                "reference": "afc7189694d2c59546cf24ea606a236fa46a966e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
-                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "url": "https://api.github.com/repos/symfony/console/zipball/afc7189694d2c59546cf24ea606a236fa46a966e",
+                "reference": "afc7189694d2c59546cf24ea606a236fa46a966e",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.5.9|>=7.0.8",
+                "symfony/debug": "~2.8|~3.0|~4.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+                "psr/log": "~1.0",
+                "symfony/config": "~3.3|~4.0",
+                "symfony/dependency-injection": "~3.4|~4.0",
+                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+                "symfony/lock": "~3.4|~4.0",
+                "symfony/process": "~3.3|~4.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff"
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2017-05-22T07:24:03+00:00"
+            "time": "2020-07-06T08:57:31+00:00"
         },
         {
-            "name": "sebastian/environment",
-            "version": "1.3.8",
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251",
+                "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": ">=5.3.3",
+                "symfony/polyfill-intl-normalizer": "^1.10",
+                "symfony/polyfill-php70": "^1.10",
+                "symfony/polyfill-php72": "^1.10"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8 || ^5.0"
+            "suggest": {
+                "ext-intl": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Trevor Rowbotham",
+                    "email": "trevor.rowbotham@pm.me"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "time": "2016-08-18T05:49:44+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-08-04T06:02:08+00:00"
         },
         {
-            "name": "sebastian/exporter",
-            "version": "1.2.2",
+            "name": "symfony/polyfill-intl-normalizer",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+                "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+                "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "sebastian/recursion-context": "~1.0"
+                "php": ">=5.3.3"
             },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "~4.4"
+            "suggest": {
+                "ext-intl": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
                 "classmap": [
-                    "src/"
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's Normalizer class and related functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "intl",
+                "normalizer",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
                 {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2016-06-17T09:04:28+00:00"
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "sebastian/global-state",
-            "version": "1.1.1",
+            "name": "symfony/polyfill-php72",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
-                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "require-dev": {
-                "phpunit/phpunit": "~4.2"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "global state"
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "time": "2015-10-12T03:26:01+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "sebastian/recursion-context",
-            "version": "1.0.5",
+            "name": "symfony/stopwatch",
+            "version": "v3.4.43",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "php": "^5.5.9|>=7.0.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "3.4-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2016-10-03T07:41:43+00:00"
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
-            "name": "sebastian/version",
-            "version": "1.0.6",
+            "name": "vimeo/psalm",
+            "version": "1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+                "url": "https://github.com/vimeo/psalm.git",
+                "reference": "d15cf3b7f50249caf933144c8926c8e69aff3d34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "url": "https://api.github.com/repos/vimeo/psalm/zipball/d15cf3b7f50249caf933144c8926c8e69aff3d34",
+                "reference": "d15cf3b7f50249caf933144c8926c8e69aff3d34",
                 "shasum": ""
             },
+            "require": {
+                "composer/xdebug-handler": "^1.1",
+                "muglug/package-versions-56": "1.2.4",
+                "nikic/php-parser": "^3.1",
+                "openlss/lib-array2xml": "^0.0.10||^0.5.1",
+                "php": "^5.6||^7.0",
+                "php-cs-fixer/diff": "^1.2"
+            },
+            "provide": {
+                "psalm/psalm": "self.version"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.2",
+                "php-coveralls/php-coveralls": "^2.0",
+                "phpunit/phpunit": "^5.7.4",
+                "squizlabs/php_codesniffer": "^3.0"
+            },
+            "suggest": {
+                "ext-igbinary": "^2.0.5"
+            },
+            "bin": [
+                "psalm",
+                "psalter"
+            ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev",
+                    "dev-1.x": "1.x-dev"
+                }
+            },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "Psalm\\": "src/Psalm"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "Matthew Brown"
                 }
             ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21T13:59:46+00:00"
+            "description": "A static analysis tool for finding errors in PHP applications",
+            "keywords": [
+                "code",
+                "inspection",
+                "php"
+            ],
+            "time": "2018-08-14T16:06:16+00:00"
         }
     ],
     "aliases": [],
@@ -2460,7 +5789,7 @@
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
-        "php": ">=5.5",
+        "php": ">=5.6",
         "ext-spl": "*",
         "ext-zlib": "*",
         "ext-pcre": "*",
@@ -2473,5 +5802,6 @@
     },
     "platform-dev": {
         "ext-curl": "*"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/config-templates/authsources.php b/vendor/simplesamlphp/simplesamlphp/config-templates/authsources.php
index 0d8da0e9c6..f2d562163f 100644
--- a/vendor/simplesamlphp/simplesamlphp/config-templates/authsources.php
+++ b/vendor/simplesamlphp/simplesamlphp/config-templates/authsources.php
@@ -57,13 +57,14 @@
         'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
         'username' => 'simplesaml',
         'password' => 'secretpassword',
-        'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password), 256);',
+        'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username ' .
+            'AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password), 256);',
     ],
     */
 
     /*
     'example-static' => [
-        'exampleauth:Static',
+        'exampleauth:StaticSource',
         'uid' => ['testuser'],
         'eduPersonAffiliation' => ['member', 'employee'],
         'cn' => ['Test User'],
@@ -149,17 +150,16 @@
     */
 
     /*
-    // Twitter OAuth Authentication API.
+    // LinkedIn OAuth Authentication API.
     // Register your application to get an API key here:
-    //  http://twitter.com/oauth_clients
-    'twitter' => [
-        'authtwitter:Twitter',
+    //  https://www.linkedin.com/secure/developer
+    // Attributes definition:
+    //  https://developer.linkedin.com/docs/fields
+    'linkedin' => [
+        'authlinkedin:LinkedIn',
         'key' => 'xxxxxxxxxxxxxxxx',
         'secret' => 'xxxxxxxxxxxxxxxx',
-
-        // Forces the user to enter their credentials to ensure the correct users account is authorized.
-        // Details: https://dev.twitter.com/docs/api/1/get/oauth/authenticate
-        'force_login' => false,
+        'attributes' => 'id,first-name,last-name,headline,summary,specialties,picture-url,email-address',
     ],
     */
 
diff --git a/vendor/simplesamlphp/simplesamlphp/config-templates/config.php b/vendor/simplesamlphp/simplesamlphp/config-templates/config.php
index 29d7a00436..2d6118170f 100644
--- a/vendor/simplesamlphp/simplesamlphp/config-templates/config.php
+++ b/vendor/simplesamlphp/simplesamlphp/config-templates/config.php
@@ -75,6 +75,31 @@
     'technicalcontact_name' => 'Administrator',
     'technicalcontact_email' => 'na@example.org',
 
+    /*
+     * (Optional) The method by which email is delivered.  Defaults to mail which utilizes the
+     * PHP mail() function.
+     *
+     * Valid options are: mail, sendmail and smtp.
+     */
+    //'mail.transport.method' => 'smtp',
+
+    /*
+     * Set the transport options for the transport method specified.  The valid settings are relative to the
+     * selected transport method.
+     */
+    // // smtp mail transport options
+    // 'mail.transport.options' => [
+    //     'host' => 'mail.example.org', // required
+    //     'port' => 25, // optional
+    //     'username' => 'user@example.org', // optional: if set, enables smtp authentication
+    //     'password' => 'password', // optional: if set, enables smtp authentication
+    //     'security' => 'tls', // optional: defaults to no smtp security
+    // ],
+    // // sendmail mail transport options
+    // 'mail.transport.options' => [
+    //     'path' => '/usr/sbin/sendmail' // optional: defaults to php.ini path
+    // ],
+
     /*
      * The envelope from address for outgoing emails.
      * This should be in a domain that has your application's IP addresses in its SPF record
@@ -212,9 +237,8 @@
      * SAML messages will be logged, including plaintext versions of encrypted
      * messages.
      *
-     * - 'backtraces': this action controls the logging of error backtraces. If you
-     * want to log backtraces so that you can debug any possible errors happening in
-     * SimpleSAMLphp, enable this action (add it to the array or set it to true).
+     * - 'backtraces': this action controls the logging of error backtraces so you
+     * can debug any possible errors happening in SimpleSAMLphp.
      *
      * - 'validatexml': this action allows you to validate SAML documents against all
      * the relevant XML schemas. SAML 1.1 messages or SAML metadata parsed with
@@ -264,7 +288,7 @@
      *
      * Choose logging handler.
      *
-     * Options: [syslog,file,errorlog]
+     * Options: [syslog,file,errorlog,stderr]
      *
      */
     'logging.level' => SimpleSAML\Logger::NOTICE,
@@ -439,13 +463,6 @@
     'enable.saml20-idp' => false,
     'enable.shib13-idp' => false,
     'enable.adfs-idp' => false,
-    'enable.wsfed-sp' => false,
-    'enable.authmemcookie' => false,
-
-    /*
-     * Default IdP for WS-Fed.
-     */
-    'default-wsfed-idp' => 'urn:federation:pingfederate:localhost',
 
     /*
      * Whether SimpleSAMLphp should sign the response or the assertion in SAML 1.1 authentication
@@ -470,7 +487,7 @@
      *
      * 'module.enable' => [
      *      'exampleauth' => true, // Setting to TRUE enables.
-     *      'saml' => false, // Setting to FALSE disables.
+     *      'consent' => false, // Setting to FALSE disables.
      *      'core' => null, // Unset or NULL uses default.
      * ],
      *
@@ -616,6 +633,9 @@
      *  - 'port': This is the port number of the memcache server. If this
      *    option isn't set, then we will use the 'memcache.default_port'
      *    ini setting. This is 11211 by default.
+     *
+     * When using the "memcache" extension, the following options are also
+     * supported:
      *  - 'weight': This sets the weight of this server in this server
      *    group. http://php.net/manual/en/function.Memcache-addServer.php
      *    contains more information about the weight option.
@@ -649,6 +669,35 @@
      *     ],
      * ],
      *
+     * Additionally, when using the "memcached" extension, unique keys must
+     * be provided for each group of servers if persistent connections are
+     * desired. Each server group can also have an "options" indexed array
+     * with the options desired for the given group:
+     *
+     * 'memcache_store.servers' => [
+     *     'memcache_group_1' => [
+     *         'options' => [
+     *              \Memcached::OPT_BINARY_PROTOCOL => true,
+     *              \Memcached::OPT_NO_BLOCK => true,
+     *              \Memcached::OPT_TCP_NODELAY => true,
+     *              \Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
+     *         ],
+     *         ['hostname' => '127.0.0.1', 'port' => 11211],
+     *         ['hostname' => '127.0.0.2', 'port' => 11211],
+     *     ],
+     *
+     *     'memcache_group_2' => [
+     *         'options' => [
+     *              \Memcached::OPT_BINARY_PROTOCOL => true,
+     *              \Memcached::OPT_NO_BLOCK => true,
+     *              \Memcached::OPT_TCP_NODELAY => true,
+     *              \Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
+     *         ],
+     *         ['hostname' => '127.0.0.3', 'port' => 11211],
+     *         ['hostname' => '127.0.0.4', 'port' => 11211],
+     *     ],
+     * ],
+     *
      */
     'memcache_store.servers' => [
         [
@@ -805,6 +854,15 @@
      */
     //'theme.header' => 'SimpleSAMLphp'
 
+    /**
+     * A template controller, if any.
+     *
+     * Used to intercept certain parts of the template handling, while keeping away unwanted/unexpected hooks. Set
+     * the 'theme.controller' configuration option to a class that implements the
+     * \SimpleSAML\XHTML\TemplateControllerInterface interface to use it.
+     */
+    //'theme.controller' => '',
+
     /*
      * Templating options
      *
@@ -834,6 +892,31 @@
      */
     'production' => true,
 
+    /*
+     * SimpleSAMLphp modules can host static resources which are served through PHP.
+     * The serving of the resources can be configured through these settings.
+     */
+    'assets' => [
+        /*
+         * These settings adjust the caching headers that are sent
+         * when serving static resources.
+         */
+        'caching' => [
+            /*
+             * Amount of seconds before the resource should be fetched again
+             */
+            'max_age' => 86400,
+            /*
+             * Calculate a checksum of every file and send it to the browser
+             * This allows the browser to avoid downloading assets again in situations
+             * where the Last-Modified header cannot be trusted,
+             * for example in cluster setups
+             *
+             * Defaults false
+             */
+            'etag' => false,
+        ],
+    ],
 
 
     /*********************
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.definition.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.definition.json
index 491c713765..ce20e0e336 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.definition.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.definition.json
@@ -68,18 +68,12 @@
 	"metaover_group_metadata.shib13-idp-remote": {
 		"en": "Shib 1.3 Identity Provider (Remote)"
 	},
-    "metaover_group_metadata.adfs-sp-remote": {
-        "en": "ADFS Service Provider (Remote)"
-    },
-    "metaover_group_metadata.adfs-idp-hosted": {
-        "en": "ADFS Identity Provider (Hosted)"
-    },
-	"metaover_group_metadata.wsfed-sp-hosted": {
-		"en": "WS-Federation Service Provider (Hosted)"
-	},
-	"metaover_group_metadata.wsfed-idp-remote": {
-		"en": "WS-Federation Identity Provider (Remote)"
-	},
+        "metaover_group_metadata.adfs-sp-remote": {
+            "en": "ADFS Service Provider (Remote)"
+        },
+        "metaover_group_metadata.adfs-idp-hosted": {
+            "en": "ADFS Identity Provider (Hosted)"
+        },
 	"metaconv_title": {
 		"en": "Metadata parser"
 	},
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.translation.json
index 7f5f18abbd..ec56e98a47 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/admin.translation.json
@@ -30,7 +30,8 @@
 		"id": "Pemeriksaan konfigurasi",
 		"sr": "Provera pode\u0161avanja",
 		"ro": "Verificarea configura\u021biei",
-		"el": "\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd"
+		"el": "\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd",
+		"ca": "Comprovar la configuaraci\u00f3"
 	},
 	"cfg_check_select_file": {
 		"no": "Velg hvilken konfigurasjonfil som skal sjekkes",
@@ -63,7 +64,8 @@
 		"sr": "Odaberite konfiguracionu fajl koji \u017eelite proveriti:",
 		"ro": "Alege\u021bi fi\u0219ierul de configurare care dori\u021bi s\u0103-l verifica\u021bi:",
 		"eu": "Hautatu ezazu egiaztatu beharreko konfigurazio fitxategia: ",
-		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf: "
+		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf: ",
+		"ca": "Seleccioneu el fitxer de configuraci\u00f3 per comprovar:"
 	},
 	"cfg_check_missing": {
 		"no": "Mangler element i konfigurasjonsfilen",
@@ -96,7 +98,8 @@
 		"ro": "Op\u021biuni care nu apar \u00een fi\u0219ierul de configurare",
 		"ru": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438",
 		"eu": "Konfigurazio fitxategian falta diren aukerak",
-		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03c0\u03bf\u03c5 \u03bb\u03b5\u03af\u03c0\u03bf\u03c5\u03bd \u03b1\u03c0\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd"
+		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03c0\u03bf\u03c5 \u03bb\u03b5\u03af\u03c0\u03bf\u03c5\u03bd \u03b1\u03c0\u03cc \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd",
+		"ca": "Falten les opcions del fitxer de configuraci\u00f3"
 	},
 	"cfg_check_superfluous": {
 		"no": "Overf\u00f8ldig element i konfigurasjonsfilen",
@@ -129,7 +132,8 @@
 		"ro": "Op\u021biuni inutile \u00een fi\u0219ierul de configurare",
 		"ru": "\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438",
 		"eu": "Konfigurazio fitxategian soberan dauden aukerak",
-		"el": "\u03a0\u03b5\u03c1\u03b9\u03c4\u03c4\u03ad\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd"
+		"el": "\u03a0\u03b5\u03c1\u03b9\u03c4\u03c4\u03ad\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd",
+		"ca": "Opcions superflues al fitxer de configuraci\u00f3"
 	},
 	"cfg_check_noerrors": {
 		"no": "Ingen feil funnet",
@@ -162,7 +166,8 @@
 		"sr": "Nije prona\u0111ena nijedna gre\u0161ka.",
 		"ro": "Nu au fost depistate erori.",
 		"ru": "\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.",
-		"el": "\u0394\u03b5\u03bd \u03b5\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b1\u03bd \u03bb\u03ac\u03b8\u03b7."
+		"el": "\u0394\u03b5\u03bd \u03b5\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b1\u03bd \u03bb\u03ac\u03b8\u03b7.",
+		"ca": "No s'ha trobat cap error."
 	},
 	"cfg_check_back": {
 		"no": "G\u00e5 tilbake til fil-listen",
@@ -195,7 +200,8 @@
 		"sr": "Vrati se natrag na listu fajlova",
 		"ro": "Merge\u021bi \u00eenapoi la lista de fi\u0219iere",
 		"ru": "\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0444\u0430\u0439\u043b\u043e\u0432",
-		"el": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03bf\u03bd \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd"
+		"el": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03bf\u03bd \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd",
+		"ca": "Torneu a la llista de fitxers"
 	},
 	"metaover_header": {
 		"no": "Oversikt over metadata",
@@ -228,7 +234,8 @@
 		"ro": "Prezentare general\u0103 a metadatelor",
 		"ru": "\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445",
 		"eu": "Ikusi metadatuak",
-		"el": "\u0395\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd (metadata)"
+		"el": "\u0395\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd (metadata)",
+		"ca": "Visi\u00f3 general de les metadades"
 	},
 	"metaover_intro": {
 		"no": "For \u00e5 se p\u00e5 detaljene i en SAML-entitet, klikk p\u00e5 SAML-entitet overskriften",
@@ -261,7 +268,8 @@
 		"ro": "Pentru a vizualiza detalii privind o entitate SAML, ap\u0103sa\u021bi pe antetul entit\u0103\u021bii SAML.",
 		"ru": "\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 SAML, \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 SAML.",
 		"eu": "SAML entitate baten xehetasunak ikusteko, klikatu entitatearen goiburua.",
-		"el": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b5\u03af\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03bc\u03b9\u03b1 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u0053\u0041\u004d\u004c, \u03ba\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03c3\u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 \u03c4\u03b7\u03c2 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2."
+		"el": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b5\u03af\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03bc\u03b9\u03b1 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u0053\u0041\u004d\u004c, \u03ba\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03c3\u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 \u03c4\u03b7\u03c2 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2.",
+		"ca": "Per veure els detalls d'una entitat SAML, feu clic a la cap\u00e7alera de l'entitat SAML."
 	},
 	"metaover_errorentry": {
 		"no": "Feil i metadataoppf\u00f8ringen",
@@ -294,7 +302,8 @@
 		"ro": "Eroare \u00een aceast\u0103 metadat\u0103",
 		"ru": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0432\u0432\u043e\u0434\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445",
 		"eu": "Metadatu sarrera honetan  errorea",
-		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd"
+		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
+		"ca": "Error en aquesta entrada de metadades"
 	},
 	"metaover_required_found": {
 		"no": "Obligatorisk felt",
@@ -327,7 +336,8 @@
 		"ro": "C\u00e2mpuri obligatorii",
 		"ru": "\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f",
 		"eu": "Derrigorrezko eremuak",
-		"el": "\u03a5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1"
+		"el": "\u03a5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1",
+		"ca": "Camps obligatoris"
 	},
 	"metaover_required_not_found": {
 		"no": "F\u00f8lgende obligatoriske felter ble ikke funnet",
@@ -360,7 +370,8 @@
 		"ro": "Urm\u0103toarele c\u00e2mpuri obligatorii nu au fost g\u0103site",
 		"ru": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b",
 		"eu": "Derrigorrezko datu hauek ez dira aurkitu",
-		"el": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1 \u03b4\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd"
+		"el": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1 \u03b4\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd",
+		"ca": "No s'han trobat els seg\u00fcents camps obligatoris"
 	},
 	"metaover_optional_found": {
 		"no": "Valgbart felt",
@@ -393,7 +404,8 @@
 		"ro": "C\u00e2mpuri op\u021bionale",
 		"ru": "\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f",
 		"eu": "Hautazko datuak",
-		"el": "\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1"
+		"el": "\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1",
+		"ca": "Camps opcionals"
 	},
 	"metaover_optional_not_found": {
 		"no": "F\u00f8lgende valgbare felt ble ikke funnet",
@@ -426,7 +438,8 @@
 		"ro": "Urm\u0103toarele c\u00e2mpuri op\u021bionale nu au fost g\u0103site",
 		"ru": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b",
 		"eu": "Hautazko datu hauek ez dira aurkitu",
-		"el": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1 \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd"
+		"el": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03ac \u03c0\u03b5\u03b4\u03af\u03b1 \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd",
+		"ca": "No s'han trobat els seg\u00fcents camps opcionals"
 	},
 	"metaover_unknown_found": {
 		"no": "F\u00f8lgende felt ble ikke gjenkjent",
@@ -459,7 +472,8 @@
 		"ro": "Urm\u0103toarele c\u00e2mpuri nu au fost recunoscute",
 		"ru": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044f \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u044b",
 		"eu": "Datu hauek ez dira antzeman",
-		"el": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03b5\u03b4\u03af\u03b1 \u03b4\u03b5\u03bd \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03af\u03c3\u03c4\u03b7\u03ba\u03b1\u03bd"
+		"el": "\u03a4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03b5\u03b4\u03af\u03b1 \u03b4\u03b5\u03bd \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03af\u03c3\u03c4\u03b7\u03ba\u03b1\u03bd",
+		"ca": "No s'han reconegut els seg\u00fcents camps"
 	},
 	"metadata_metadata": {
 		"no": "Metadata",
@@ -492,7 +506,8 @@
 		"ro": "Metadate",
 		"ru": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435",
 		"eu": "Metadatuak",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",
+		"ca": "Metadades"
 	},
 	"metadata_xmlformat": {
 		"no": "I SAML 2.0 Metadata XML Format:",
@@ -525,7 +540,8 @@
 		"ro": "\u00cen format metadate XML SAML 2.0:",
 		"ru": "xml \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 SAML 2.0:",
 		"eu": "SAML 2.0 metadatuetako xml formatuan:",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c3\u03b5 \u03bc\u03bf\u03c1\u03c6\u03ae xml SAML 2.0:"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c3\u03b5 \u03bc\u03bf\u03c1\u03c6\u03ae xml SAML 2.0:",
+		"ca": "En format XML de metadades SAML 2.0:"
 	},
 	"debug_sending_message_text_link": {
 		"no": "Du er i ferd med \u00e5 sende en melding. Trykk p\u00e5 send melding knappen for \u00e5 fortsette.",
@@ -557,7 +573,8 @@
 		"sr": "Kliknite na link \"Po\u0161alji poruku\" da biste poslali poruku.",
 		"ro": "Mesajul este preg\u0103tit pentru a fi trimis. Ap\u0103sa\u021bi link-ul de trimitere pentru a continua.",
 		"ru": "\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f.",
-		"el": "\u03a0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1. \u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u00ab\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2\u00bb \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5."
+		"el": "\u03a0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1. \u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u00ab\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2\u00bb \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5.",
+		"ca": "Esteu a punt d'enviar un missatge. Premeu l'enlla\u00e7 d'enviar el missatge per continuar."
 	},
 	"debug_sending_message_send": {
 		"no": "Send melding",
@@ -590,7 +607,8 @@
 		"sr": "Po\u0161alji poruku",
 		"ro": "Trimite mesajul",
 		"ru": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435",
-		"el": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2"
+		"el": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2",
+		"ca": "Enviar missatge"
 	},
 	"debug_sending_message_msg_title": {
 		"no": "Melding",
@@ -623,7 +641,8 @@
 		"ro": "Mesaj",
 		"ru": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435",
 		"eu": "Mezua",
-		"el": "\u039c\u03ae\u03bd\u03c5\u03bc\u03b1"
+		"el": "\u039c\u03ae\u03bd\u03c5\u03bc\u03b1",
+		"ca": "Missatge"
 	},
 	"debug_sending_message_msg_text": {
 		"no": "Siden du er i debug modus kan du se innholdet i meldingene du sender.",
@@ -655,7 +674,8 @@
 		"ro": "\u00centruc\u00e2t sunte\u021bi \u00een modul depanare, ve\u021bi vedea con\u021binutul mesajului care va fi trimis:",
 		"ru": "\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.",
 		"eu": "Arazketa moduan egonez gero, bidaltzera zoazen mezuaren edukia ikusiko duzu: ",
-		"el": "\u0395\u03c0\u03b5\u03b9\u03b4\u03ae \u03b5\u03af\u03c3\u03c4\u03b5 \u03c3\u03b5 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd (debug), \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c0\u03bf\u03c5 \u03c3\u03c4\u03ad\u03bb\u03bd\u03b5\u03c4\u03b5:"
+		"el": "\u0395\u03c0\u03b5\u03b9\u03b4\u03ae \u03b5\u03af\u03c3\u03c4\u03b5 \u03c3\u03b5 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd (debug), \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c0\u03bf\u03c5 \u03c3\u03c4\u03ad\u03bb\u03bd\u03b5\u03c4\u03b5:",
+		"ca": "Mentre esteu en mode de depuraci\u00f3, podreu veure el contingut del missatge que envieu:"
 	},
 	"metaover_group_metadata.saml20-sp-remote": {
 		"no": "SAML 2.0 Tjenesteleverand\u00f8r (ekstern)",
@@ -688,7 +708,8 @@
 		"ro": "Furnizor de servicii SAML 2.0 (distant)",
 		"ru": "\u0421\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 SAML 2.0 (\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "SAML 2.0 Zerbitzu hornitzailea (Urrunekoa)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor de serveis SAML 2.0 (remot)"
 	},
 	"metaover_group_metadata.saml20-idp-hosted": {
 		"no": "SAML 2.0 Identitetsleverand\u00f8r (ekstern)",
@@ -721,7 +742,8 @@
 		"ro": "Furnizor de identitate SAML 2.0 (g\u0103zduit)",
 		"ru": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SAML 2.0 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "SAML 2.0 Identitate hornitzailea (Anfitrioia)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor d'identitat SAML 2.0 (allotjat)"
 	},
 	"metaover_group_metadata.saml20-idp-remote": {
 		"no": "SAML 2.0 Identitetsleverand\u00f8r (ekstern)",
@@ -754,7 +776,8 @@
 		"ro": "Furnizor de identitate SAML 2.0 (distant)",
 		"ru": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SAML 2.0 (\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "SAML 2.0 Identitate hornitzailea (Urrunekoa)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0 (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0 (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor d'identitat SAML 2.0 (remot)"
 	},
 	"metaover_group_metadata.shib13-sp-hosted": {
 		"no": "Shib 1.3 Tjenesteleverand\u00f8r (intern)",
@@ -787,7 +810,8 @@
 		"ro": "Furnizor de servicii Shib 1.3 (g\u0103zduit)",
 		"ru": "\u0421\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 Shib 1.3 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "Shib 1.3 Zerbitzu hornitzailea (Anfitrioia)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shib 1.3 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shib 1.3 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor de serveis Shib 1.3 (allotjat)"
 	},
 	"metaover_group_metadata.shib13-sp-remote": {
 		"no": "Shib 1.3 Tjenesteleverand\u00f8r (ekstern)",
@@ -820,7 +844,8 @@
 		"ro": "Furnizor de servicii Shib 1.3 (distant)",
 		"ru": "\u0421\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 Shib 1.3 (\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "Shib 1.3 Zerbitzu hornitzailea (Urrunekoa)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shib 1.3 (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shib 1.3 (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor de serveis Shib 1.3 (remot)"
 	},
 	"metaover_group_metadata.shib13-idp-hosted": {
 		"no": "Shib 1.3 Identitetsleverand\u00f8r (ekstern)",
@@ -853,7 +878,8 @@
 		"ro": "Furnizor de identitate Shib 1.3 (g\u0103zduit)",
 		"ru": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Shib 1.3 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "Shib 1.3 Identitate hornitzailea (Anfitrioia)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shib 1.3 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shib 1.3 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor d'identitat Shib 1.3 (allotjat)"
 	},
 	"metaover_group_metadata.shib13-idp-remote": {
 		"no": "Shib 1.3 Identitetsleverand\u00f8r (ekstern) ",
@@ -885,73 +911,8 @@
 		"sr": "Shib 1.3 Davalac Identiteta (udaljeni)",
 		"ro": "Furnizor de identitate Shib 1.3 (distant)",
 		"ru": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Shib 1.3 (\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
-		"eu": "Shib 1.3 Identitate hornitzailea (Urrunekoa)"
-	},
-	"metaover_group_metadata.wsfed-sp-hosted": {
-		"no": "WS-Federation tjenesteleverand\u00f8r (intern)",
-		"nn": "WS-Federation Service Provider (Hosted)",
-		"sv": "WS-Federation Service Provider (V\u00e4rd)",
-		"es": "Proveedor de Servicios WS-Federation (local)",
-		"nl": "WS-Federation Service Provider (Hosted)",
-		"sl": "WS-Fedration SP (Lokalni)",
-		"da": "WS-Federation tjenesteudbyder (hosted)",
-		"hr": "WS-Federation davatelj usluge (lokalni)",
-		"hu": "WS-Federation alkalmaz\u00e1sszolg\u00e1ltat\u00f3 (helyi)",
-		"pt-br": "WS-Federation Service Provider (Local)",
-		"pt": "Fornecedor de servi\u00e7o (SP) WS-Federation (Local)",
-		"pl": "WS-Federation Dostawca Serwisu (Lokalny)",
-		"cs": "WS-Federation Service Provider (Hosted - lok\u00e1ln\u00ed)",
-		"tr": "WS-Federasyon Servis Sa\u011flay\u0131c\u0131 (Bu sistemde sunulan)",
-		"de": "WS-Federation Service Provider (gehosted)",
-		"fr": "Fournisseur de service WS-federation local",
-		"it": "WS-Federation Service Provider (Hosted)",
-		"ja": "WS-Federation\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0(\u30db\u30b9\u30c8)",
-		"lt": "WS-Federacijos Paslaugos teik\u0117jas (vietinis)",
-		"zh-tw": "WS-Federation \u670d\u52d9\u63d0\u4f9b\u8005 (\u672c\u5730)",
-		"et": "WS-Federation teenusepakkuja (hostitud)",
-		"he": "\u05e1\u05e4\u05e7 \u05e9\u05d9\u05e8\u05d5\u05ea \u05de\u05e7\u05d5\u05de\u05d9 \u05de\u05e1\u05d5\u05d2 \u05d0\u05d9\u05d7\u05d5\u05d3-WS",
-		"zh": "WS-Federation \u670d\u52a1\u63d0\u4f9b\u8005\uff08\u672c\u5730\uff09",
-		"ar": "\u0645\u0642\u062f\u0645 \u062e\u062f\u0645\u0629 WS-\u0627\u0644\u0641\u062f\u0631\u0627\u0644\u064a\u0629 \u0627\u0644\u0645\u0633\u062a\u0636\u0627\u0641 ",
-		"lv": "WS-Federation servisa pieg\u0101d\u0101t\u0101js (host\u0113ts)",
-		"id": "Servide Provider WS-Federation (Hosted)",
-		"sr": "WS-Federation Davalac Servisa (lokalni)",
-		"ro": "Furnizor de servicii federa\u021bie WS (g\u0103zduit)",
-		"ru": "\u0421\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 WS-Federation (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
-		"eu": "WS-Federation Zerbitzu hornitzailea (Anfitrioia)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd WS-Federation (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)"
-	},
-	"metaover_group_metadata.wsfed-idp-remote": {
-		"no": "WS-Federation identitetsleverand\u00f8r (ekstern)",
-		"nn": "WS-Federation Identity Provider (Remote)",
-		"sv": "WS-Federation Service Provider (Fj\u00e4rr)",
-		"es": "Proveedor de Identidad WS-Federation (remoto)",
-		"nl": "WS-Federation Identity Provider (Remote)",
-		"sl": "WS-Federation Idp (Oddaljni)",
-		"da": "WS-Federation identitetsudbyder (remote)",
-		"hr": "WS-Federation autentifikacijski servis (udaljeni)",
-		"hu": "WS-Federation alkalmaz\u00e1sszolg\u00e1ltat\u00f3 (t\u00e1voli)",
-		"pt-br": "WS-Federation Identity Provider (Remoto)",
-		"pt": "Fornecedor de identidade (IdP) WS-Federation (Remoto)",
-		"pl": "WS-Federation Dostawca To\u017csamo\u015bci (Zdalny)",
-		"cs": "WS-Federation Identity Provider (Remote - vzd\u00e1len\u00fd)",
-		"tr": "WS-Federasyon Kimlik Sa\u011flay\u0131c\u0131 (Uzak sistemde sunulan)",
-		"de": "WS-Federation Identity Provider (entfernt)",
-		"fr": "Fournisseur d'identit\u00e9 Shib 1.3 distant",
-		"it": "WS-Federation Identity Provider (Remoto)",
-		"ja": "WS-Federation\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u30d7\u30ed\u30d0\u30a4\u30c0(\u30ea\u30e2\u30fc\u30c8)",
-		"lt": "WS-Federacijos Paslaugos teik\u0117jas (nutol\u0119s)",
-		"zh-tw": "WS-Federation \u9a57\u8b49\u63d0\u4f9b\u8005 (\u9060\u7aef)",
-		"et": "WS-Federation identiteedipakkuja (kaug)",
-		"he": "\u05e1\u05e4\u05e7 \u05d6\u05d4\u05d5\u05ea \u05de\u05e8\u05d5\u05d7\u05e7 \u05de\u05e1\u05d5\u05d2 \u05d0\u05d9\u05d7\u05d5\u05d3-WS",
-		"zh": "WS-Federation \u8eab\u4efd\u63d0\u4f9b\u8005\uff08\u8fdc\u7a0b\uff09",
-		"ar": "\u0645\u0642\u062f\u0645 \u062e\u062f\u0645\u0629 WS-\u0627\u0644\u0641\u062f\u0631\u0627\u0644\u064a\u0629 \u0627\u0644\u0628\u0639\u064a\u062f",
-		"lv": "WS-Federation servisa pieg\u0101d\u0101t\u0101js (att\u0101lin\u0101ts)",
-		"id": "Identity Provider WS-Federation (Remote)",
-		"sr": "WS-Federation Davalac Servisa (udaljeni)",
-		"ro": "Furnizor de servicii federa\u021bie WS (distant)",
-		"ru": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 WS-Federation (\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
-		"eu": "WS-Federation Identitate hornitzailea (Urrunekoa)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 WS-Federation (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)"
+		"eu": "Shib 1.3 Identitate hornitzailea (Urrunekoa)",
+		"ca": "Proveïdor d'identitat Shib 1.3 (remot)"
 	},
 	"metaconv_title": {
 		"no": "Metadata parser",
@@ -984,11 +945,13 @@
 		"ro": "Analizor de metadate",
 		"ru": "\u0421\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445",
 		"eu": "Metadatuak aztertu",
-		"el": "\u0391\u03bd\u03b1\u03bb\u03c5\u03c4\u03ae\u03c2 (parser) \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd"
+		"el": "\u0391\u03bd\u03b1\u03bb\u03c5\u03c4\u03ae\u03c2 (parser) \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
+		"ca": "Analitzador de metadades"
 	},
 	"metaconv_selectfile": {
 		"zh-tw": "\u6216\u9078\u64c7\u4e00\u500b\u6a94\u6848\uff1a",
-		"el": "\u03ae \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf"
+		"el": "\u03ae \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf",
+		"ca": "o seleccioneu un fitxer:"
 	},
 	"metaconv_xmlmetadata": {
 		"no": "XML metadata",
@@ -1021,7 +984,8 @@
 		"ro": "Metadate XML",
 		"ru": "XML \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435",
 		"eu": "XML metadatuak",
-		"el": "\u0391\u03bd\u03b1\u03bb\u03c5\u03c4\u03ae\u03c2 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd XML"
+		"el": "\u0391\u03bd\u03b1\u03bb\u03c5\u03c4\u03ae\u03c2 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd XML",
+		"ca": "Metadades XML"
 	},
 	"metaconv_parse": {
 		"no": "Pars",
@@ -1054,7 +1018,8 @@
 		"ro": "Analizeaz\u0103",
 		"ru": "\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437",
 		"eu": "Aztertu",
-		"el": "\u0391\u03bd\u03ac\u03bb\u03c5\u03c3\u03b7"
+		"el": "\u0391\u03bd\u03ac\u03bb\u03c5\u03c3\u03b7",
+		"ca": "Analitzar"
 	},
 	"metaconv_converted": {
 		"no": "Konvertert metadata",
@@ -1087,7 +1052,8 @@
 		"ro": "Metadate convertite",
 		"ru": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435",
 		"eu": "Bihurtutako metadatuak",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03b1\u03c0\u03ad\u03bd\u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03b1\u03c0\u03ad\u03bd\u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",
+		"ca": "Metadades convertides"
 	},
 	"metadata_saml20-sp": {
 		"no": "SAML 2.0 SP metadata",
@@ -1119,7 +1085,8 @@
 		"sr": "SAML 2.0 SP metapodaci",
 		"ro": "Metadate furnizor de servicii (SP) SAML 2.0",
 		"ru": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 SAML 2.0 SP",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0",
+		"ca": "Metadades SAML 2.0 SP"
 	},
 	"metadata_saml20-idp": {
 		"no": "SAML 2.0 IdP metadata",
@@ -1152,7 +1119,8 @@
 		"ro": "Metadate furnizor de identitate (IdP) SAML 2.0",
 		"ru": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SAML 2.0 IdP",
 		"eu": "SAML 2.0 IdP Metadatuak  ",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0",
+		"ca": "Metadades SAML 2.0 IdP"
 	},
 	"metadata_shib13-sp": {
 		"no": "Shib 1.3 SP metadata",
@@ -1185,7 +1153,8 @@
 		"ro": "Metadate furnizor de servicii (SP) Shib 1.3",
 		"ru": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 Shib 1.3 SP",
 		"eu": "Shib 1.3 SP Metadatuak  ",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shib 1.3"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shib 1.3",
+		"ca": "Metadades Shib 1.3 SP"
 	},
 	"metadata_shib13-idp": {
 		"no": "Shib 1.3 IdP metadata",
@@ -1218,7 +1187,8 @@
 		"ro": "Metadate furnizor de identitate (IdP) Shib 1.3",
 		"ru": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Shib 1.3 IdP",
 		"eu": "Shib 1.3 IdP Metadatuak  ",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shib 1.3"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shib 1.3",
+		"ca": "Metadades Shib 1.3 IdP"
 	},
 	"metadata_intro": {
 		"no": "Her er metadata som SimpleSAMLphp har generert for deg. Du m\u00e5 utveksle metadata med de partene du stoler p\u00e5 for \u00e5 sette opp en f\u00f8derasjon.",
@@ -1251,7 +1221,8 @@
 		"ro": "Acestea sunt metadate generate de SimpleSAMLphp. Metadatele pot fi trimise c\u0103tre parteneri de \u00eencredere pentru a configura o federa\u021bie de \u00eencredere.",
 		"ru": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0430\u0441 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SimpleSAMLphp. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0430\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438.",
 		"eu": "Hona hemen SimpleSAMLphp-ak zuretzat sortu dituen metadatuak. Metadatuen dokumentu hau konfidantzazko zure kideei bidal diezaiekezu federazio bat konfiguratzeko.",
-		"el": "\u0391\u03c5\u03c4\u03ac \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c0\u03b1\u03c1\u03b1\u03c7\u03b8\u03b5\u03af \u03b1\u03c0\u03cc \u03c4\u03bf \u0053\u0069\u006d\u0070\u006c\u0065\u0053\u0041\u004d\u004c\u0070\u0068\u0070 \u03b3\u03b9\u03b1 \u03b5\u03c3\u03ac\u03c2. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b5\u03bc\u03c0\u03b9\u03c3\u03c4\u03b5\u03cd\u03b5\u03c3\u03c4\u03b5 \u03c0\u03c1\u03bf\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03bf\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1."
+		"el": "\u0391\u03c5\u03c4\u03ac \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c0\u03b1\u03c1\u03b1\u03c7\u03b8\u03b5\u03af \u03b1\u03c0\u03cc \u03c4\u03bf \u0053\u0069\u006d\u0070\u006c\u0065\u0053\u0041\u004d\u004c\u0070\u0068\u0070 \u03b3\u03b9\u03b1 \u03b5\u03c3\u03ac\u03c2. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b5\u03bc\u03c0\u03b9\u03c3\u03c4\u03b5\u03cd\u03b5\u03c3\u03c4\u03b5 \u03c0\u03c1\u03bf\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03bf\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1.",
+		"ca": "Aqu\u00ed hi ha les metadades que SimpleSAMLphp ha generat per a vost\u00e8. Podeu enviar aquest document de metadades a clients/proveïdors de confian\u00e7a per configurar una federaci\u00f3 de confian\u00e7a."
 	},
 	"metadata_xmlurl": {
 		"no": "Du kan n\u00e5 <a href=\"%METAURL%\">metadata i XML-format p\u00e5 en dedikert URL<\/a>:",
@@ -1284,7 +1255,8 @@
 		"ro": "Pute\u021bi accesa <a href=\"%METAURL%\">metadatele xml de la un URL dedicat<\/a>:",
 		"ru": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435<a href=\"%METAURL%\"> \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c xml \u0444\u0430\u0439\u043b \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 URL<\/a>:",
 		"eu": "<a href=\"%METAURL%\">xml metadatuekin URL bat<\/a> eskura dezakezu:",
-		"el": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 <a href=\"%METAURL%\">\u03bb\u03ae\u03c8\u03b7\u03c2<\/a> \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd:"
+		"el": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 <a href=\"%METAURL%\">\u03bb\u03ae\u03c8\u03b7\u03c2<\/a> \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd:",
+		"ca": "Podeu <a href=\"%METAURL%\"> obtenir una URL amb les metadades en XML <\/a>:"
 	},
 	"metadata_simplesamlformat": {
 		"no": "I SimpleSAMLphp format - bruk denne dersom du benytter SimpleSAMLphp i den andre enden:",
@@ -1316,7 +1288,8 @@
 		"ro": "\u00cen format fi\u0219ier simplu SimpleSAMLphp - utiliza\u021bi aceast\u0103 variant\u0103 dac\u0103 \u00een cap\u0103tul cel\u0103lalt folosi\u021bi o entitate SimpleSAMLphp:",
 		"ru": "\u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e SimpleSAMLphp \u0444\u0430\u0439\u043b\u0430",
 		"eu": "SimpleSAMLphp formatuko fitxategi batean - beste muturrean SimpleSAMLphp entitate bat erabiltzen ariz gero, erabil ezazu aukera hau:",
-		"el": "\u03a3\u03b5 \u03bc\u03bf\u03c1\u03c6\u03ae \u03b1\u03c0\u03bb\u03bf\u03cd \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 SimpleSAMLphp - \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03bc\u03bf\u03c1\u03c6\u03ae \u03b1\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u0053\u0069\u006d\u0070\u006c\u0065\u0053\u0041\u004d\u004c\u0070\u0068\u0070 \u03c3\u03c4\u03b7\u03bd \u03ac\u03bb\u03bb\u03b7 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ac:"
+		"el": "\u03a3\u03b5 \u03bc\u03bf\u03c1\u03c6\u03ae \u03b1\u03c0\u03bb\u03bf\u03cd \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 SimpleSAMLphp - \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03bc\u03bf\u03c1\u03c6\u03ae \u03b1\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u0053\u0069\u006d\u0070\u006c\u0065\u0053\u0041\u004d\u004c\u0070\u0068\u0070 \u03c3\u03c4\u03b7\u03bd \u03ac\u03bb\u03bb\u03b7 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ac:",
+		"ca": "En un fitxer de format SimpleSAMLphp: utilitzeu aquesta opci\u00f3 si utilitzeu una entitat SimpleSAMLphp en l'altre extrem:"
 	},
 	"debug_sending_message_title": {
 		"no": "Sender melding",
@@ -1349,7 +1322,8 @@
 		"sr": "\u0160aljem poruku",
 		"ro": "Se trimite mesajul",
 		"ru": "\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f",
-		"el": "\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5"
+		"el": "\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",
+		"ca": "S'est\u00e0 enviant el missatge"
 	},
 	"debug_sending_message_text_button": {
 		"no": "Du er i ferd med \u00e5 sende en melding. Trykk knappen \u00abSend melding\u00bb for \u00e5 fortsette.",
@@ -1381,7 +1355,8 @@
 		"sr": "Kliknite na dugme \"Po\u0161alji poruku\" da biste poslali poruku.",
 		"ro": "Mesajul este preg\u0103tit pentru a fi trimis. Ap\u0103sa\u021bi butonul de trimitere pentru a continua.",
 		"ru": "\u0412\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f.",
-		"el": "\u03a0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1. \u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u00ab\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2\u00bb \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5."
+		"el": "\u03a0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1. \u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u00ab\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2\u00bb \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5.",
+		"ca": "Esteu a punt d'enviar un missatge. Premeu el bot\u00f3 d'enviar el missatge per continuar."
 	},
 	"debug_disable_debug_mode": {
 		"no": "Do kan skru av debug modus i den globale SimpleSAMLphp konfigurasjonsfila <tt>config\/config.php<\/tt>.",
@@ -1414,7 +1389,8 @@
 		"ro": "Se poate opri modul de depanare \u00een fi\u0219ierul de configurare SimpleSAMLphp <tt>config\/config.php<\/tt>.",
 		"ru": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 global SimpleSAMLphp -<tt>config\/config.php<\/tt>. ",
 		"eu": "Arazketa modua desaktibatu daiteke SimpleSAMLphp <tt>config\/config.php<\/tt> konfigurazio orokorreko fitxategian.",
-		"el": "\u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd (debug) \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03c4\u03bf\u03c5 SimpleSAMLphp <tt>config\/config.php<\/tt>."
+		"el": "\u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd (debug) \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03c4\u03bf\u03c5 SimpleSAMLphp <tt>config\/config.php<\/tt>.",
+		"ca": "Podeu desactivar el mode de depuraci\u00f3 al fitxer de configuraci\u00f3 global de SimpleSAMLphp <tt>config\/config.php<\/tt>."
 	},
 	"metaover_group_metadata.saml20-sp-hosted": {
 		"no": "SAML 2.0 tjenesteleverand\u00f8r (intern)",
@@ -1447,7 +1423,8 @@
 		"ro": "Furnizor de servicii SAML 2.0 (g\u0103zduit)",
 		"ru": "\u0421\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 SAML 2.0 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435)",
 		"eu": "SAML 2.0 Zerbitzu hornitzailea (Anfitrioia)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor de serveis SAML 2.0 (allotjat)"
 	},
 	"cfg_check_notices": {
 		"no": "Notiser",
@@ -1480,7 +1457,8 @@
 		"sr": "Napomene",
 		"ro": "Note\/Observa\u021bii",
 		"eu": "Oharrak",
-		"el": "\u0395\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2"
+		"el": "\u0395\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2",
+		"ca": "Avisos"
 	},
 	"metadata_cert": {
 		"nl": "Certificaten",
@@ -1508,7 +1486,8 @@
 		"no": "Sertifikater",
 		"eu": "Ziurtagiriak",
 		"zh-tw": "\u6191\u8b49",
-		"el": "\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac"
+		"el": "\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac",
+		"ca": "Certificats"
 	},
 	"metadata_cert_intro": {
 		"nl": "Download de X509-certificaten in PEM-formaat.",
@@ -1536,7 +1515,8 @@
 		"no": "Last ned X509-sertifikatene som PEM-filer.",
 		"eu": "X509 ziurtagiriak PEM formatuan deskargatu.",
 		"zh-tw": "\u4e0b\u8f09 PEM \u683c\u5f0f\u4e4b X.509 \u6191\u8b49\u6a94\u6848",
-		"el": "\u039b\u03ae\u03c8\u03b7 \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ce\u03bd X.509 \u03c3\u03b5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 PEM."
+		"el": "\u039b\u03ae\u03c8\u03b7 \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ce\u03bd X.509 \u03c3\u03b5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 PEM.",
+		"ca": "Baixeu els certificats X509 en format PEM."
 	},
 	"metaover_group_metadata.adfs-sp-remote": {
 		"es": "Proveedor de Servicio ADFS (remoto)",
@@ -1544,7 +1524,8 @@
 		"zh-tw": "ADFS \u670d\u52d9\u63d0\u4f9b\u8005 (\u9060\u7aef)",
 		"nl": "ADFS Service Provider (Remote)",
 		"da": "ADFS tjenesteudbyder (remote)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd ADFS (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd ADFS (\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor de serveis ADFS (remot)"
 	},
 	"metaover_group_metadata.adfs-idp-hosted": {
 		"es": "Proveedor de Identidad ADFS (local)",
@@ -1552,7 +1533,8 @@
 		"zh-tw": "ADFS \u9a57\u8b49\u63d0\u4f9b\u8005 (\u672c\u5730)",
 		"nl": "ADFS Identity Provider (Hosted)",
 		"da": "ADFS identitetsudbyder (hosted)",
-		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 ADFS (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)"
+		"el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 ADFS (\u03a6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c2)",
+		"ca": "Proveïdor de serveis ADFS (allotjat)"
 	},
 	"metadata_adfs-sp": {
 		"es": "Metadatos SP ADFS",
@@ -1560,7 +1542,8 @@
 		"zh-tw": "ADFS \u670d\u52d9\u63d0\u4f9b\u8005 Metadata",
 		"nl": "ADFS SP Metadata",
 		"da": "ADFS tjenesteudbyder metadata",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd ADFS"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd ADFS",
+		"ca": "Metadades ADFS SP"
 	},
 	"metadata_adfs-idp": {
 		"es": "Metadatos IdP ADFS",
@@ -1568,6 +1551,7 @@
 		"zh-tw": "ADFS \u9a57\u8b49\u63d0\u4f9b\u8005 Metadata",
 		"nl": "ADFS IdP Metadata",
 		"da": "ADFS identitetsudbyder metadata",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 ADFS"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 ADFS",
+		"ca": "Metadades ADFS IdP"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/attributes.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/attributes.translation.json
index e0f652fa74..13db03b4de 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/attributes.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/attributes.translation.json
@@ -33,11 +33,11 @@
 		"lv": "Pieder\u012bba",
 		"ro": "Afiliere",
 		"eu": "Afiliazioa",
-		"ca": "Afiliaci\u00f3",
 		"af": "Affiliasie",
 		"el": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u002f\u03b5\u03c2",
 		"xh": "Indima",
-		"zu": "Indima"
+		"zu": "Indima",
+		"ca": "Afiliació"
 	},
 	"attribute_title": {
 		"no": "Tittel",
@@ -72,11 +72,11 @@
 		"id": "Gelar",
 		"lv": "Amats",
 		"ro": "Titlu\/titulatur\u0103",
-		"ca": "Tractament",
 		"af": "Titel",
 		"el": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
 		"xh": "Isibizo",
-		"zu": "Isiqu"
+		"zu": "Isiqu",
+		"ca": "Tractament"
 	},
 	"attribute_uid": {
 		"no": "Bruker-ID",
@@ -112,11 +112,11 @@
 		"id": "User ID",
 		"lv": "Lietot\u0101ja ID",
 		"ro": "ID utilizator",
-		"ca": "Identificador d'usuari",
 		"af": "Gebruikers ID",
 		"el": "\u0391\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7",
 		"xh": "I-ID yomsebenzisi",
-		"zu": "I-ID yomsebenzisi"
+		"zu": "I-ID yomsebenzisi",
+		"ca": "Identificador d'usuari"
 	},
 	"attribute_sn": {
 		"no": "Etternavn",
@@ -152,11 +152,11 @@
 		"id": "Nama Keluaga",
 		"lv": "Uzv\u0101rds",
 		"ro": "Nume de familie",
-		"ca": "Cognoms",
 		"af": "Van",
 		"el": "\u0395\u03c0\u03ce\u03bd\u03c5\u03bc\u03bf",
 		"zu": "Isibongo",
-		"xh": "Ifani"
+		"xh": "Ifani",
+		"ca": "Cognoms"
 	},
 	"attribute_givenname": {
 		"no": "Fornavn",
@@ -192,11 +192,11 @@
 		"lv": "V\u0101rds",
 		"ro": "Prenume",
 		"eu": "Izena",
-		"ca": "Nom",
 		"af": "Voornaam",
 		"el": "\u038c\u03bd\u03bf\u03bc\u03b1",
 		"xh": "Igama elinikiweyo",
-		"zu": "Igama lokuzalwa"
+		"zu": "Igama lokuzalwa",
+		"ca": "Nom"
 	},
 	"attribute_cn": {
 		"no": "Fullt navn",
@@ -232,11 +232,11 @@
 		"lv": "V\u0101rds",
 		"ro": "Nume comun",
 		"eu": "Izen arrunta (CN)",
-		"ca": "Nom com\u00fa (CN)",
 		"af": "Algemene naam",
 		"el": "\u039a\u03bf\u03b9\u03bd\u03cc \u03cc\u03bd\u03bf\u03bc\u03b1 (CN)",
 		"zu": "Igama elivamile",
-		"xh": "Igama eliqhelekileyo"
+		"xh": "Igama eliqhelekileyo",
+		"ca": "Nom comú (CN)"
 	},
 	"attribute_mail": {
 		"no": "E-post",
@@ -272,11 +272,11 @@
 		"id": "Mail",
 		"lv": "Pasts",
 		"ro": "Mail",
-		"ca": "Correu electr\u00f2nic",
 		"af": "E-pos",
 		"el": "Email",
 		"zu": "Imeyili",
-		"xh": "Iposi"
+		"xh": "Iposi",
+		"ca": "Adreça de correu electrònic"
 	},
 	"attribute_mobile": {
 		"no": "Mobiltelefon",
@@ -312,11 +312,11 @@
 		"id": "Handphone",
 		"lv": "Mobilais telefons",
 		"ro": "Mobil",
-		"ca": "Tel\u00e8fon m\u00f2bil",
 		"af": "Selfoon",
 		"el": "\u039a\u03b9\u03bd\u03b7\u03c4\u03cc \u03c4\u03b7\u03bb\u03ad\u03c6\u03c9\u03bd\u03bf",
 		"zu": "Imobhayili",
-		"xh": "Imobhayili"
+		"xh": "Imobhayili",
+		"ca": "Telèfon mòbil"
 	},
 	"attribute_preferredlanguage": {
 		"no": "Foretrukket spr\u00e5k",
@@ -352,11 +352,11 @@
 		"lv": "V\u0113lam\u0101 valoda",
 		"ro": "Limba preferat\u0103",
 		"eu": "Hizkuntza lehenetsia",
-		"ca": "Idioma preferit",
 		"af": "Taal voorkeur",
 		"el": "\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ce\u03bc\u03b5\u03bd\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1",
 		"xh": "Ulwimi olukhethayo",
-		"zu": "Ulimi oluncanyelwayo"
+		"zu": "Ulimi oluncanyelwayo",
+		"ca": "Idioma preferit"
 	},
 	"attribute_noredupersonnin": {
 		"no": "F\u00f8dselsnummer",
@@ -392,11 +392,11 @@
 		"lv": "Publisko autorit\u0101\u0161u pie\u0161\u0137irtais identit\u0101tes numurs",
 		"ro": "Num\u0103r de identitate atribuit de autorit\u0103\u021bi publice",
 		"eu": "Gizarte-segurantzako zenbakia",
-		"ca": "N\u00famero de la Seguretat Social",
 		"af": "Identiteitsnommer",
 		"el": "\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b1\u03c0\u03cc \u03b4\u03b7\u03bc\u03cc\u03c3\u03b9\u03b1 \u03b1\u03c1\u03c7\u03ae",
 		"xh": "Inombolo yesazisi eyabelwe ngamagunya oluntu",
-		"zu": "Inombolo kamazisi eyabelwe amagunya omphakathi"
+		"zu": "Inombolo kamazisi eyabelwe amagunya omphakathi",
+		"ca": "Número de la Seguretat Social"
 	},
 	"attribute_schachomeorganization": {
 		"no": "Unik ID for organisasjon",
@@ -431,11 +431,11 @@
 		"sr": "Domen mati\u010dne institucije",
 		"ro": "Njumele de domeniu pentru institu\u021bia de origine",
 		"eu": "Jatorrizko erakundearen domeinu izena",
-		"ca": "Identificador \u00fanic de l'organitzaci\u00f3 d'origen",
 		"af": "Tuis Organisasie domein naam",
 		"el": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae\u03c2 (domain) \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"zu": "Igama lesizinda senhlangano yasekhaya",
-		"xh": "Igama ledomeyini yombutho wekhaya"
+		"xh": "Igama ledomeyini yombutho wekhaya",
+		"ca": "Identificador únic de l’organització principal"
 	},
 	"attribute_organisationname": {
 		"no": "Navn p\u00e5 organisasjon",
@@ -471,11 +471,11 @@
 		"id": "Organization name",
 		"lv": "Organiz\u0101cijas nosaukums",
 		"ro": "Denumirea institu\u021biei",
-		"ca": "Nom de l'organitzaci\u00f3",
 		"af": "Organisasie naam",
 		"el": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"xh": "Igama lombutho",
-		"zu": "Igama lenhlangano"
+		"zu": "Igama lenhlangano",
+		"ca": "Nom de l'organització"
 	},
 	"attribute_edupersonentitlement": {
 		"no": "Rettighet",
@@ -511,11 +511,11 @@
 		"id": "Hak mengenai layanan ini",
 		"ro": "Drepturi relativ la acest serviciu",
 		"eu": "Zerbitzuari dagokion eskubidea",
-		"ca": "Dret relatiu al servei",
 		"af": "Reg mbt. die diens",
 		"el": "\u0394\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1",
 		"zu": "Ilungelo eliphathelene nesevisi",
-		"xh": "Ilungelo ngokuphathelele inkonzo"
+		"xh": "Ilungelo ngokuphathelele inkonzo",
+		"ca": "Drets relatiu al servei"
 	},
 	"attribute_edupersonscopedaffiliation": {
 		"no": "Gruppetilh\u00f8righet",
@@ -551,11 +551,11 @@
 		"id": "Afiliasi di organisasi asal",
 		"ro": "Afiliere \u00een cadrul institu\u021biei de origine",
 		"eu": "Afiliazioa jatorrizko erakundean",
-		"ca": "Afiliaci\u00f3 a l'organitzaci\u00f3 d'origen",
 		"af": "Affiliasie by Tuis organisasie",
 		"el": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 \u03b1\u03bd\u03ac \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ae \u03c0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae (administrative domain)",
 		"zu": "Indima enhlanganweni yasekhaya",
-		"xh": "Indima kumbutho wasekhaya"
+		"xh": "Indima kumbutho wasekhaya",
+		"ca": "Afiliació a l’organització principal"
 	},
 	"attribute_edupersontargetedid": {
 		"no": "Persistent anonym ID",
@@ -590,14 +590,15 @@
 		"id": "Persistent pseudonymous ID",
 		"ro": "ID pseudonim persistent",
 		"eu": "Goitizen ID etengabea",
-		"ca": "Identificador pseud\u00f2nim persistent",
 		"af": "Aanhoudende anonieme ID",
 		"el": "\u0391\u03b4\u03b9\u03b1\u03c6\u03b1\u03bd\u03ad\u03c2 \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03bc\u03b1\u03ba\u03c1\u03ac\u03c2 \u03b4\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1\u03c2",
 		"zu": "Isibizo esingashintshi esiqondene nesevisi",
-		"xh": "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+		"xh": "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo",
+		"ca": "Identificació anònima persistent"
 	},
 	"attribute_pairwise_id": {
-		"de": "Service-spezifische pseudonyme ID bei der Heimorganisation"
+		"de": "Service-spezifische pseudonyme ID bei der Heimorganisation",
+		"ca": "Identificació aònima específica del servei a l'organització principal"
 	},
 	"attribute_edupersonprincipalname": {
 		"no": "Personlig ID hos organisasjonen",
@@ -633,27 +634,30 @@
 		"id": "Nama kepala pada organisasi asal",
 		"ro": "Numele de identificare a persoanei la institu\u021bia de origine (de forma nume_utilizator@domeniu.ro)",
 		"eu": "Jatorrizko erakundean pertsonak duen izen nagusia",
-		"ca": "Identificador \u00fanic de la persona a la seva organitzaci\u00f3 d'origen",
 		"af": "Persoonlike ID by tuis organisasie",
 		"el": "\u0391\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c3\u03c4\u03bf\u03bd \u03bf\u03b9\u03ba\u03b5\u03af\u03bf \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03cc",
 		"xh": "Igama elingundoqo lomntu kwinkampani yekhaya",
-		"zu": "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+		"zu": "Igama eliyinhloko lomuntu enhlanganweni yasekhaya",
+ 		"ca": "Identificador \u00fanic de la persona a l'organitzaci\u00f3 principal"
 	},
 	"attribute_edupersonuniqueid": {
 		"zh-tw": "\u500b\u4eba\u7121\u6cd5\u91cd\u65b0\u8a2d\u7f6e\uff0c\u65bc\u6240\u5c6c\u7d44\u7e54\u7684\u6c38\u4e45\u533f\u540d ID",
 		"el": "\u039c\u03cc\u03bd\u03b9\u03bc\u03bf, \u03b1\u03b4\u03b9\u03b1\u03c6\u03b1\u03bd\u03ad\u03c2 \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c3\u03c4\u03bf\u03bd \u03bf\u03b9\u03ba\u03b5\u03af\u03bf \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03cc",
 		"zu": "I-ID yesibizo ephikelelayo, engakwazi ukwabelwa kabusha yomuntu yenhlangano yasekhaya",
-		"xh": "I-ID yomntu enganakuphinda yabelwe, ebhalwe ngegama lobuxoki eqhubekayo kwinkampani yekhaya"
+		"xh": "I-ID yomntu enganakuphinda yabelwe, ebhalwe ngegama lobuxoki eqhubekayo kwinkampani yekhaya",
+		"ca": "Identificació anònima persistent i no reasignable de la persona a l'organització principal"
 	},
 	"attribute_subject_id": {
-		"de": "Pseudonyme ID bei der Heimorganisation"
+		"de": "Pseudonyme ID bei der Heimorganisation",
+		"ca": "Identificació pseudònima en l'organització principal"
 	},
 	"attribute_edupersonorcid": {
 		"zh-tw": "ORCID \u7814\u7a76\u8005\u8b58\u5225\u78bc",
 		"el": "\u0391\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03b5\u03c1\u03b5\u03c5\u03bd\u03b7\u03c4\u03ae ORCID",
 		"af": "ORCID identifiseerder",
 		"zu": "Isihlonzi se-ORCID",
-		"xh": "Isazisi se-ORCID"
+		"xh": "Isazisi se-ORCID",
+		"ca": "Identificador d'investigador ORCID"
 	},
 	"attribute_o": {
 		"no": "Navn p\u00e5 organisasjon",
@@ -688,11 +692,11 @@
 		"lv": "Organiz\u0101cijas nosaukums",
 		"id": "Nama organisasi",
 		"ro": "Denumirea institu\u021biei",
-		"ca": "Nom de l'organitzaci\u00f3",
 		"af": "Organisasie naam",
 		"el": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"zu": "Igama lenhlangano",
-		"xh": "Igama lombutho"
+		"xh": "Igama lombutho",
+		"ca": "Nom de l'organització"
 	},
 	"attribute_dc": {
 		"no": "Navneledd (DC)",
@@ -727,11 +731,11 @@
 		"id": "Domain component(DC)",
 		"ro": "Componenta de domeniu (DC)",
 		"eu": "Domeinuaren osagaia (DC)",
-		"ca": "Component de domini (DC)",
 		"af": "Domein komponent (DC)",
 		"el": "\u03a3\u03c5\u03c3\u03c4\u03b1\u03c4\u03b9\u03ba\u03cc \u03a4\u03bf\u03bc\u03ad\u03b1 (DC)",
 		"zu": "Ingxenye yesizinda (I-DC)",
-		"xh": "Ikhomponenti yedomeyin (DC)"
+		"xh": "Ikhomponenti yedomeyin (DC)",
+		"ca": "Component de domini (DC)"
 	},
 	"attribute_displayname": {
 		"no": "Navn som normalt vises",
@@ -766,11 +770,11 @@
 		"sr": "Ime za prikaz",
 		"ro": "Nume afi\u0219at",
 		"eu": "Bistaratzeko izena",
-		"ca": "Nom de visualitzaci\u00f3",
 		"af": "Vertoon naam",
 		"el": "\u0395\u03bc\u03c6\u03b1\u03bd\u03b9\u03b6\u03cc\u03bc\u03b5\u03bd\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1",
 		"zu": "Igama lesibonisi",
-		"xh": "Igama lomboniso"
+		"xh": "Igama lomboniso",
+		"ca": "Nom a mostrar"
 	},
 	"attribute_facsimiletelephonenumber": {
 		"no": "Faksnummer",
@@ -805,11 +809,11 @@
 		"lv": "Fakss",
 		"id": "No Fax",
 		"ro": "Num\u0103r de fax",
-		"ca": "N\u00famero de fax",
 		"af": "Faksnommer",
 		"el": "Fax",
 		"zu": "Inombolo yefeksi",
-		"xh": "Inombolo yefeksi"
+		"xh": "Inombolo yefeksi",
+		"ca": "Número de fax"
 	},
 	"attribute_homephone": {
 		"no": "Hjemmetelefon",
@@ -844,11 +848,11 @@
 		"lv": "Telefons",
 		"id": "Telepon rumah",
 		"ro": "Telefon acas\u0103",
-		"ca": "Tel\u00e8fon del domicili",
 		"af": "Tuistelefoon",
 		"el": "\u03a4\u03b7\u03bb\u03ad\u03c6\u03c9\u03bd\u03bf \u03bf\u03b9\u03ba\u03af\u03b1\u03c2",
 		"xh": "Umnxeba wasekhaya",
-		"zu": "Ucingo lwasekhaya"
+		"zu": "Ucingo lwasekhaya",
+		"ca": "Telèfon fix particular"
 	},
 	"attribute_homepostaladdress": {
 		"no": "Postadresse hjemme",
@@ -883,11 +887,11 @@
 		"id": "Alamat pos rumah",
 		"ro": "Adresa po\u0219tal\u0103 de acas\u0103",
 		"eu": "Etxeko helbidea",
-		"ca": "Adre\u00e7a del domicili",
 		"af": "Tuis posadres",
 		"el": "\u03a4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b9\u03ba\u03ae \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03bf\u03b9\u03ba\u03af\u03b1\u03c2",
 		"zu": "Ikheli leposi lasekhaya",
-		"xh": "Idilesi yeposi yasekhaya"
+		"xh": "Idilesi yeposi yasekhaya",
+		"ca": "Adreça particular"
 	},
 	"attribute_jpegphoto": {
 		"no": "JPEG-foto",
@@ -922,11 +926,11 @@
 		"lv": "JPEG fotogr\u0101fija",
 		"id": "Foto JPEG",
 		"ro": "Fotografie JPEG",
-		"ca": "Fotografia en JPEG",
 		"af": "JPEG Foto",
 		"el": "\u03a6\u03c9\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1 \u03c3\u03b5 \u03bc\u03bf\u03c1\u03c6\u03ae JPEG",
 		"xh": "Ifoto ye-JPEG",
-		"zu": "Isithombe se-JPEG"
+		"zu": "Isithombe se-JPEG",
+		"ca": "Fotografia en JPEG"
 	},
 	"attribute_l": {
 		"no": "Sted",
@@ -961,11 +965,11 @@
 		"id": "Lokalitas",
 		"ro": "Localitate",
 		"eu": "Herria",
-		"ca": "Localitat",
 		"af": "Ligging",
 		"el": "\u03a4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1",
 		"zu": "Indawo",
-		"xh": "Indawo"
+		"xh": "Indawo",
+		"ca": "Localitat"
 	},
 	"attribute_labeleduri": {
 		"no": "URI med valgfri tilleggskommentar",
@@ -1000,11 +1004,11 @@
 		"id": "Berlabel URL",
 		"ro": "URI etichetat",
 		"eu": "URI etiketatua",
-		"ca": "URI etiquetat",
 		"af": "URI",
 		"el": "\u0395\u03c0\u03b9\u03c3\u03b7\u03bc\u03b1\u03c3\u03bc\u03ad\u03bd\u03b1 URI",
 		"xh": "I-URI eneleyibheli",
-		"zu": "I-URI Enelebula"
+		"zu": "I-URI Enelebula",
+		"ca": "URI etiquetat"
 	},
 	"attribute_ou": {
 		"no": "Organisasjonsenhet",
@@ -1039,11 +1043,11 @@
 		"id": "Organizational unit",
 		"ro": "Unitate organiza\u021bional\u0103",
 		"eu": "Antolamendu-unitatea",
-		"ca": "Unitat organitzativa",
 		"af": "Organisasie eenheid",
 		"el": "\u039f\u03c1\u03b3\u03b1\u03bd\u03c9\u03c4\u03b9\u03ba\u03ae \u03bc\u03bf\u03bd\u03ac\u03b4\u03b1",
 		"zu": "Iyunithi yenhlangano",
-		"xh": "Iyunithi yombutho"
+		"xh": "Iyunithi yombutho",
+		"ca": "Unitat organitzativa"
 	},
 	"attribute_postaladdress": {
 		"no": "Postadresse",
@@ -1078,11 +1082,11 @@
 		"lv": "Pasta adrese",
 		"id": "Alamat pos",
 		"ro": "Adresa po\u0219tal\u0103",
-		"ca": "Adre\u00e7a postal",
 		"af": "Posadres",
 		"el": "\u03a4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b9\u03ba\u03ae \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",
 		"xh": "Idilesi yeposi",
-		"zu": "Ikheli leposi"
+		"zu": "Ikheli leposi",
+		"ca": "Adreça postal"
 	},
 	"attribute_postalcode": {
 		"no": "Postnummer",
@@ -1117,11 +1121,11 @@
 		"lv": "Pasta kods",
 		"id": "Kode pos",
 		"ro": "Cod po\u0219tal",
-		"ca": "Codi postal",
 		"af": "Poskode",
 		"el": "\u03a4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b9\u03ba\u03cc\u03c2 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2",
 		"zu": "Ikhodi yeposi",
-		"xh": "Ikhowudi yeposi"
+		"xh": "Ikhowudi yeposi",
+		"ca": "Codi Postal"
 	},
 	"attribute_postofficebox": {
 		"no": "Postboks",
@@ -1156,11 +1160,11 @@
 		"lv": "Pasta kaste",
 		"id": "PO Box",
 		"ro": "Cutie po\u0219tal\u0103",
-		"ca": "Apartat de correus",
 		"af": "Posbus",
 		"el": "\u03a4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b9\u03ba\u03ae \u03b8\u03c5\u03c1\u03af\u03b4\u03b1",
 		"zu": "Ibhokisi lehhovisi leposi",
-		"xh": "Ibhokisi yaseposini"
+		"xh": "Ibhokisi yaseposini",
+		"ca": "Apartat de correus"
 	},
 	"attribute_street": {
 		"no": "Gate",
@@ -1195,11 +1199,11 @@
 		"lv": "Iela",
 		"id": "Jalan",
 		"ro": "Strada",
-		"ca": "Carrer",
 		"af": "Straat",
 		"el": "\u039f\u03b4\u03cc\u03c2",
 		"xh": "Istrato",
-		"zu": "Umgwaqo"
+		"zu": "Umgwaqo",
+		"ca": "Carrer"
 	},
 	"attribute_telephonenumber": {
 		"no": "Telefon",
@@ -1234,11 +1238,11 @@
 		"lv": "Telefons",
 		"id": "No Telepon",
 		"ro": "Num\u0103r de telefon",
-		"ca": "N\u00famero de tel\u00e8fon",
 		"af": "Telefoon nommer",
 		"el": "\u03a4\u03b7\u03bb\u03ad\u03c6\u03c9\u03bd\u03bf",
 		"zu": "Inombolo yocingo",
-		"xh": "Inombolo yomnxeba"
+		"xh": "Inombolo yomnxeba",
+		"ca": "Número de telèfon"
 	},
 	"attribute_eduorghomepageuri": {
 		"no": "Organisasjonens hjemmeside",
@@ -1273,11 +1277,11 @@
 		"id": "Homepage organisasi",
 		"ro": "Pagina web a institutu\u021biei",
 		"eu": "Erakundearen hasiera-orria",
-		"ca": "P\u00e0gina inicial de l'organitzaci\u00f3",
 		"af": "Organisasie tuisblad",
 		"el": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b9\u03ba\u03ae\u03c2 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2 \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"xh": "Ikhasi lekhaya Lenkampani",
-		"zu": "Ikhasi lasekhaya lenhlangano"
+		"zu": "Ikhasi lasekhaya lenhlangano",
+		"ca": "Pàgina principal de l'organització"
 	},
 	"attribute_eduorglegalname": {
 		"no": "Foretaksnavn",
@@ -1312,11 +1316,11 @@
 		"id": "Nama legal Organisasi",
 		"ro": "Denumirea legal\u0103 a institu\u021biei",
 		"eu": "Erakundearen izen legala",
-		"ca": "Nom legal de l'organitzaci\u00f3",
 		"af": "Wettige naam",
 		"el": "\u0395\u03c0\u03af\u03c3\u03b7\u03bc\u03b7 \u03b5\u03c0\u03c9\u03bd\u03c5\u03bc\u03af\u03b1 \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"zu": "Igama elisemthethweni lenhlangano",
-		"xh": "Igama elisemthethweni lenkampani"
+		"xh": "Igama elisemthethweni lenkampani",
+		"ca": "Nom legal de l'organització"
 	},
 	"attribute_edupersonnickname": {
 		"no": "Kallenavn",
@@ -1351,11 +1355,11 @@
 		"lv": "Niks",
 		"id": "Nama panggilan",
 		"ro": "Porecl\u0103",
-		"ca": "\u00c0lies",
 		"af": "Bynaam",
 		"el": "\u03a8\u03b5\u03c5\u03b4\u03ce\u03bd\u03c5\u03bc\u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7",
 		"xh": "Isiteketiso",
-		"zu": "Isidlaliso"
+		"zu": "Isidlaliso",
+		"ca": "Sobrenom"
 	},
 	"attribute_edupersonorgdn": {
 		"no": "Entydig navn (DN) for brukerens vertsorganisasjon",
@@ -1390,11 +1394,11 @@
 		"id": "Distinguished name (DN) of person's home organization",
 		"ro": "Nume distincitv (DN) al institu\u021bie de origine a persoanei",
 		"eu": "Pertsonaren jatorrizko erakundearen izen osatua (DN)",
-		"ca": "Nom distingit (DN) de l'organitzaci\u00f3 d'origen",
 		"af": "Kenmerkende naam (DN) van die person se tuisorganisasie",
 		"el": "\u0394\u03b9\u03b1\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 (DN) \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"xh": "Igama elahlukileyo (DN) lenkampani yekhaya yomntu",
-		"zu": "Igama elihloniphekile (I-DN) lenhlangano yasekhaya yomuntu"
+		"zu": "Igama elihloniphekile (I-DN) lenhlangano yasekhaya yomuntu",
+		"ca": "Nom distingit (DN) de l'organització principal de la persona"
 	},
 	"attribute_edupersonorgunitdn": {
 		"no": "Entydig navn (DN) for brukerens organisasjonsenhet",
@@ -1429,11 +1433,11 @@
 		"id": "Distinguished name (DN) of the person's home organizational unit",
 		"ro": "Nume distincitv (DN) al unit\u0103\u021bii organiza\u021bionale de origine a persoanei",
 		"eu": "Pertsonaren jatorrizko erakundeko antolamendu-unitatearen izen osatua (DN)",
-		"ca": "Nom distingit (DN) de la Unitat Organitzativa (OU) de l'organitzaci\u00f3 d'origen",
 		"af": "Kenmerkende naam (DN) van die persoon se organisatoriese afdeling",
 		"el": "\u0394\u03b9\u03b1\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 (DN) \u03bf\u03b9\u03ba\u03b5\u03af\u03b1\u03c2 \u03bf\u03c1\u03b3\u03b1\u03bd\u03c9\u03c4\u03b9\u03ba\u03ae\u03c2 \u03bc\u03bf\u03bd\u03ac\u03b4\u03b1\u03c2",
 		"xh": "Igama elahlukileyo (DN) leyunithi yenkampani yekhaya yomntu",
-		"zu": "Igama elihloniphekile (I-DN) leyunithi yenhlangano yasekhaya yomuntu"
+		"zu": "Igama elihloniphekile (I-DN) leyunithi yenhlangano yasekhaya yomuntu",
+		"ca": "Nom distingit (DN) de la unitat organitzativa (OU) de l'organització principal de la persona"
 	},
 	"attribute_edupersonprimaryaffiliation": {
 		"no": "Prim\u00e6r tilknytning til organisasjon",
@@ -1468,11 +1472,11 @@
 		"id": "Afiliasi utama",
 		"ro": "Afiliere primar\u0103",
 		"eu": "Lehen afiliazioa",
-		"ca": "Afiliaci\u00f3 prim\u00e0ria",
 		"af": "Prim\u00eare affiliasie",
 		"el": "\u039a\u03cd\u03c1\u03b9\u03b1 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1",
 		"xh": "Indima eyintloko",
-		"zu": "Indima eyinhloko"
+		"zu": "Indima eyinhloko",
+		"ca": "Afiliació primària"
 	},
 	"attribute_noreduorgnin": {
 		"no": "Organisasjonsnummer",
@@ -1507,11 +1511,11 @@
 		"et": "Registrikood",
 		"ro": "Num\u0103r organiza\u021bional",
 		"eu": "Erakundearen zenbakia",
-		"ca": "N\u00famero de l'organitzaci\u00f3",
 		"af": "Organisasie nommer",
 		"el": "\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd",
 		"zu": "Inombolo yenhlangano",
-		"xh": "Inombolo yenkampani"
+		"xh": "Inombolo yenkampani",
+		"ca": "Número de l’organització"
 	},
 	"attribute_noredupersonbirthdate": {
 		"no": "F\u00f8dselsdato",
@@ -1546,11 +1550,11 @@
 		"lv": "Dzim\u0161anas datums",
 		"id": "Tanggal lahir",
 		"ro": "Data na\u0219terii",
-		"ca": "Data de naixement",
 		"af": "Geboorte datum",
 		"el": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03b3\u03ad\u03bd\u03bd\u03b7\u03c3\u03b7\u03c2",
 		"zu": "Usuku lokuzalwa",
-		"xh": "Umhla wokuzalwa"
+		"xh": "Umhla wokuzalwa",
+		"ca": "Data de naixement"
 	},
 	"attribute_noredupersonlin": {
 		"no": "Lokalt ID-nummer",
@@ -1585,11 +1589,11 @@
 		"id": "Nomor identitas lokal",
 		"ro": "Num\u0103r de identificare local",
 		"eu": "Tokiko zenbaki identifikatzailea",
-		"ca": "N\u00famero d'identificaci\u00f3 local",
 		"af": "Identiteitsnommer",
 		"el": "\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
 		"zu": "Inombolo kamazisi yasendaweni",
-		"xh": "Inombolo yesazisi yasekuhlaleni"
+		"xh": "Inombolo yesazisi yasekuhlaleni",
+		"ca": "Número d'identitat local"
 	},
 	"attribute_manager": {
 		"no": "Overordnet",
@@ -1624,11 +1628,11 @@
 		"id": "Manager",
 		"ro": "Director\/Manager",
 		"eu": "Kudeatzailea",
-		"ca": "Gestor",
 		"af": "Bestuurder",
 		"el": "\u0394\u03b9\u03b1\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 (DN) \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae",
 		"xh": "Umanejala",
-		"zu": "Umphathi"
+		"zu": "Umphathi",
+		"ca": "Gestor"
 	},
 	"attribute_userpassword": {
 		"no": "Hash av brukerens passord",
@@ -1662,11 +1666,11 @@
 		"id": "Hash password user",
 		"ro": "Parola utilizatorului \u00een format <i>hash<\/i>",
 		"eu": "Erabiltzailearen pasahitzaren hash-a",
-		"ca": "Clau o contrasenya i m\u00e8tode d'encriptaci\u00f3 usat",
 		"af": "Gebruikerswagwoord",
 		"el": "\u039a\u03c1\u03c5\u03c0\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03b7\u03bc\u03ad\u03bd\u03bf\u03c2 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2",
 		"xh": "Iheshi yephaswedi yomsebenzisi",
-		"zu": "Uheshi wephasiwedi yomsebenzisi"
+		"zu": "Uheshi wephasiwedi yomsebenzisi",
+		"ca": "Clau o contrasenya i mètode d'encriptació utilitzat"
 	},
 	"attribute_edupersonprimaryorgunitdn": {
 		"no": "Entydig navn for organisasjonsenheten som brukeren prim\u00e6rt er tilknyttet",
@@ -1698,11 +1702,11 @@
 		"id": "Distinguished name (DN) of person's primary Organizational Unit",
 		"ro": "Nume distincitv (DN) al unit\u0103\u021bii organiza\u021bionale primare a persoanei",
 		"eu": "Pertsonaren antolamendu-unitatearen izen osatua (DN)",
-		"ca": "Nom distingit (DN) de l'entrada del directori que representa l'identificador",
 		"af": "Kenmerkende naam (DN) van die persoon se prim\u00eare organisatoriese afdeling",
 		"el": "\u0394\u03b9\u03b1\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 (DN) \u03ba\u03cd\u03c1\u03b9\u03b1\u03c2 \u03bf\u03c1\u03b3\u03b1\u03bd\u03c9\u03c4\u03b9\u03ba\u03ae\u03c2 \u03bc\u03bf\u03bd\u03ac\u03b4\u03b1\u03c2",
 		"xh": "Igama elahlukileyo (DN) leYunithi Yenkampani yokuqala yomntu",
-		"zu": "Igama elihloniphekile (I-DN) Leyunithi Yenhlangano eyinhloko yomuntu"
+		"zu": "Igama elihloniphekile (I-DN) Leyunithi Yenhlangano eyinhloko yomuntu",
+		"ca": "Nom distingit (DN) de l'entrada del directori que representa l'identificador"
 	},
 	"attribute_schacuserprivateattribute": {
 		"no": "Private informasjonselement",
@@ -1734,12 +1738,12 @@
 		"id": "Elemen-elemen informasi personal",
 		"ro": "Informa\u021bii private",
 		"eu": "Informazio pribatuaren elementuak",
-		"ca": "Elements d'informaci\u00f3 privada",
 		"fi": "Yksil\u00f6iv\u00e4t tunnisteet",
 		"af": "Private informasie elemente",
 		"el": "\u0391\u03c0\u03cc\u03c1\u03c1\u03b7\u03c4\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b9\u03ba\u03ac \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1",
 		"zu": "Izingxenye zolwazi oluyimfihlo",
-		"xh": "Iimpawu zenkcazelo yangasese"
+		"xh": "Iimpawu zenkcazelo yangasese",
+		"ca": "Elements d'informació privada"
 	},
 	"attribute_noredupersonlegalname": {
 		"no": "Folkeregistrert navn",
@@ -1769,12 +1773,12 @@
 		"cs": "Pr\u00e1vn\u00ed jm\u00e9no",
 		"ro": "Nume legal",
 		"eu": "Izen legala",
-		"ca": "Nom legal",
 		"fi": "Virallinen nimi",
 		"af": "Wettige naam",
 		"el": "\u0395\u03c0\u03af\u03c3\u03b7\u03bc\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1",
 		"xh": "Igama elisemthethweni",
-		"zu": "Igama elisemthethweni"
+		"zu": "Igama elisemthethweni",
+		"ca": "Nom legal"
 	},
 	"attribute_edupersonassurance": {
 		"no": "Tillitsniv\u00e5 for autentisering",
@@ -1802,11 +1806,11 @@
 		"cs": "Poskytovatel identifika\u010dn\u00edho profilu",
 		"ro": "Profilul de asigurare a identit\u0103\u021bii",
 		"eu": "Bermearen profilaren identifikatzailea",
-		"ca": "Identificador del perfil de garantia",
 		"af": "Identiteitsversekerings profiel",
 		"el": "\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03bf \u03b1\u03be\u03b9\u03bf\u03c0\u03b9\u03c3\u03c4\u03af\u03b1\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
 		"zu": "Iphrofayela yokuqinisekisa umazisi",
-		"xh": "Iprofayile yokuqinisekisa isazisi"
+		"xh": "Iprofayile yokuqinisekisa isazisi",
+		"ca": "Identificador del perfil de garantia"
 	},
 	"attribute_ismemberof": {
 		"es": "Membres\u00eda a grupos",
@@ -1818,6 +1822,7 @@
 		"af": "Groeplidmaatskap",
 		"el": "\u03a3\u03c5\u03bc\u03bc\u03b5\u03c4\u03bf\u03c7\u03ae \u03c3\u03b5 \u03bf\u03bc\u03ac\u03b4\u03b5\u03c2",
 		"xh": "Ubulungu beqela",
-		"zu": "Ubulungu beqembu"
+		"zu": "Ubulungu beqembu",
+		"ca": "Pertinença al grup"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/disco.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/disco.translation.json
index 9f17c1a3e4..f65d7650de 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/disco.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/disco.translation.json
@@ -34,7 +34,8 @@
 		"af": "Kies jou identiteits verskaffer",
 		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03c6\u03bf\u03c1\u03ad\u03b1",
 		"xh": "Khetha umboneleli wesazisi wakho",
-		"zu": "Khetha umhlinzeki wakho kamazisi"
+		"zu": "Khetha umhlinzeki wakho kamazisi",
+		"ca": "Seleccioneu el vostre proveïdor d'identitat"
 	},
 	"selectidp_full": {
 		"no": "Vennligst velg hvilken identitetsleverand\u00f8r du vil bruke for \u00e5 logge inn:",
@@ -71,7 +72,8 @@
 		"af": "Kies asb. jou identiteits verskaffer waar jy wil verifieer:",
 		"el": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03bf\u03b9\u03ba\u03b5\u03af\u03bf \u03c6\u03bf\u03c1\u03ad\u03b1 \u03c0\u03bf\u03c5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9 \u03c4\u03b7\u03bd \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03ac \u03c3\u03b1\u03c2",
 		"zu": "Sicela ukhethe umhlinzeki kamazisi lapho ofuna ukuqinisekisa khona:",
-		"xh": "Nceda ukhethe umboneleli wesazisi apho ufuna ukungqinisisa:"
+		"xh": "Nceda ukhethe umboneleli wesazisi apho ufuna ukungqinisisa:",
+		"ca": "Seleccioneu el proveïdor d’identitat on vulgueu autenticar:"
 	},
 	"select": {
 		"no": "Velg",
@@ -108,7 +110,8 @@
 		"af": "Kies",
 		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae",
 		"zu": "Khetha",
-		"xh": "Khetha"
+		"xh": "Khetha",
+		"ca": "Seleccioneu"
 	},
 	"remember": {
 		"no": "Husk mitt valg",
@@ -145,7 +148,8 @@
 		"af": "Onthou my keuse",
 		"el": "\u039d\u03b1 \u03b8\u03c5\u03bc\u03ac\u03c3\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bc\u03bf\u03cd",
 		"zu": "Khumbula ukukhetha kwami",
-		"xh": "Khumbula ukhetho lwam"
+		"xh": "Khumbula ukhetho lwam",
+		"ca": "Recorda la meva elecció"
 	},
 	"icon_prefered_idp": {
 		"no": "[Foretrukket valg]",
@@ -182,7 +186,8 @@
 		"af": "[Verkies]",
 		"el": "[\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae]",
 		"xh": "[Ukhetho olukhethwayo]",
-		"zu": "[Ukukhetha okuncanyelwayo]"
+		"zu": "[Ukukhetha okuncanyelwayo]",
+		"ca": "[Opció preferida]"
 	},
 	"previous_auth": {
 		"no": "Du har tidligere valg \u00e5 autentisere deg hos",
@@ -218,7 +223,8 @@
 		"af": "Jy het voorheen gekies om te verifieer deur:",
 		"el": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03c6\u03bf\u03c1\u03ad\u03b1:",
 		"zu": "Ngaphambilini ukhethe ukuqinisekisa kokuthi",
-		"xh": "Kwixesha elidlulileyo ukhethe ukungqinisisa ngo-"
+		"xh": "Kwixesha elidlulileyo ukhethe ukungqinisisa ngo-",
+		"ca": "Abans heu escollit autenticar-vos a"
 	},
 	"login_at": {
 		"no": "Logg inn hos",
@@ -254,6 +260,7 @@
 		"af": "Meld aan by",
 		"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u0040",
 		"zu": "Ngena kokuthi",
-		"xh": "Ungeno ngo-"
+		"xh": "Ungeno ngo-",
+		"ca": "Inicieu sessió a"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/errors.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/errors.translation.json
index dafc78c764..62377c73f1 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/errors.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/errors.translation.json
@@ -35,7 +35,8 @@
 		"af": "SimpleSAMLphp-fout",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c4\u03bf\u03c5 SimpleSAMLphp",
 		"zu": "Iphutha le-SimpleSAMLphp",
-		"xh": "Impazamo ye-SimpleSAMLphp"
+		"xh": "Impazamo ye-SimpleSAMLphp",
+		"ca": "Error de SimpleSAMLphp"
 	},
 	"report_trackid": {
 		"no": "Hvis vil rapportere denne feilen, send ogs\u00e5 med dette sporingsnummeret. Det gj\u00f8r det enklere for systemadministratorene \u00e5 finne ut hva som gikk galt:",
@@ -73,7 +74,8 @@
 		"af": "Waneer jy die fout rapporteer, verskaf asb. ook die 'tracking'\/verwysings nommer wat dit moontlik maak vir die sisteem administrateur om jou sessie in die logs op te spoor:",
 		"el": "\u0391\u03bd \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u002c \u03c0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bc\u03c0\u03b5\u03c1\u03b9\u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c3\u03b1\u03c2 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03c0\u03c1\u03bf\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03bd\u03b1 \u03b4\u03b9\u03b5\u03c5\u03ba\u03bf\u03bb\u03cd\u03bd\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03ba\u03b1\u03b9 \u03b5\u03c0\u03af\u03bb\u03c5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2:",
 		"zu": "Uma ubika leli phutha, sicela futhi ubike le nombolo yokulandelela eyenza kube nokwenzeka ukuthola iseshini yakho kumalogi atholakalayo kumlawuli wesistimu:",
-		"xh": "Ukuba ngaba uchaza le mpazamo, nceda kananjalo uchaze le nombolo yolandelelo eyenza kube lula ukufumana iseshoni yakho kwiincwadi ezifumaneka kumlawuli wesistim:"
+		"xh": "Ukuba ngaba uchaza le mpazamo, nceda kananjalo uchaze le nombolo yolandelelo eyenza kube lula ukufumana iseshoni yakho kwiincwadi ezifumaneka kumlawuli wesistim:",
+		"ca": "Si informeu d’aquest error, notifiqueu també aquest número de seguiment que permet localitzar la vostra sessió als registres disponibles per a l’administrador del sistema:"
 	},
 	"debuginfo_header": {
 		"no": "Detaljer for feils\u00f8king",
@@ -111,7 +113,8 @@
 		"af": "Ontleed informasie",
 		"el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd",
 		"xh": "Inkcazelo yokulungisa",
-		"zu": "Ulwazi lokususwa kwephutha"
+		"zu": "Ulwazi lokususwa kwephutha",
+		"ca": "Informació de depuració"
 	},
 	"debuginfo_text": {
 		"no": "Detaljene nedenfor kan v\u00e6re av interesse for administratoren \/ brukerst\u00f8tte:",
@@ -149,7 +152,8 @@
 		"af": "Die onderstaande informasie mag van hulp wees vir die stelsel administrateur \/ hulplyn.",
 		"el": "\u039f\u03b9 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b4\u03b9\u03b5\u03c5\u03ba\u03bf\u03bb\u03cd\u03bd\u03bf\u03c5\u03bd \u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03bf\u03cd \u03ba\u03b1\u03b9 \u03b5\u03c0\u03af\u03bb\u03c5\u03c3\u03b7\u03c2 \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd.",
 		"xh": "Inkcazelo yokulungisa engezantsi isenokuba ibangela umdla kumlawuli / idesika yoncedo:",
-		"zu": "Ulwazi lokususwa kwephutha olungezansi lungase lukhange kumlawuli / ideski losizo:"
+		"zu": "Ulwazi lokususwa kwephutha olungezansi lungase lukhange kumlawuli / ideski losizo:",
+		"ca": "La informació de depuració següent pot ser d’interès per l’administrador \/ centre d'atenció a l'usuari:"
 	},
 	"report_header": {
 		"no": "Rapporter feil",
@@ -187,7 +191,8 @@
 		"af": "Rapporteer foute",
 		"el": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03bf\u03c2",
 		"zu": "Amaphutha ombiko",
-		"xh": "Chaza iimpazamo"
+		"xh": "Chaza iimpazamo",
+		"ca": "Informeu de l’error"
 	},
 	"report_text": {
 		"no": "Hvis du \u00f8nsker at brukerst\u00f8tte skal kunne kontakte deg igjen i forbindelse med denne feilen, m\u00e5 du oppgi e-postadressen din nedenfor:",
@@ -225,7 +230,8 @@
 		"af": "Voeg opsioneel jou epos adres in vir die administrateurs om jou te kontak vir meer inligting m.b.t jou probleem:",
 		"el": "\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03ac\u002c \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b7\u03bb\u03b5\u03ba\u03c4\u03c1\u03bf\u03bd\u03b9\u03ba\u03bf\u03cd \u03c4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b5\u03af\u03bf\u03c5 \u03c3\u03b1\u03c2 \u03ce\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03af\u03bc\u03b1\u03c3\u03c4\u03b5 \u03c3\u03b5 \u03b8\u03ad\u03c3\u03b7 \u03bd\u03b1 \u03ad\u03c1\u03b8\u03bf\u03c5\u03bc\u03b5 \u03c3\u03b5 \u03b5\u03c0\u03b1\u03c6\u03ae \u03bc\u03b1\u03b6\u03af \u03c3\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b1\u03b9\u03c4\u03ad\u03c1\u03c9 \u03b5\u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf \u03b8\u03ad\u03bc\u03b1 \u03c3\u03b1\u03c2:",
 		"xh": "Unokhetho lokuthumela idilesi yeimeyile yakho, ukuze abalawuli bakwazi ukukuqhagamshela ukuba banemibuzo engakumbi malunga nomba wakho:",
-		"zu": "Faka ngokuzithandela ikheli lakho le-imeyili, ukuze abalawuli bakwazi ukukuthinta ngemibuzo eyengeziwe mayelana nenkinga yakho:"
+		"zu": "Faka ngokuzithandela ikheli lakho le-imeyili, ukuze abalawuli bakwazi ukukuthinta ngemibuzo eyengeziwe mayelana nenkinga yakho:",
+		"ca": "Opcionalment, introduïu la vostra adreça de correu electrònic, per a que els administradors puguin contactar amb vosaltres per obtenir més detalls del problema:"
 	},
 	"report_email": {
 		"no": "E-postadresse:",
@@ -264,7 +270,8 @@
 		"af": "Epos adres:",
 		"el": "Email:",
 		"xh": "Idilesi ye-imeyile:",
-		"zu": "Ikheli le-imeyili:"
+		"zu": "Ikheli le-imeyili:",
+		"ca": "Adreça de correu electrònic:"
 	},
 	"report_explain": {
 		"no": "Forklar hva du gjorde da feilen oppsto...",
@@ -302,7 +309,8 @@
 		"af": "Verduidelik wat jy gedoen het toe jy die probleem ervaar...",
 		"el": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03ac\u03c8\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03ad\u03c2 \u03c3\u03b1\u03c2 \u03cc\u03c4\u03b1\u03bd \u03c3\u03c5\u03bd\u03ad\u03b2\u03b7 \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1...",
 		"xh": "Cacisa ukuba wenze ntoni xa bekusenzeka le mpazamo...",
-		"zu": "Chaza ukuthi yini oyenzile ngenkathi kuvela leli phutha..."
+		"zu": "Chaza ukuthi yini oyenzile ngenkathi kuvela leli phutha...",
+		"ca": "Expliqueu què heu fet quan es va produir aquest error..."
 	},
 	"report_submit": {
 		"no": "Send feilrapport",
@@ -340,7 +348,8 @@
 		"af": "Stuur die fout verslag",
 		"el": "\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2",
 		"zu": "Thumela umbiko wephutha",
-		"xh": "Thumela ingxelo yempazamo"
+		"xh": "Thumela ingxelo yempazamo",
+		"ca": "Envia informe d'error"
 	},
 	"howto_header": {
 		"no": "Hvordan f\u00e5 hjelp",
@@ -378,7 +387,8 @@
 		"af": "Hoe om hulp te verkry",
 		"el": "\u03a0\u03ce\u03c2 \u03bd\u03b1 \u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1",
 		"zu": "Indlela yokuthola usizo",
-		"xh": "Indlela yokufumana uncedo"
+		"xh": "Indlela yokufumana uncedo",
+		"ca": "Com obtenir ajuda"
 	},
 	"howto_text": {
 		"no": "Denne feilen skyldes sannsynligvis feil i oppsettet av SimpleSAMLphp eller den er en f\u00f8lge av en uforutsett hendelse. Kontakt administratoren av denne tjenesten og rapporter s\u00e5 mye som mulig ang\u00e5ende feilen.",
@@ -416,7 +426,8 @@
 		"af": "Die fout is moontlik te danke aan onverwagte gedrag of weens inkorrekte instellings in SimpleSAMLphp. Kontak die administrateur in beheer van die aanmeld diens en stuur die bostaande fout boodskap aan.",
 		"el": "\u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c0\u03b9\u03b8\u03b1\u03bd\u03cc\u03c4\u03b1\u03c4\u03b1 \u03bf\u03c6\u03b5\u03af\u03bb\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b1 \u03b1\u03c0\u03c1\u03bf\u03c3\u03b4\u03cc\u03ba\u03b7\u03c4\u03b7 \u03c3\u03c5\u03bc\u03c0\u03b5\u03c1\u03b9\u03c6\u03bf\u03c1\u03ac \u03ae \u03b5\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03b7 \u03c1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 SimpleSAMLphp. \u0395\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae \u03b1\u03c5\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2 \u03c3\u03c5\u03bc\u03c0\u03b5\u03c1\u03b9\u03bb\u03b1\u03bc\u03b2\u03ac\u03bd\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03bf\u03c2.",
 		"zu": "Leli phutha kungenzeka ukuthi libangelwa indlela yokuziphatha engalindelwe noma umiso olungafanele lwe-SimpleSAMLphp. Thinta umlawuli wale sevisi yokungena, bese umthumela umlayezo wephutha ongenhla.",
-		"xh": "Le mpazamo kusenokwenzeka ingenxa yendlela yokwenza engalindelekanga okanye ulungiselelo olungachanekanga lwe-SimpleSAMLphp. Qhagamshelana nomlawuli wale nkonzo yokungena, uze umthumele umyalezo wempazamo ongentla."
+		"xh": "Le mpazamo kusenokwenzeka ingenxa yendlela yokwenza engalindelekanga okanye ulungiselelo olungachanekanga lwe-SimpleSAMLphp. Qhagamshelana nomlawuli wale nkonzo yokungena, uze umthumele umyalezo wempazamo ongentla.",
+		"ca": "Segurament aquest error es deu a un comportament inesperat o a una configuració incorrecta de SimpleSAMLphp. Poseu-vos en contacte amb l’administrador d’aquest servei i envieu-li el missatge d’error anterior."
 	},
 	"title_CREATEREQUEST": {
 		"no": "Feil i laging av foresp\u00f8rselen",
@@ -454,7 +465,8 @@
 		"af": "Fout met skepping van nuwe versoek",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2",
 		"xh": "Impazamo nokuyila isicelo",
-		"zu": "Iphutha lokwakha isicelo"
+		"zu": "Iphutha lokwakha isicelo",
+		"ca": "S'ha produït un error en crear la sol·licitud"
 	},
 	"descr_CREATEREQUEST": {
 		"no": "En feil oppstod da SAML-foresp\u00f8rselen skulle lages.",
@@ -492,7 +504,8 @@
 		"af": "Daar was 'n fout met die skepping van die SAML versoek.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2 SAML.",
 		"xh": "Kwenzeke impazamo xa kuzanywa ukuyilwa isicelo se-SAML.",
-		"zu": "Kuvele iphutha ngenkathi izama ukwakha isicelo se-SAML."
+		"zu": "Kuvele iphutha ngenkathi izama ukwakha isicelo se-SAML.",
+		"ca": "S'ha produït un error en intentar crear la sol·licitud SAML."
 	},
 	"title_DISCOPARAMS": {
 		"no": "Ugyldig foresp\u00f8rsel til SAML 2.0 Discovery-tjenesten",
@@ -530,7 +543,8 @@
 		"af": "Toegangsfout by die ontdekkings diens",
 		"el": "\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03bf \u03b1\u03af\u03c4\u03b7\u03bc\u03b1 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03b1\u03bd\u03b5\u03cd\u03c1\u03b5\u03c3\u03b7\u03c2 \u03c0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
 		"zu": "Isicelo esingalungile sesevisi yokuthola",
-		"xh": "Isicelo esibi kwinkonzo yofumaniso"
+		"xh": "Isicelo esibi kwinkonzo yofumaniso",
+		"ca": "Sol·licitud incorrecta pel servei de descoberta"
 	},
 	"descr_DISCOPARAMS": {
 		"no": "Parametere sendt til discovery-tjenesten var ikke i korrekt format.",
@@ -568,7 +582,8 @@
 		"af": "Die gestuurde parameters na die ontdekkings diens was not volgens die korrekte spesifikasies nie.",
 		"el": "\u039f\u03b9 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\u03b9 \u03c0\u03bf\u03c5 \u03c3\u03c4\u03ac\u03bb\u03b8\u03b7\u03ba\u03b1\u03bd \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03b1\u03bd\u03b5\u03cd\u03c1\u03b5\u03c3\u03b7\u03c2 \u03c0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03ae\u03c4\u03b1\u03bd \u03b5\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03b5\u03c2.",
 		"xh": "Iipharamitha ezithunyelwe kwinkonzo yofumaniso azihambelani neenkcukacha.",
-		"zu": "Amapharamitha athunyelwe kusevisi yokuthola abengavumelani nezici."
+		"zu": "Amapharamitha athunyelwe kusevisi yokuthola abengavumelani nezici.",
+		"ca": "Els paràmetres enviats al servei de descoberta no s'ajusten a les especificacions."
 	},
 	"title_GENERATEAUTHNRESPONSE": {
 		"no": "Fikk ikke svart p\u00e5 autentiserings-foresp\u00f8rsel",
@@ -606,7 +621,8 @@
 		"af": "Kon nie 'n verifikasie versoek skep nie",
 		"el": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03cc\u03ba\u03c1\u03b9\u03c3\u03b7\u03c2 \u03c3\u03c4\u03bf \u03b1\u03af\u03c4\u03b7\u03bc\u03b1 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
 		"zu": "Ayikwazanga ukwakha impendulo yokuqinisekisa",
-		"xh": "Ayikwazanga ukuyila impendulo yongqinisiso"
+		"xh": "Ayikwazanga ukuyila impendulo yongqinisiso",
+		"ca": "No s’ha pogut crear la resposta d’autenticació"
 	},
 	"descr_GENERATEAUTHNRESPONSE": {
 		"no": "En feil oppsto da innloggingstjenesten pr\u00f8vde \u00e5 lage et svar p\u00e5 autentiserings-foresp\u00f8rselen.",
@@ -644,7 +660,8 @@
 		"af": "Daar was 'n fout tydens die verifikasie skepping deur die Identiteits Verskaffer.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03cc\u03ba\u03c1\u03b9\u03c3\u03b7\u03c2 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2.",
 		"zu": "Ngenkathi lo mhlinzeki kamazisi ezama ukwakha impendulo yokuqinisekisa, kuvele iphutha.",
-		"xh": "Xa lo mboneleli wesazisi ezama ukuyila impendulo yongqinisiso, kwenzeke impazamo."
+		"xh": "Xa lo mboneleli wesazisi ezama ukuyila impendulo yongqinisiso, kwenzeke impazamo.",
+		"ca": "Quan el proveïdor d’identitat ha intentat crear una resposta d’autenticació, s’ha produït un error."
 	},
 	"title_LDAPERROR": {
 		"no": "LDAP-feil",
@@ -682,7 +699,8 @@
 		"af": "LDAP Fout",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 LDAP",
 		"xh": "Impazamo ye-LDAP",
-		"zu": "Iphutha le-LDAP"
+		"zu": "Iphutha le-LDAP",
+		"ca": "Error LDAP"
 	},
 	"descr_LDAPERROR": {
 		"no": "LDAP er brukerkatalogen, og n\u00e5r du fors\u00f8ker \u00e5 logge inn pr\u00f8ver vi \u00e5 kontakten en LDAP-katalog. Da vi fors\u00f8kte det denne gangen, oppsto en feil.",
@@ -720,7 +738,8 @@
 		"af": "LDAP is die gebruikers databasis en waneer jy probeer inteken moet ons die LDAP databasis kontak. Daar was 'n fout toe ons die slag probeer het.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd (LDAP).",
 		"xh": "I-LDAP ngumvimba wengcombolo yomsebenzisi, yaye xa uzame ukungena, kufuneka siqhagamshele uvimba wengcombolo we-LDAP. Kwenzeke impazamo xa besiyizama.",
-		"zu": "I-LDAP iyidathabheyisi yomsebenzisi, futhi lapho uzama ukungena, sidinga ukuthinta idathabheyisi ye-LDAP. Kuvele iphutha ngesikhathi siyizama ngalesi sikhathi."
+		"zu": "I-LDAP iyidathabheyisi yomsebenzisi, futhi lapho uzama ukungena, sidinga ukuthinta idathabheyisi ye-LDAP. Kuvele iphutha ngesikhathi siyizama ngalesi sikhathi.",
+		"ca": "LDAP és la base de dades d'usuaris i, quan intenteu iniciar la sessió, necessitem connectar amb una base de dades LDAP. S'ha produït un error quan hem provat d'accedir-hi."
 	},
 	"title_LOGOUTREQUEST": {
 		"no": "Feil i behandling av logout-foresp\u00f8rselen",
@@ -758,7 +777,8 @@
 		"af": "Fout met die verwerking van die Afmeldings Versoek",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03b1\u03c3\u03af\u03b1 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
 		"xh": "Impazamo iprosesa iSicelo Sokuphuma",
-		"zu": "Iphutha lokucubungula Isicelo Sokuphuma"
+		"zu": "Iphutha lokucubungula Isicelo Sokuphuma",
+		"ca": "S'ha produït un error en processar la sol·licitud de desconnexió"
 	},
 	"descr_LOGOUTREQUEST": {
 		"no": "En feil oppsto i behandlingen av logout-foresp\u00f8rselen.",
@@ -796,7 +816,8 @@
 		"af": "Daar was 'n probleem tydens die verwerking van die Afmelding  Versoek",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03b1\u03c3\u03c4\u03ae\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2.",
 		"zu": "Kuvele iphutha ngenkathi izama ukucubungula Isicelo Sokuphuma.",
-		"xh": "Kwenzeke impazamo ngoxa kuproseswa isiCelo Sokuphuma."
+		"xh": "Kwenzeke impazamo ngoxa kuproseswa isiCelo Sokuphuma.",
+		"ca": "S'ha produït un error en intentar processar la sol·licitud de desconnexió."
 	},
 	"title_METADATA": {
 		"no": "Feil ved lasting av metadata",
@@ -834,7 +855,8 @@
 		"af": "Fout met die laai van die metadata",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
 		"zu": "Iphutha lokulayisha imethadatha",
-		"xh": "Impazamo ilayisha imetadata"
+		"xh": "Impazamo ilayisha imetadata",
+		"ca": "S'ha produït un error en carregar les metadades"
 	},
 	"descr_METADATA": {
 		"no": "Det er en feil i oppsettet for din SimpleSAMLphp-installasjon. Hvis du er administrator for tjenesten, b\u00f8r du kontrollere at metadata er satt opp riktig.",
@@ -872,7 +894,8 @@
 		"af": "Daar is fout met jou SimplSAMLphp installasie. Indien jy die administrateur is van di\u00e9 diens moet jy verseker dat jou metadata konfigurasie korrek is.",
 		"el": "\u03a5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03c3\u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 SimpleSAMLphp. \u0395\u03ac\u03bd \u03b5\u03af\u03c3\u03c4\u03b5 \u03bf \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2 \u03b1\u03c5\u03c4\u03ae\u03c2, \u03b2\u03b5\u03b2\u03b1\u03b9\u03c9\u03b8\u03b5\u03af\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c1\u03c5\u03b8\u03bc\u03b9\u03c3\u03c4\u03b5\u03af \u03c3\u03c9\u03c3\u03c4\u03ac.",
 		"xh": "Kukho ulungiselelo olungachanekanga oluthile lofakelo lwakho lwe-SimpleSAMLphp. Ukuba ngaba ungumlawuli wale nkonzo, ufanele uqinisekise ulungiselelo lwakho  lweempawu-ngcaciso zefayile lusetwe ngokuchanekileyo.",
-		"zu": "Kukhona umiso olungafanele kukufaka kwakho kwe-SimpleSAMLphp. Uma ungumlawuli wale sevisi, kufanele wenze isiqiniseko sokuthi umiso lwakho lwemethadatha lumiswe ngendlela efanele."
+		"zu": "Kukhona umiso olungafanele kukufaka kwakho kwe-SimpleSAMLphp. Uma ungumlawuli wale sevisi, kufanele wenze isiqiniseko sokuthi umiso lwakho lwemethadatha lumiswe ngendlela efanele.",
+		"ca": "Hi ha alguna configuració incorrecta a la vostra instal·lació de SimpleSAMLphp. Si sou l’administrador d’aquest servei, heu d’assegurar-vos que la configuració de les vostres metadades s’ha realitzat correctament."
 	},
 	"title_NOACCESS": {
 		"no": "Ingen tilgang",
@@ -910,7 +933,8 @@
 		"af": "Geen toegang",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7",
 		"zu": "Akukho ukufinyelela",
-		"xh": "Akukho fikelelo"
+		"xh": "Akukho fikelelo",
+		"ca": "Sense accès"
 	},
 	"descr_NOACCESS": {
 		"no": "Dette endepunktet er ikke aktivert. Sjekk aktiveringsopsjonene i ditt SimpleSAMLphp-oppsett.",
@@ -948,7 +972,8 @@
 		"af": "Die eindpunt is nie beskikbaar nie. Gaan die staat opsies in jou opset van SimpleSAMLphp na.",
 		"el": "\u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03b5\u03bb\u03b9\u03ba\u03cc \u03c3\u03b7\u03bc\u03b5\u03af\u03bf \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 (endpoint) \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf. \u0395\u03ac\u03bd \u03b5\u03af\u03c3\u03c4\u03b5 \u03bf \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2, \u03b5\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 SimpleSAMLphp.",
 		"xh": "Le ndawo yokuphela ayenziwanga yasebenza. Jonga ukhetho lokwenza isebenze kulungiselelo lwakho lwe-SimpleSAMLphp.",
-		"zu": "Lesi siphetho asivunyelwe. Hlola izinketho zokuvumela kumiso lwakho lwe-SimpleSAMLphp."
+		"zu": "Lesi siphetho asivunyelwe. Hlola izinketho zokuvumela kumiso lwakho lwe-SimpleSAMLphp.",
+		"ca": "Aquest punt final no està habilitat. Comproveu les opcions d’habilitació en la configuració de SimpleSAMLphp."
 	},
 	"title_NORELAYSTATE": {
 		"no": "Spesifikasjon av RelayState mangler",
@@ -986,7 +1011,8 @@
 		"af": "Geen aflos staat('RelayState')",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 'RelayState'",
 		"zu": "Ayikho I-RelayState",
-		"xh": "Akukho RelayState"
+		"xh": "Akukho RelayState",
+		"ca": "Sense RelayState"
 	},
 	"descr_NORELAYSTATE": {
 		"no": "Kilden til denne foresp\u00f8rselen har ikke angitt noen RelayState-parameter som angir hvor vi skal fortsette etterp\u00e5.",
@@ -1024,7 +1050,8 @@
 		"af": "Die inisieerder van hierdie versoek het nie 'n aflos staat('RelayState') parameter wat aandui waarheen om volgende te gaan nie.",
 		"el": "\u0397 \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf\u03c2 'RelayState' \u03c4\u03bf\u03c5 \u03c0\u03c1\u03c9\u03c4\u03bf\u03ba\u03cc\u03bb\u03bb\u03bf\u03c5 SAML \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 \u03ae \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03ad\u03b3\u03ba\u03c5\u03c1\u03b7 \u03bc\u03b5 \u03b1\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03bd \u03c0\u03cc\u03c1\u03bf \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd0.",
 		"xh": "Umqalisi wesi sicelo akanikelanga ngepharamitha ye-RelayState apho kufanele kuyiwe khona.",
-		"zu": "Umqalisi walesi sicelo akazange ahlinzeke ngepharamitha ye-RelayState ebonisa ukuthi kufanele uye kuphi ngokulandelayo."
+		"zu": "Umqalisi walesi sicelo akazange ahlinzeke ngepharamitha ye-RelayState ebonisa ukuthi kufanele uye kuphi ngokulandelayo.",
+		"ca": "L’iniciador d’aquesta sol·licitud no ha proporcionat un paràmetre de RelayState que indiqui on seguirà."
 	},
 	"title_PROCESSASSERTION": {
 		"no": "Feil i behandling av svar fra innloggingstjenesten",
@@ -1062,7 +1089,8 @@
 		"af": "Fout in die Identiteits Verskaffer(IdP) versoek",
 		"el": "\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03b7 \u03b1\u03c0\u03cc\u03ba\u03c1\u03b9\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
 		"xh": "Impazamo iprosesa impendulo esuka kuMboneleli Wesazisi",
-		"zu": "Iphutha lokucubungula impendulo esuka Kumhlinzeki Kamazisi"
+		"zu": "Iphutha lokucubungula impendulo esuka Kumhlinzeki Kamazisi",
+		"ca": "S'ha produït un error en processar la resposta del proveïdor d’identitat"
 	},
 	"descr_PROCESSASSERTION": {
 		"no": "Svaret mottatt fra innloggingstjenesten kan ikke aksepteres.",
@@ -1100,7 +1128,8 @@
 		"af": "Die antwoord vanaf die Indentiteits Verskaffer is nie aanvaar nie.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c4\u03b7\u03c2 \u03b1\u03c0\u03ac\u03bd\u03c4\u03b7\u03c3\u03b7\u03c2 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2.",
 		"zu": "Asizange samukele impendulo ethunyelwe ukusuka Kumhlinzeki Kamazisi.",
-		"xh": "Asiyamkelanga impendulo ethunyelwe ukusuka kuMboneleli Wesazisi."
+		"xh": "Asiyamkelanga impendulo ethunyelwe ukusuka kuMboneleli Wesazisi.",
+		"ca": "La resposta enviada pel proveïdor d’identitat no ha estat acceptada."
 	},
 	"title_PROCESSAUTHNREQUEST": {
 		"no": "Feil ved behandling av foresp\u00f8rsel fra SP",
@@ -1138,7 +1167,8 @@
 		"af": "Fout in Diens Verskaffer versoek proses",
 		"el": "\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03bf \u03b1\u03af\u03c4\u03b7\u03bc\u03b1 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd",
 		"xh": "Impazamo iprosesa isicelo esisuka kuMboneleli Wenkonzo",
-		"zu": "Iphutha lokucubungula isicelo esisuka Kumhlinzeki Wesevisi"
+		"zu": "Iphutha lokucubungula isicelo esisuka Kumhlinzeki Wesevisi",
+		"ca": "S'ha produït un error en processar la sol·licitud del proveïdor de serveis"
 	},
 	"descr_PROCESSAUTHNREQUEST": {
 		"no": "Innloggingstjenesten mottok en autentiserings-foresp\u00f8rsel fra en tjeneste, men en feil oppsto i behandling av foresp\u00f8rselen.",
@@ -1176,7 +1206,8 @@
 		"af": "Die Identiteits Verskaffer het 'n Verifikasie Versoek ontvang vanaf 'n Diens Verskaffer maar 'n fout het voorgekom tydens die verwerking van die versoek.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c0\u03bf\u03c5 \u03ad\u03bb\u03b1\u03b2\u03b5 \u03bf \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd.",
 		"zu": "Lo Mhlinzeki Kamazisi uthole Isicelo Sokuqinisekisa ukusuka Kumhlinzeki Wesevisi, kodw,a kuvele iphutha ngenkathi ezama ukucubungula isicelo.",
-		"xh": "Lo Mboneleli Wesazisi ufumene Isicelo Songqinisiso esisuka kuMboneleli Wenkonzo, kodwa kwenzeke impazamo xa kuzanywa ukuprosesa isicelo."
+		"xh": "Lo Mboneleli Wesazisi ufumene Isicelo Songqinisiso esisuka kuMboneleli Wenkonzo, kodwa kwenzeke impazamo xa kuzanywa ukuprosesa isicelo.",
+		"ca": "Aquest proveïdor d’identitat ha rebut una sol·licitud d’autenticació d’un proveïdor de serveis, però s’ha produït un error en intentar processar la sol·licitud."
 	},
 	"title_SLOSERVICEPARAMS": {
 		"no": "Ingen SAML-melding angitt",
@@ -1214,7 +1245,8 @@
 		"af": "Geen SAML boodskap gevind nie",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03c0\u03b1\u03c6\u03ae SingleLogoutService",
 		"zu": "Awukho umlayezo we-SAML onikeziwe",
-		"xh": "Akukho myalezo we-SAML unikelweyo"
+		"xh": "Akukho myalezo we-SAML unikelweyo",
+		"ca": "No s’ha proporcionat cap missatge SAML"
 	},
 	"descr_SLOSERVICEPARAMS": {
 		"no": "Du brukte SingleLogoutService-grensesnittet uten \u00e5 angi enten en SAML LogoutRequest eller en LogoutResponse.",
@@ -1252,7 +1284,8 @@
 		"af": "Jy het toegang verkry na die SingleLogoutService koppelvlak('interface'), maar het geen SAML LogoutRequest of LogoutResponse gestuur nie.",
 		"el": "\u039a\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03ae \u03c3\u03b1\u03c2 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03c0\u03b1\u03c6\u03ae SingleLogoutService \u03c0\u03b1\u03c1\u03b1\u03bb\u03b5\u03af\u03c8\u03b1\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bc\u03c0\u03b5\u03c1\u03b9\u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1 LogoutRequest \u03ae LogoutResponse \u03c4\u03bf\u03c5 \u03c0\u03c1\u03c9\u03c4\u03bf\u03ba\u03cc\u03bb\u03bb\u03bf\u03c5 SAML. \u03a3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03b5\u03bb\u03b9\u03ba\u03cc \u03c3\u03b7\u03bc\u03b5\u03af\u03bf (endpoint) \u03b4\u03b5\u03bd \u03c0\u03c1\u03bf\u03bf\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b2\u03ac\u03c3\u03b9\u03bc\u03bf.",
 		"zu": "Ufinyelele ukusebenzisana kwe-SingleLogoutService, kodwa awuzange uhlinzeke nge-SAML LogoutRequest noma i-LogoutResponse. Sicela uphawule ukuthi isiphetho asihloselwe ukufinyelelwa ngokuqondile.",
-		"xh": "Ufikelele i-intafeyisi ye-SingleLogoutService, kodwa awukhange unikele i-SAML LogoutRequest okanye i-LogoutResponse. Nceda uqaphele ukuba le ndawo yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo."
+		"xh": "Ufikelele i-intafeyisi ye-SingleLogoutService, kodwa awukhange unikele i-SAML LogoutRequest okanye i-LogoutResponse. Nceda uqaphele ukuba le ndawo yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo.",
+		"ca": "Heu accedit a la interfície de SingleLogoutService, però no heu proporcionat un missatge SAML de LogoutRequest ni LogoutResponse. Tingueu en compte que en aquest punt no s'hi pot accedir directament."
 	},
 	"title_ACSPARAMS": {
 		"no": "Ingen SAML-respons angitt",
@@ -1290,7 +1323,8 @@
 		"af": "Geen SAML versoek gevind nie",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03c0\u03b1\u03c6\u03ae AssertionConsumerService",
 		"zu": "Ayikho impendulo ye-SAML enikeziwe",
-		"xh": "Akukho mpendulo ye-SAML inikelweyo"
+		"xh": "Akukho mpendulo ye-SAML inikelweyo",
+		"ca": "No s’ha proporcionat cap resposta de SAML"
 	},
 	"descr_ACSPARAMS": {
 		"no": "Du brukte AssertionConsumerService-grensesnittet uten \u00e5 angi en SAML AuthenticationResponse.",
@@ -1328,27 +1362,32 @@
 		"af": "Jy het aansoek gedoen vir toegang na die Assertion Consumer Service koppelvlak, maar geen SAML Verifikasie Versoek is saam gestuur nie.",
 		"el": "\u039a\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03ae \u03c3\u03b1\u03c2 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03c0\u03b1\u03c6\u03ae AssertionConsumerService  \u03c0\u03b1\u03c1\u03b1\u03bb\u03b5\u03af\u03c8\u03b1\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bc\u03c0\u03b5\u03c1\u03b9\u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03b1\u03c0\u03ac\u03bd\u03c4\u03b7\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03af\u03c4\u03b7\u03bc\u03b1 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03c9\u03c4\u03bf\u03ba\u03cc\u03bb\u03bb\u03bf\u03c5 SAML. \u03a3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03b5\u03bb\u03b9\u03ba\u03cc \u03c3\u03b7\u03bc\u03b5\u03af\u03bf (endpoint) \u03b4\u03b5\u03bd \u03c0\u03c1\u03bf\u03bf\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b2\u03ac\u03c3\u03b9\u03bc\u03bf.",
 		"zu": "Ufinyelele ukusebenzisana Kwesevisi Yomthengi Yesimemezelo, kodwa awuzange uhlinzeke Ngempendulo Yokuqinisekisa ye-SAML. Sicela uphawule ukuthi isiphetho asihloselwe ukufinyelelwa ngokuqondile.",
-		"xh": "Ufikelele i-intafeyisi ye-Assertion Consumer Service, kodwa awukhange unikele iMpendulo Yongqinisiso ye-SAML. Nceda uqaphele ukuba le ndawo yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo."
+		"xh": "Ufikelele i-intafeyisi ye-Assertion Consumer Service, kodwa awukhange unikele iMpendulo Yongqinisiso ye-SAML. Nceda uqaphele ukuba le ndawo yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo.",
+		"ca": "Heu accedit a la interfície Assertion Consumer Service però no heu proporcionat una resposta d’autenticació SAML. Tingueu en compte que en aquest punt no s'hi pot accedir directament."
 	},
 	"title_SSOPARAMS": {
 		"zh-tw": "\u672a\u63d0\u4f9b SAML \u8acb\u6c42",
 		"zu": "Asikho isicelo se-SAML esinikeziwe",
-		"xh": "Akukho sicelo se-SAML sinikelweyo"
+		"xh": "Akukho sicelo se-SAML sinikelweyo",
+		"ca": "No s’ha proporcionat cap sol·licitud SAML"
 	},
 	"descr_SSOPARAMS": {
 		"zh-tw": "\u60a8\u9023\u7d50\u55ae\u4e00\u7c3d\u5165\u670d\u52d9\u4ecb\u9762\uff0c\u4f46\u672a\u63d0\u4f9b\u4e00\u500b SAML \u9a57\u8b49\u8acb\u6c42\u3002\u8acb\u6ce8\u610f\uff0c\u8a72\u7aef\u9ede\u4e26\u975e\u76f4\u63a5\u9023\u7dda\u3002",
 		"xh": "Ufikelele i-intafeyisi ye-Single Sign On Service, kodwa awukhange unikele iMpendulo Yongqinisiso ye-SAML. Nceda uqaphele ukuba le ndawo yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo.",
-		"zu": "Ufinyelele ukusebenzisana Kwesevisi Yokubhalisa Okukodwa, kodwa awuzange uhlinzeke Ngempendulo Yokuqinisekisa ye-SAML. Sicela uphawule ukuthi isiphetho asihloselwe ukufinyelelwa ngokuqondile."
+		"zu": "Ufinyelele ukusebenzisana Kwesevisi Yokubhalisa Okukodwa, kodwa awuzange uhlinzeke Ngempendulo Yokuqinisekisa ye-SAML. Sicela uphawule ukuthi isiphetho asihloselwe ukufinyelelwa ngokuqondile.",
+		"ca": "Heu accedit a la interfície del servei d’inici de sessió únic, però no heu proporcionat una sol·licitud d’autenticació SAML. Tingueu en compte que en aquest punt no s'hi pot accedir directament."
 	},
 	"title_ARSPARAMS": {
 		"zh-tw": "\u672a\u63d0\u4f9b SAML \u8a0a\u606f",
 		"zu": "Awukho umlayezo we-SAML onikeziwe",
-		"xh": "Akukho myalezo we-SAML unikelweyo"
+		"xh": "Akukho myalezo we-SAML unikelweyo",
+		"ca": "No s’ha proporcionat cap missatge SAML"
 	},
 	"descr_ARSPARAMS": {
 		"zh-tw": "\u60a8\u9023\u7d50\u4eba\u5de5\u8655\u7406\u670d\u52d9\u4ecb\u9762\uff0c\u4f46\u672a\u63d0\u4f9b SAML \u4eba\u5de5\u8655\u7406\u670d\u52d9\u8a0a\u606f\u3002\u8acb\u6ce8\u610f\uff0c\u8a72\u7aef\u9ede\u4e26\u975e\u76f4\u63a5\u9023\u7dda\u3002",
 		"xh": "Ufikelele i-intafeyisi ye-Artifact Resolution Service, kodwa awukhange unikrele umyalezo we-SAML ArtifactResolve. Nceda uqaphele ukuba le ndawo yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo.",
-		"zu": "Ufinyelele ukusebenzisana Kwesevisi Yokucaciswa Kobuciko, kodwa awuzange uhlinzeke umlayezo we-SAML ArtifactResolve. Sicela uphawule ukuthi isiphetho asihloselwe ukufinyelelwa ngokuqondile."
+		"zu": "Ufinyelele ukusebenzisana Kwesevisi Yokucaciswa Kobuciko, kodwa awuzange uhlinzeke umlayezo we-SAML ArtifactResolve. Sicela uphawule ukuthi isiphetho asihloselwe ukufinyelelwa ngokuqondile.",
+		"ca": "Heu accedit a la interfície del servei de resolució Artifact, però no heu proporcionat un missatge d’ArtifactResolve de SAML. Tingueu en compte que en aquest punt no s'hi pot accedir directament."
 
 	},
 	"title_CASERROR": {
@@ -1387,7 +1426,8 @@
 		"af": "CAS Fout",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 CAS",
 		"xh": "Impazamo ye-CAS",
-		"zu": "Iphutha Le-CAS"
+		"zu": "Iphutha Le-CAS",
+		"ca": "Error CAS"
 	},
 	"descr_CASERROR": {
 		"no": "Feil i kommunikasjonen med CAS-tjeneren.",
@@ -1425,7 +1465,8 @@
 		"af": "Fout tydens kommunikasie met die CAS bediener.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b5\u03be\u03c5\u03c0\u03b7\u03c1\u03b5\u03c4\u03b7\u03c4\u03ae CAS.",
 		"zu": "Iphutha ngenkathi kuxhunyanwa neseva ye-CAS.",
-		"xh": "Impazamo xa kunxibelelwana neseva ye-CAS."
+		"xh": "Impazamo xa kunxibelelwana neseva ye-CAS.",
+		"ca": "S'ha produït un error al intentar connectar amb el servidor CAS."
 	},
 	"title_CONFIG": {
 		"no": "Feil i oppsettet",
@@ -1463,7 +1504,8 @@
 		"af": "Instellings fout",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd",
 		"zu": "Iphutha lomiso",
-		"xh": "Impazamo yolungiselelo"
+		"xh": "Impazamo yolungiselelo",
+		"ca": "Error de configuració"
 	},
 	"descr_CONFIG": {
 		"no": "Det virker som det er en feil i oppsettet av SimpleSAMLphp.",
@@ -1501,7 +1543,8 @@
 		"af": "SimpleSAMLphp is nie korrek ingestel nie",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03c4\u03bf\u03c5 SimpleSAMLphp. \u0395\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae \u03c4\u03b7\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2.",
 		"xh": "I-SimpleSAMLphp ibonakala ingalungiselelwanga kakuhle.",
-		"zu": "I-SimpleSAMLphp ibonakala ingamisiwe ngendlela efanele."
+		"zu": "I-SimpleSAMLphp ibonakala ingamisiwe ngendlela efanele.",
+		"ca": "SimpleSAMLphp sembla estar mal configurat."
 	},
 	"title_NOTSET": {
 		"no": "Passordet er ikke satt",
@@ -1539,7 +1582,8 @@
 		"af": "Wagwoord nie opgestel nie",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
 		"xh": "Iphaswedi ayisetwanga",
-		"zu": "Iphasiwedi ayisethiwe"
+		"zu": "Iphasiwedi ayisethiwe",
+		"ca": "No s'ha definit la contrasenya"
 	},
 	"descr_NOTSET": {
 		"no": "Admin passordet i konfigurasjonen (auth.adminpassword) er ikke satt til noe annet enn default verdien. Bytt passord i config.php.",
@@ -1577,7 +1621,8 @@
 		"af": "Die wagwoord in die konfigurasie (auth.adminpassword) is nie aangepas nie. Redigeer asb die konfigurasie le\u00ebr.",
 		"el": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03b7 \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7 \u03c4\u03b9\u03bc\u03ae \u03c4\u03bf\u03c5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd.",
 		"xh": "Iphaswedi ekulungiselelo (auth.adminpassword) ayitshintshwanga ukusuka kwixabiso lesiseko. Nceda uhlele ifayile yolungiselelo.",
-		"zu": "Iphasiwedi kumiso (auth.adminpassword) ayishintshiwe kunani elizenzakalelayo. Sicela uhlele ifayela lomiso."
+		"zu": "Iphasiwedi kumiso (auth.adminpassword) ayishintshiwe kunani elizenzakalelayo. Sicela uhlele ifayela lomiso.",
+		"ca": "La contrasenya de la configuració (auth.adminpassword) no s'ha canviat del valor predeterminat. Editeu el fitxer de configuració."
 	},
 	"title_NOTVALIDCERT": {
 		"no": "Ugyldig sertifikat",
@@ -1615,7 +1660,8 @@
 		"af": "Ongeldige sertifikaat",
 		"el": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc",
 		"xh": "Isatifikethi esingasebenziyo",
-		"zu": "Isitifiketi esingalungile"
+		"zu": "Isitifiketi esingalungile",
+		"ca": "Certificat no vàlid"
 	},
 	"descr_NOTVALIDCERT": {
 		"no": "Du presenterte ikke et gyldig sertifikat",
@@ -1653,7 +1699,8 @@
 		"af": "Jy het nie 'n geldige sertifikaat gestuur nie.",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03bb\u03cc\u03b3\u03c9 \u03bc\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf\u03c5 \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd.",
 		"zu": "Awuzange wethule isitifiketi esilungile.",
-		"xh": "Awukhange uzise isatifikethi esisebenzayo."
+		"xh": "Awukhange uzise isatifikethi esisebenzayo.",
+		"ca": "No heu presentat un certificat vàlid."
 	},
 	"errorreport_header": {
 		"no": "Feilrapport sent",
@@ -1690,7 +1737,8 @@
 		"af": "Foutmeldingsverslag gestuur",
 		"el": "\u0397 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03c4\u03ac\u03bb\u03b8\u03b7\u03ba\u03b5",
 		"zu": "Umbiko wephutha uthunyelwe",
-		"xh": "Ingxelo yempazamo ithunyelwe"
+		"xh": "Ingxelo yempazamo ithunyelwe",
+		"ca": "S'ha enviat un informe d'error"
 	},
 	"errorreport_text": {
 		"no": "Feilrapport er sent til administrator.",
@@ -1727,7 +1775,8 @@
 		"af": "Die foutmeldings verslag is gestuur na die administrateurs.",
 		"el": "\u0397 \u03b1\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03c4\u03b7\u03c2 \u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03c4\u03bf\u03c5\u03c2 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ad\u03c2 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5.",
 		"xh": "Ingxelo yempazamo ithunyelwe kubalawuli.",
-		"zu": "Umbiko wephutha uthunyelwe kubalawuli."
+		"zu": "Umbiko wephutha uthunyelwe kubalawuli.",
+		"ca": "L’informe d’errors s’ha enviat als administradors."
 	},
 	"title_LOGOUTINFOLOST": {
 		"no": "Informasjon om utlogging er tapt",
@@ -1764,7 +1813,8 @@
 		"af": "Afmelding informasie verlore",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
 		"zu": "Ulwazi lokuphuma lulahlekile",
-		"xh": "Inkcazelo yokuphuma ilahlekile"
+		"xh": "Inkcazelo yokuphuma ilahlekile",
+		"ca": "S'ha perdut la informació del tancament de sessió"
 	},
 	"descr_LOGOUTINFOLOST": {
 		"no": "Informasjonen om den n\u00e5v\u00e6rende utloggingen har g\u00e5tt tapt. Du b\u00f8r g\u00e5 tilbake til den opprinnelige tjesesten og pr\u00f8ve \u00e5 logge ut p\u00e5 nytt. Informasjon om utloggingsoperasjoner er kun lagret i en begrenset tid - vanligvis noen timer. Dette er lengere tid enn en vanlig utlogging skal ta, s\u00e5 denne feilen kan tyde p\u00e5 at noe er galt med oppsettet. Ta kontakt med tjenesteyteren hvis problemet gjentar seg.",
@@ -1801,7 +1851,8 @@
 		"af": "Die inligting vir die huidige uiteken sessie is verlore. Jy moet terugkeer na die diens waarvan jy probeer afmeld het en probeer om weer af te meld. Di\u00e9 fout kan voorkom weens verstreke afmelding inligting. Die afmelding inligting word gestoor vir 'n beperkte tydperk - gewoonlik 'n paar ure. Dit is langer as wat 'n normale afmelding sessie moet vat, so die fout mag 'n indikasie wees van 'n probleem met die stellings. Kontak jou diens verskaffer sou die probleem voortduur.",
 		"el": "\u039f\u03b9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c7\u03b1\u03b8\u03b5\u03af. \u0398\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c8\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03bf\u03c0\u03bf\u03af\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b5\u03ba \u03bd\u03ad\u03bf\u03c5. \u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03b1\u03c3\u03c4\u03b5\u03af \u03b1\u03bd \u03b7 \u03b9\u03c3\u03c7\u03cd\u03c2 \u03c4\u03c9\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03ad\u03c7\u03b5\u03b9 \u03bb\u03ae\u03be\u03b5\u03b9. \u039f\u03b9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b1\u03c5\u03c4\u03ad\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03b5\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c7\u03c1\u03bf\u03bd\u03b9\u03ba\u03cc \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1 - \u03c3\u03c5\u03bd\u03ae\u03b8\u03c9\u03c2 \u03bc\u03b5\u03c1\u03b9\u03ba\u03ce\u03bd \u03c9\u03c1\u03ce\u03bd. \u0391\u03c5\u03c4\u03cc \u03c3\u03c5\u03bd\u03ae\u03b8\u03c9\u03c2 \u03b5\u03c0\u03b1\u03c1\u03ba\u03b5\u03af \u03b3\u03b9\u03b1 \u03bc\u03b9\u03b1 \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2, \u03c3\u03c5\u03bd\u03b5\u03c0\u03ce\u03c2 \u03c3\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03b7 \u03c0\u03b5\u03c1\u03af\u03c0\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c5\u03c0\u03bf\u03b4\u03b5\u03b9\u03ba\u03bd\u03cd\u03b5\u03b9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf \u03ac\u03bb\u03bb\u03bf \u03b8\u03ad\u03bc\u03b1 \u03bc\u03b5 \u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2. \u0395\u03ac\u03bd \u03c4\u03bf \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9, \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd.",
 		"zu": "Ulwazi olumayelana nomsebenzi wokuphuma wamanje lulahlekile. Kufanele ubuyele kusevisi obuzama ukuphuma kuyo futhi uzame ukuphuma futhi. Leli phutha lingabangelwa ukuphelelwa isikhathi kolwazi lokuphuma. Ulwazi lokuphuma lugcinwa isikhathi esilinganiselwe - ngokuvamile amahora ambalwa. Lokhu kude kunanoma yimuphi umsebenzi wokuphuma ovamile, ngakho leli phutha lingase libonise elinye iphutha ngomiso. Uma inkinga iphikelela, thinta umhlinzeki wakho wesevisi.",
-		"xh": "Inkcazelo malunga nomsebenzi wokuphuma wangoku ilahlekile. Ufanele ubuyele kwinkonzo ubuzama ukuphuma kuyo uzame ukuphuma kwakhona. Le mpazamo inokubangelwa kukuphelelwa kwenkcazelo yokuphuma. Inkcazelo yokuphuma igcinwa ixesha elithile - ngokuqhelekileyo iiyure eziliqela. Oku kuthatha ixesha elide kunawo nawuphi na umsebenzi wokuphuma ofanele ulithathe, ngoko le mpazamo isenokubonisa enye impazamo ngolungiselelo. Ukuba ingxaki iyaqhubeka, qhagamshela umboneleli wenkonzo wakho."
+		"xh": "Inkcazelo malunga nomsebenzi wokuphuma wangoku ilahlekile. Ufanele ubuyele kwinkonzo ubuzama ukuphuma kuyo uzame ukuphuma kwakhona. Le mpazamo inokubangelwa kukuphelelwa kwenkcazelo yokuphuma. Inkcazelo yokuphuma igcinwa ixesha elithile - ngokuqhelekileyo iiyure eziliqela. Oku kuthatha ixesha elide kunawo nawuphi na umsebenzi wokuphuma ofanele ulithathe, ngoko le mpazamo isenokubonisa enye impazamo ngolungiselelo. Ukuba ingxaki iyaqhubeka, qhagamshela umboneleli wenkonzo wakho.",
+		"ca": "S'ha perdut la informació sobre el tancament de sessió actual. Heu de tornar al servei del qual esteu intentant desconnectar i provar de sortir de nou. Aquest error pot ser causat per l’expiració de la informació del tancament de sessió. La informació de tancament de sessió s’emmagatzema per un període limitat de temps, normalment un nombre d'hores. Això és més llarg del que hauria de tenir qualsevol operació de tancament de sessió normal, de manera que aquest error pot indicar algun altre error amb la configuració. Si el problema continua, poseu-vos en contacte amb el vostre proveïdor de serveis."
 	},
 	"title_UNHANDLEDEXCEPTION": {
 		"no": "Uh\u00e5ndtert feil",
@@ -1838,7 +1889,8 @@
 		"af": "Onverwagte foutmelding",
 		"el": "\u0391\u03bd\u03b5\u03c0\u03af\u03bb\u03c5\u03c4\u03b7 \u03b5\u03be\u03b1\u03af\u03c1\u03b5\u03c3\u03b7",
 		"xh": "Isinxaxhi esingasingathwanga",
-		"zu": "Okuhlukile okungasingathiwe"
+		"zu": "Okuhlukile okungasingathiwe",
+		"ca": "Excepció no controlada"
 	},
 	"descr_UNHANDLEDEXCEPTION": {
 		"no": "En uventet feilsituasjon oppstod",
@@ -1875,7 +1927,8 @@
 		"af": "'n Onverwagte foutmelding is aangetoon",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03b1\u03bd\u03b5\u03c0\u03af\u03bb\u03c5\u03c4\u03b7 \u03b5\u03be\u03b1\u03af\u03c1\u03b5\u03c3\u03b7",
 		"xh": "Isinxaxhi esingasingathwanga silahliwe.",
-		"zu": "Okuhlukile okungasingathiwe kulahliwe."
+		"zu": "Okuhlukile okungasingathiwe kulahliwe.",
+		"ca": "S'ha enviat una excepció no controlada."
 	},
 	"title_NOTFOUND": {
 		"no": "Kan ikke finne siden",
@@ -1912,7 +1965,8 @@
 		"af": "Bladsy nie gevind nie",
 		"el": "\u0397 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5",
 		"xh": "Ikhasi alifunyenwanga",
-		"zu": "Ikhasi alitholakali"
+		"zu": "Ikhasi alitholakali",
+		"ca": "Pàgina no trobada"
 	},
 	"descr_NOTFOUND": {
 		"no": "Den angitte siden finnes ike. URLen var: %URL%",
@@ -1949,7 +2003,8 @@
 		"af": "Die bladsy bestaan nie. Die URL was: %URL%",
 		"el": "\u0397 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c0\u03bf\u03c5 \u03b6\u03b7\u03c4\u03ae\u03c3\u03b1\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 %URL% \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5.",
 		"zu": "Ikhasi elinikeziwe alitholakalanga. I-URL ibithi: %URL%",
-		"xh": "Ikhasi elinikelweyo alifunyenwanga. I-URL ngu: %URL%"
+		"xh": "Ikhasi elinikelweyo alifunyenwanga. I-URL ngu: %URL%",
+		"ca": "No s’ha trobat la pàgina indicada. L’URL és: %URL%"
 	},
 	"title_NOTFOUNDREASON": {
 		"no": "Kan ikke finne siden",
@@ -1986,7 +2041,8 @@
 		"af": "Bladsy nie gevind nie",
 		"el": "\u0397 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5",
 		"xh": "Ikhasi alifunyenwanga",
-		"zu": "Ikhasi alitholakali"
+		"zu": "Ikhasi alitholakali",
+		"ca": "Pàgina no trobada"
 	},
 	"descr_NOTFOUNDREASON": {
 		"no": "Den angitte siden finnes ikke. Grunnen er: %REASON%. URLen var: %URL%",
@@ -2023,7 +2079,8 @@
 		"af": "Die gegewe bladsy is nie gevind nie. Die rede was: %REASON%. Die URL was: %URL%",
 		"el": "\u0397 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c0\u03bf\u03c5 \u03b6\u03b7\u03c4\u03ae\u03c3\u03b1\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 %URL% \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5: %REASON%",
 		"zu": "Ikhasi elinikeziwe alitholakalanga. Isizathu besithi: %REASON%  I-URL ibithi: %URL%",
-		"xh": "Ikhasi elinikelweyo alifunyenwanga. Isizathu sesi: %REASON%  I-URL ngu: %URL%"
+		"xh": "Ikhasi elinikelweyo alifunyenwanga. Isizathu sesi: %REASON%  I-URL ngu: %URL%",
+		"ca": "No s’ha trobat la pàgina indicada. El motiu és: %REASON%. L’URL és: %URL%"
 	},
 	"title_BADREQUEST": {
 		"no": "Feil foresp\u00f8rsel motatt",
@@ -2060,7 +2117,8 @@
 		"af": "Foutiewe versoek ontvang",
 		"el": "\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03bf \u03b1\u03af\u03c4\u03b7\u03bc\u03b1",
 		"zu": "Kutholwe umlayezo ongalungile",
-		"xh": "Kufunyenwe isicelo esibi"
+		"xh": "Kufunyenwe isicelo esibi",
+		"ca": "S'ha rebut una petició incorrecta"
 	},
 	"descr_BADREQUEST": {
 		"no": "En feil oppsto i foresp\u00f8rselen til denne siden. Grunnen var: %REASON%",
@@ -2096,7 +2154,8 @@
 		"af": "Daar is 'n fout in die versoek na die bladsy. Die rede is: %REASON%",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2: %REASON%",
 		"zu": "Kukhona iphutha kusicelo saleli khasi. Isizathu besithi: %REASON%",
-		"xh": "Kukho impazamo kwisicelo kweli khasi. Isizathu sesi: %REASON%"
+		"xh": "Kukho impazamo kwisicelo kweli khasi. Isizathu sesi: %REASON%",
+		"ca": "Hi ha un error en la sol·licitud d’aquesta pàgina. El motiu és: %REASON%"
 	},
 	"title_WRONGUSERPASS": {
 		"no": "Feil brukernavn og passord",
@@ -2133,7 +2192,8 @@
 		"af": "Inkorrekte gebruikersnaam of wagwoord",
 		"el": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03ae \u03bf \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03ac\u03b8\u03bf\u03c2",
 		"zu": "Igama lomsebenzisi elingalungile noma iphasiwedi",
-		"xh": "Igama lomsebenzisi okanye iphaswedi engachanekanga"
+		"xh": "Igama lomsebenzisi okanye iphaswedi engachanekanga",
+		"ca": "Nom d'usuari o contrasenya incorrecta"
 	},
 	"descr_WRONGUSERPASS": {
 		"no": "Enten var brukernavnet, eller kombinasjonen med brukernavn og passord feil. Sjekk brukernavn og passord og pr\u00f8v igjen.",
@@ -2169,7 +2229,8 @@
 		"af": "Die gegewe gebruikersnaam bestaan nie, of die wagwoord wat jy verskaf het is verkeerd. Bevestig die gebruikersnaam en probeer weer.",
 		"el": "\u039f \u03c3\u03c5\u03bd\u03b4\u03c5\u03b1\u03c3\u03bc\u03cc\u03c2 \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03ba\u03b1\u03b9 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03c9\u03c3\u03c4\u03cc\u03c2. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b7\u03bd \u03bf\u03c1\u03b8\u03cc\u03c4\u03b7\u03c4\u03b1 \u03c4\u03c9\u03bd \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd \u03c3\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03ae\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac.",
 		"zu": "Kungenzeka ukuthi akekho umsebenzisi onegama lomsebenzisi otholiwe, noma iphasiwedi oyinikezile ayilungile. Sicela uhlole igama lomsebenzisi bese uzame futhi.",
-		"xh": "Kusenokwenzeka akukho msebenzisi unegama lomsebenzisi elinikelweyo ofunyenweyo, okanye iphaswedi oyinikeleyo ayichanekanga. Nceda ujonge igama lomsebenzisi uzame kwakhona."
+		"xh": "Kusenokwenzeka akukho msebenzisi unegama lomsebenzisi elinikelweyo ofunyenweyo, okanye iphaswedi oyinikeleyo ayichanekanga. Nceda ujonge igama lomsebenzisi uzame kwakhona.",
+		"ca": "No s’ha pogut trobar cap usuari amb el nom d’usuari donat, o la contrasenya no és correcta. Comproveu el nom d’usuari i torneu-ho a provar."
 	},
 	"title_RESPONSESTATUSNOSUCCESS": {
 		"no": "Feilmelding mottatt fra innloggingstjenesten",
@@ -2206,7 +2267,8 @@
 		"af": "Foutmelding ontvang vanaf die Identiteits Verskaffer",
 		"el": "\u039b\u03ae\u03c8\u03b7 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
 		"zu": "Iphutha litholwe ukusuka Kumhlinzeki Kamazisi",
-		"xh": "Impazamo efunyenwe kuMboneleli Wesazisi"
+		"xh": "Impazamo efunyenwe kuMboneleli Wesazisi",
+		"ca": "S'ha rebut un error del proveïdor d’identitats"
 	},
 	"descr_RESPONSESTATUSNOSUCCESS": {
 		"no": "Innloggingstjenesten svarte med en feilmelding. (Statuskoden i SAML-svaret var noe annet enn OK)",
@@ -2243,7 +2305,8 @@
 		"af": "Die Identiteits Verskaffer reageer met 'n fout. (Die status kode in die SAML reaksie was onsuksesvol)",
 		"el": "\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03c0\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9 \u03b7 \u03b1\u03c0\u03ac\u03bd\u03c4\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03c5\u03c0\u03bf\u03b4\u03b5\u03b9\u03ba\u03bd\u03cd\u03b5\u03b9 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1.",
 		"xh": "Umboneleli Wesazisi uphendule ngempazamo. (Ikhowudi yobume kwiMpendulo ye-SAML ayiphumelelanga)",
-		"zu": "Umhlinzeki Womazisi uphendule ngephutha. (Ikhodi yesimo Sempendulo ye-SAML ayizange iphumelele)"
+		"zu": "Umhlinzeki Womazisi uphendule ngephutha. (Ikhodi yesimo Sempendulo ye-SAML ayizange iphumelele)",
+		"ca": "El proveïdor d’identitat ha respost amb un error (el codi d'estat de la resposta SAML no ha estat exitós)."
 	},
 	"title_NOCERT": {
 		"fr": "Aucun certificat pr\u00e9sent\u00e9",
@@ -2278,7 +2341,8 @@
 		"af": "Geen sertifikaat",
 		"el": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc",
 		"xh": "Akukho satifikethi",
-		"zu": "Asikho isitifiketi"
+		"zu": "Asikho isitifiketi",
+		"ca": "Sense certificat"
 	},
 	"descr_NOCERT": {
 		"fr": "\u00c9chec de l'authentification : votre navigateur n'a pas pr\u00e9sent\u00e9 de certificat",
@@ -2312,7 +2376,8 @@
 		"af": "Verifikasie het misluk: Jou webblaaier het geen sertifikaat gestuur nie",
 		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5: \u03a4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03b4\u03b5\u03bd \u03ad\u03c3\u03c4\u03b5\u03b9\u03bb\u03b5 \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc.",
 		"zu": "Ukuqinisekisa kuhlulekile: isiphequluli sakho asizange sithumele noma yisiphi isitifiketi",
-		"xh": "Ungqinisiso lusilele: ibhrawuza yakho ayithumelanga nasiphi na isatifikethi"
+		"xh": "Ungqinisiso lusilele: ibhrawuza yakho ayithumelanga nasiphi na isatifikethi",
+		"ca": "Ha fallat l’autenticació: el navegador no ha enviat cap certificat"
 	},
 	"title_INVALIDCERT": {
 		"fr": "Certificat invalide",
@@ -2347,7 +2412,8 @@
 		"af": "Ongeldige sertifikaat",
 		"el": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc",
 		"xh": "Isatifikethi esingasebenziyo",
-		"zu": "Isifiketi esingalungile"
+		"zu": "Isifiketi esingalungile",
+		"ca": "Certificat no vàlid"
 	},
 	"descr_INVALIDCERT": {
 		"fr": "\u00c9chec de l'authentification : le certificat pr\u00e9sent\u00e9 par votre navigateur est invalide ou illisible",
@@ -2381,7 +2447,8 @@
 		"af": "Verifikasie het misluk: Jou webblaaier het 'n ongeldige of korrupte sertifikaat gestuur",
 		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5: \u03a4\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc \u03c0\u03bf\u03c5 \u03ad\u03c3\u03c4\u03b5\u03b9\u03bb\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03ae \u03b4\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bd\u03ac\u03b3\u03bd\u03c9\u03c3\u03ae \u03c4\u03bf\u03c5.",
 		"xh": "Ungqinisiso lusilele: isatifikethi esithunyelwe yibhrawuza yakho asisebenzi okanye asikwazi ukufundwa",
-		"zu": "Ukuqinisekisa kuhlulekile: isitifiketi esithunyelwe isiphequluli sakho asivumelekile noma asikwazi ukufundwa"
+		"zu": "Ukuqinisekisa kuhlulekile: isitifiketi esithunyelwe isiphequluli sakho asivumelekile noma asikwazi ukufundwa",
+		"ca": "Ha fallat l’autenticació: el certificat que el navegador ha enviat no és vàlid o no es pot llegir"
 	},
 	"title_UNKNOWNCERT": {
 		"fr": "Certificat inconnu",
@@ -2416,7 +2483,8 @@
 		"af": "Onbekende sertifikaat",
 		"el": "\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc",
 		"zu": "Isitifiketi esingaziwa",
-		"xh": "Isatifikethi esingaziwayo"
+		"xh": "Isatifikethi esingaziwayo",
+		"ca": "Certificat desconegut"
 	},
 	"descr_UNKNOWNCERT": {
 		"fr": "\u00c9chec de l'authentification : le certificat pr\u00e9sent\u00e9 par votre navigateur n'est pas connu",
@@ -2450,7 +2518,8 @@
 		"af": "Verifikasie het misluk: die sertifikaat wat jou webblaaier gestuur het is onbekend",
 		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5: \u03a4\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc \u03c0\u03bf\u03c5 \u03ad\u03c3\u03c4\u03b5\u03b9\u03bb\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03b4\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03bd\u03b1 \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b5\u03af.",
 		"zu": "Ukuqinisekisa kuhlulekile: isitifiketi esithunyelwe isiphequluli sakho asaziwa",
-		"xh": "Ungqinisiso lusilele: isatifikerthi esithunyelwe yibhrawuza yakho asaziwa"
+		"xh": "Ungqinisiso lusilele: isatifikerthi esithunyelwe yibhrawuza yakho asaziwa",
+		"ca": "Ha fallat l’autenticació: el certificat que el navegador ha enviat és desconegut"
 	},
 	"title_USERABORTED": {
 		"da": "Autentificering aubrudt",
@@ -2484,7 +2553,8 @@
 		"af": "Verifikasie gestop",
 		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03bc\u03b1\u03c4\u03b1\u03b9\u03ce\u03b8\u03b7\u03ba\u03b5",
 		"zu": "Ukuqinisekisa kuyekisiwe",
-		"xh": "Ungqinisiso luyekiwe"
+		"xh": "Ungqinisiso luyekiwe",
+		"ca": "S'ha avortat l’autenticació"
 	},
 	"descr_USERABORTED": {
 		"da": "Autentificering blev afbrudt af brugeren",
@@ -2518,7 +2588,8 @@
 		"af": "Die verifikasie is gestop deur die gebruiker",
 		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03bc\u03b1\u03c4\u03b1\u03b9\u03ce\u03b8\u03b7\u03ba\u03b5 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7.",
 		"zu": "Ukuqinisekisa kuyekiswe umsebenzisi",
-		"xh": "Ungqinisiso luyekiswe ngumsebenzisi"
+		"xh": "Ungqinisiso luyekiswe ngumsebenzisi",
+		"ca": "L’usuari ha cancel·lat l’autenticació"
 	},
 	"title_NOSTATE": {
 		"da": "State information tabt",
@@ -2552,7 +2623,8 @@
 		"pt-br": "Informa\u00e7\u00f5es de estado perdidas",
 		"el": "\u0394\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b1\u03b9\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2",
 		"xh": "Inkcazelo yobume ilahlekile",
-		"zu": "Ulwazi lwesifunda lulahlekile"
+		"zu": "Ulwazi lwesifunda lulahlekile",
+		"ca": "Informació d'estat perduda"
 	},
 	"descr_NOSTATE": {
 		"da": "State information er tabt og der er ikke muligt at gentage forsp\u00f8rgelsen",
@@ -2586,7 +2658,8 @@
 		"pt-br": "Informa\u00e7\u00f5es de estado perdidas, e n\u00e3o \u00e9 poss\u00edvel reiniciar a requisi\u00e7\u00e3o",
 		"el": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03bd\u03b1 \u03b5\u03be\u03c5\u03c0\u03b7\u03c1\u03b5\u03c4\u03b7\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03af\u03c4\u03b7\u03bc\u03ac \u03c3\u03b1\u03c2 \u03ba\u03b1\u03b8\u03ce\u03c2 \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae \u03c4\u03bf\u03c5",
 		"xh": "Inkcazelo yobume ilahlekile, yaye akukho ndlela yokuqalisa isicelo",
-		"zu": "Ulwazi lwesifunda lulahlekile, futhi ayikho indlela yokuqala kabusha isicelo"
+		"zu": "Ulwazi lwesifunda lulahlekile, futhi ayikho indlela yokuqala kabusha isicelo",
+		"ca": "Infomració d'estat perduda, i no hi ha cap manera de reiniciar la sol·licitud"
 	},
 	"title_METADATANOTFOUND": {
 		"da": "Metadata ikke fundet",
@@ -2620,7 +2693,8 @@
 		"pt-br": "Metadado n\u00e3o encontrado",
 		"el": "\u0394\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",
 		"zu": "Imethadatha ayitholakalanga",
-		"xh": "Imetadata ayifunyenwanga"
+		"xh": "Imetadata ayifunyenwanga",
+		"ca": "Metadades no trobades"
 	},
 	"descr_METADATANOTFOUND": {
 		"da": "Kan ikke finde metadata for %ENTITYID%",
@@ -2654,7 +2728,8 @@
 		"pt-br": "N\u00e3o foi poss\u00edvel localizar os metadados de %ENTITYID%",
 		"el": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03bd\u03b1 \u03b2\u03c1\u03b5\u03b8\u03bf\u03cd\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 %ENTITYID%",
 		"xh": "Ayikwazi ukufumana iimpawu-ngcaciso zefayile ze-%ENTITYID%",
-		"zu": "Ayikwazi ukuthola imethadatha yokuthi %ENTITYID%"
+		"zu": "Ayikwazi ukuthola imethadatha yokuthi %ENTITYID%",
+		"ca": "No es poden localitzar les metadades per a %ENTITYID%"
 	},
 	"title_AUTHSOURCEERROR": {
 		"hr": "Gre\u0161ka u autentifikacijskom modulu",
@@ -2688,7 +2763,8 @@
 		"pt-br": "Erro na fonte de autentica\u00e7\u00e3o",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c0\u03b7\u03b3\u03ae \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
 		"zu": "Iphutha lomthombo wokuqinisekisa",
-		"xh": "Impazamo yomthombo wongqinisiso"
+		"xh": "Impazamo yomthombo wongqinisiso",
+		"ca": "Error en l’autenticació d'origen"
 	},
 	"descr_AUTHSOURCEERROR": {
 		"hr": "Do\u0161lo je do gre\u0161ke u autentifikacijskom modulu %AUTHSOURCE%. Razlog: %REASON%",
@@ -2722,18 +2798,21 @@
 		"pt-br": "Erro de autentica\u00e7\u00e3o na origem %AUTHSOURCE%. O motivo foi:%REASON%",
 		"el": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c0\u03b7\u03b3\u03ae \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 %AUTHSOURCE%: %REASON%",
 		"zu": "Iphutha lokuqinisekisa kumthombo othi %AUTHSOURCE%. Isizathu besithi: %REASON%",
-		"xh": "Impazamo yongqinisiso kumthombo %AUTHSOURCE%. Isizathu sesi: %REASON%"
+		"xh": "Impazamo yongqinisiso kumthombo %AUTHSOURCE%. Isizathu sesi: %REASON%",
+		"ca": "Error en l’autenticació d'origen %AUTHSOURCE%. El motiu és: %REASON%"
 	},
 	"title_MEMCACHEDOWN": {
 		"zh-tw": "\u7121\u6cd5\u53d6\u5f97\u9023\u7dda Session \u8cc7\u8a0a",
 		"el": "\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bd\u03ac\u03ba\u03c4\u03b7\u03c3\u03b7 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1\u03c2",
 		"xh": "Ayikwazi ukubuyisela ingcombolo yeseshoni",
-		"zu": "Ayikwazi ukubuyisela idatha yeseshini"
+		"zu": "Ayikwazi ukubuyisela idatha yeseshini",
+		"ca": "No es poden recuperar les dades de la sessió"
 	},
 	"descr_MEMCACHEDOWN": {
 		"zh-tw": "\u60a8\u7684\u9023\u7dda Session \u8cc7\u8a0a\u56e0\u70ba\u6280\u8853\u56f0\u96e3\u73fe\u5728\u7121\u6cd5\u53d6\u5f97\uff0c\u8acb\u7a0d\u5f85\u5e7e\u5206\u9418\u5f8c\u518d\u91cd\u8a66",
 		"el": "\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bd\u03ac\u03ba\u03c4\u03b7\u03c3\u03b7 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1\u03c2 \u03bb\u03cc\u03b3\u03c9 \u03c4\u03b5\u03c7\u03bd\u03b9\u03ba\u03ce\u03bd \u03b4\u03c5\u03c3\u03ba\u03bf\u03bb\u03b9\u03ce\u03bd. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1",
 		"zu": "Idatha yeseshini yakho ayikwazi ukubuyiswa njengamanje ngenxa yezinkinga zobuchwepheshe. Sicela uzame futhi emizuzwini embalwa.",
-		"xh": "Ingcombolo yeseshoni yakho ayikwazi ukubuyiselwa okwangoku ngenxa yeengxaki zobugcisa. Nceda uzame kwakhona kwimizuzu embalwa."
+		"xh": "Ingcombolo yeseshoni yakho ayikwazi ukubuyiselwa okwangoku ngenxa yeengxaki zobugcisa. Nceda uzame kwakhona kwimizuzu embalwa.",
+		"ca": "Les vostres dades de sessió no es poden recuperar ara mateix a causa de dificultats tècniques. Torneu-ho a provar d'aquí a uns minuts."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/general.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/general.translation.json
index 299ea9f16c..e8cb0c1a1c 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/general.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/general.translation.json
@@ -35,7 +35,8 @@
     "af": "Ja",
     "el": "\u039d\u03b1\u03af",
     "zu": "Yebo",
-    "xh": "Ewe"
+    "xh": "Ewe",
+    "ca": "Sí"
   },
   "no": {
     "no": "Nei",
@@ -73,7 +74,8 @@
     "af": "Nee",
     "el": "\u038c\u03c7\u03b9",
     "xh": "Hayi",
-    "zu": "Cha"
+    "zu": "Cha",
+    "ca": "No"
   },
   "remember": {
     "no": "Godta ogs\u00e5 for fremtiden",
@@ -111,7 +113,8 @@
     "af": "Onthou",
     "el": "\u039d\u03b1 \u03b8\u03c5\u03bc\u03ac\u03c3\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bc\u03bf\u03c5",
     "zu": "Khumbula",
-    "xh": "Khumbula"
+    "xh": "Khumbula",
+    "ca": "Recorda"
   },
   "yes_continue": {
     "no": "Ja, fortsett",
@@ -149,7 +152,8 @@
     "af": "Ja, voortgaan",
     "el": "\u0391\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae",
     "xh": "Ewe, qhubeka",
-    "zu": "Yebo, qhubeka"
+    "zu": "Yebo, qhubeka",
+    "ca": "Sí, continua"
   },
   "no_cancel": {
     "no": "Nei, avbryt",
@@ -187,7 +191,8 @@
     "af": "Nee, kanselleer",
     "el": "\u0391\u03c0\u03cc\u03c1\u03c1\u03b9\u03c8\u03b7",
     "xh": "Hayi, rhoxisa",
-    "zu": "Cha, khansela"
+    "zu": "Cha, khansela",
+    "ca": "No, cancel·la"
   },
   "service_provider": {
     "no": "Tjenesteleverand\u00f8r",
@@ -225,6 +230,7 @@
     "af": "Diens Verskaffer",
     "el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2",
     "xh": "Umboneleli Wenkonzo",
-    "zu": "Umhlinzeki Wesevisi"
+    "zu": "Umhlinzeki Wesevisi",
+    "ca": "Proveïdor de servei"
   }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/login.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/login.translation.json
index fd7f860605..59cf9c861e 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/login.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/login.translation.json
@@ -35,7 +35,8 @@
 		"af": "Fout",
 		"el": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1",
 		"zu": "Iphutha",
-		"xh": "Impazamo"
+		"xh": "Impazamo",
+		"ca": "Error"
 	},
 	"user_pass_header": {
 		"no": "Skriv inn brukernavn og passord",
@@ -73,7 +74,8 @@
 		"xh": "Nceda ngenisa igama lakho lomsebenzisi kunye negama lokugqithisa",
 		"af": "Voer jou gebruikersnaam en wagwoord in",
 		"el": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03ba\u03b1\u03b9 \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",
-		"zu": "Faka igama lakho lomsebenzisi nephasiwedi"
+		"zu": "Faka igama lakho lomsebenzisi nephasiwedi",
+		"ca": "Introduïu el vostre nom d’usuari i contrasenya"
 	},
 	"user_pass_text": {
 		"no": "En tjeneste har bedt om bekreftelse p\u00e5 din identitet. Skriv inn ditt brukernavn og passord for \u00e5 autentisere deg.",
@@ -111,7 +113,8 @@
 		"af": "'n Diens vereis dat jy jouself identifiseer. Voer jou gebruikersnaam en wagwoord in die onderstaande vorm in.",
 		"el": "\u039c\u03b9\u03b1 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03b6\u03b7\u03c4\u03ae\u03c3\u03b5\u03b9 \u03c4\u03b7\u03bd \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03ba\u03b1\u03b9 \u03c4\u03bf\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03c3\u03c4\u03b7\u03bd \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c6\u03cc\u03c1\u03bc\u03b1.",
 		"zu": "Isevisi icele ukuthi uziqinisekise. Sicela ufake igama lakho lomsebenzisi nephasiwedi ngohlobo olungezansi.",
-		"xh": "Inkonzo icele ukuba uzingqinisise. Nceda ungenise igama lomsebenzisi nephaswedi yakho kwifomu ngezantsi."
+		"xh": "Inkonzo icele ukuba uzingqinisise. Nceda ungenise igama lomsebenzisi nephaswedi yakho kwifomu ngezantsi.",
+		"ca": "Un servei us ha demanat autenticar-vos. Introduïu el vostre nom d’usuari i contrasenya en el formulari següent."
 	},
 	"login_button": {
 		"no": "Logg inn",
@@ -150,14 +153,16 @@
 		"xh": "Ngena",
 		"af": "Meld aan",
 		"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2",
-		"zu": "Ngena"
+		"zu": "Ngena",
+		"ca": "Inicia la sessió"
 	},
 	"processing": {
 		"es": "Procesando...",
 		"sl": "Procesiranje...",
 		"zh-tw": "\u8655\u7406\u4e2d...",
 		"zu": "Iyacubungula...",
-		"xh": "Iyaprosesa..."
+		"xh": "Iyaprosesa...",
+		"ca": "Processant.."
 	},
 	"username": {
 		"no": "Brukernavn",
@@ -196,7 +201,8 @@
 		"xh": "Igama lomsebenzisi",
 		"af": "Gebruikersnaam",
 		"el": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03a7\u03c1\u03ae\u03c3\u03c4\u03b7",
-		"zu": "Igama lomsebenzisi"
+		"zu": "Igama lomsebenzisi",
+		"ca": "Nom d'usuari"
 	},
 	"organization": {
 		"no": "Organisasjon",
@@ -235,7 +241,8 @@
 		"xh": "Umbutho",
 		"af": "Organisasie",
 		"el": "\u039f\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03cc\u03c2",
-		"zu": "Inhlangano"
+		"zu": "Inhlangano",
+		"ca": "Organització"
 	},
 	"password": {
 		"no": "Passord",
@@ -274,7 +281,8 @@
 		"xh": "Igama lokugqithisa",
 		"af": "Wagwoord",
 		"el": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2",
-		"zu": "Iphasiwedi"
+		"zu": "Iphasiwedi",
+		"ca": "Contrasenya"
 	},
 	"help_header": {
 		"no": "Hjelp! Jeg har glemt passordet mitt.",
@@ -312,7 +320,8 @@
 		"af": "Hulp! Ek het nie my wagwoord onthou nie.",
 		"el": "\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1! \u0394\u03b5 \u03b8\u03c5\u03bc\u03ac\u03bc\u03b1\u03b9 \u03c4\u03bf\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03bc\u03bf\u03c5.",
 		"zu": "Siza! Angiyikhumbuli iphasiwedi yami.",
-		"xh": "Ncedani! Andiyikhumbuli iphaswedi yam."
+		"xh": "Ncedani! Andiyikhumbuli iphaswedi yam.",
+		"ca": "Ajuda! No recordo la meva contrasenya."
 	},
 	"help_text": {
 		"no": "Synd! - Uten riktig brukernavn og passord kan du ikke autentisere deg. Det kan v\u00e6re noen som kan hjelpe deg. Fors\u00f8k \u00e5 kontakt brukerst\u00f8tte ved din vertsorganisasjon.",
@@ -350,7 +359,8 @@
 		"af": "Jammer! - Sonder jou gebruikersnaam en wagwoord kan jy jouself nie vir toegang tot die diens identifiseer nie. Dalk is daar iemand wat jou kan help. Raadpleeg die hulplyn by jou organisasie!",
 		"el": "\u039b\u03c5\u03c0\u03bf\u03cd\u03bc\u03b1\u03c3\u03c4\u03b5. \u03a7\u03c9\u03c1\u03af\u03c2 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03ba\u03b1\u03b9 \u03c4\u03bf\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03c3\u03b1\u03c2, \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af\u03c4\u03b5 \u03ce\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03ba\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1. \u03a3\u03c5\u03bc\u03b2\u03bf\u03c5\u03bb\u03b5\u03c5\u03c4\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03b1\u03c1\u03c9\u03b3\u03ae\u03c2 \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd \u0028\u0068\u0065\u006c\u0070 \u0064\u0065\u0073\u006b\u0029 \u03c4\u03bf\u03c5 \u03bf\u03c1\u03b3\u03b1\u03bd\u03b9\u03c3\u03bc\u03bf\u03cd \u03c3\u03b1\u03c2.",
 		"xh": "Ngaphandle kwegama lomsebenzisi nephaswedi yakho awukwazi ukuzingqinisisa ukuze ufumane ufikelelo kwinkonzo. Kusenokuba ukho umntu onokukunceda. Qhagamshelana nedesika yoncedo kumbutho wakho!",
-		"zu": "Ngaphandle kwegama lakho lomsebenzisi nephasiwedi awukwazi ukuziqinisekisa ukuze ufinyelele isevisi. Kungase kube khona ozokusiza. Thinta ideski losizo enhlanganweni yakho!"
+		"zu": "Ngaphandle kwegama lakho lomsebenzisi nephasiwedi awukwazi ukuziqinisekisa ukuze ufinyelele isevisi. Kungase kube khona ozokusiza. Thinta ideski losizo enhlanganweni yakho!",
+		"ca": "Sense el vostre nom d'usuari i contrasenya, no podeu autenticar-vos per accedir al servei. Pot ser que algú us pugui ajudar. Poseu-vos en contacte amb el centre d'atenció a l'usuari"
 	},
 	"error_nopassword": {
 		"no": "Du kontaktet loginsiden, men passordet ble ikke sendt med. Fors\u00f8k igjen.",
@@ -388,7 +398,8 @@
 		"af": "Jy het probeer aanmeld maar jou wagwoord is nie verstuur nie, probeer asb. weer.",
 		"el": "\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b4\u03b5\u03bd \u03b5\u03c3\u03c4\u03ac\u03bb\u03b7. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce, \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03ae\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac.",
 		"zu": "Uthumele okuthile ekhasini lokungena, kodwa ngasizathu simbe iphasiwedi ayizange ithunyelwe. Sicela uzame futhi.",
-		"xh": "Uthumele into kwikhasi lokungena, kodwa ngesizathu esithile iphaswedi ayithunyelwanga. Nceda uzame kwakhona."
+		"xh": "Uthumele into kwikhasi lokungena, kodwa ngesizathu esithile iphaswedi ayithunyelwanga. Nceda uzame kwakhona.",
+		"ca": "Heu enviat alguna cosa a la pàgina d’inici de sessió, però per alguna raó la contrasenya no s’ha enviat. Torneu-ho a provar."
 	},
 	"error_wrongpassword": {
 		"no": "Feil brukernavn eller passord.",
@@ -427,7 +438,8 @@
 		"xh": "Awungenanga ngoba igama olisebenzisayo okanye isigqithisi asifakwanga kakuhle.",
 		"af": "Verkeerde gebruikersnaam of wagwoord.",
 		"el": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03ae \u03bf \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03ac\u03b8\u03bf\u03c2.",
-		"zu": "Igama lomsebenzisi noma iphasiwedi engalungile."
+		"zu": "Igama lomsebenzisi noma iphasiwedi engalungile.",
+		"ca": "Nom d'usuari o contrasenya incorrecta."
 	},
 	"contact_info": {
 		"no": "Kontaktinformasjon:",
@@ -464,7 +476,8 @@
 		"af": "Kontak detail:",
 		"el": "\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1\u03c2:",
 		"zu": "Ulwazi lokuxhumana:",
-		"xh": "Inkcazelo yoqhagamshelwano:"
+		"xh": "Inkcazelo yoqhagamshelwano:",
+		"ca": "Informació de contacte:"
 	},
 	"select_home_org": {
 		"no": "Velg vertsorganisasjon",
@@ -501,7 +514,8 @@
 		"af": "Kies jou tuisorganisasie",
 		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03c6\u03bf\u03c1\u03ad\u03b1",
 		"xh": "Khetha umbutho wakho wekhaya",
-		"zu": "Khetha inhlangano yakho yasekhaya"
+		"zu": "Khetha inhlangano yakho yasekhaya",
+		"ca": "Trieu la vostra organització principal"
 	},
 	"change_home_org_title": {
 		"no": "Endre din vertsorganisasjon",
@@ -538,7 +552,8 @@
 		"af": "Verander jou tuisorganisasie",
 		"el": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03c6\u03bf\u03c1\u03ad\u03b1",
 		"xh": "Tshintsha umbutho wakho wekhaya",
-		"zu": "Shintsha inhlangano yakho yasekhaya"
+		"zu": "Shintsha inhlangano yakho yasekhaya",
+		"ca": "Canvieu la vostra organització principal"
 	},
 	"change_home_org_text": {
 		"no": "Du har valgt <b>%HOMEORG%<\/b> som din vertsorganisasjon. Dersom dette er feil kan du velge en annen.",
@@ -575,7 +590,8 @@
 		"af": "Jy het <b>%HOMEORG%<\/b> gekies as jou tuisorganisasie. As dit is verkeerd jy kan 'n ander een te kies.",
 		"el": "\u0395\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c2 \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c2 \u03c6\u03bf\u03c1\u03ad\u03b1\u03c2: <b>%HOMEORG%<\/b>.",
 		"zu": "Ukhethe okuthi <b>%HOMEORG%</b> njengenhlangano yakho yasekhaya. Uma lokhu kungalungile ungase ukhethe enye.",
-		"xh": "Uye wakhetha u-<b>%HOMEORG%</b> njengombutho wakho wekhaya. Ukuba oku akuchanekanga usenokukhetha omnye."
+		"xh": "Uye wakhetha u-<b>%HOMEORG%</b> njengombutho wakho wekhaya. Ukuba oku akuchanekanga usenokukhetha omnye.",
+		"ca": "Heu triat <b>%HOMEORG%<\/b> com la vostra organització principal. Si això no és correcte, podeu triar-ne una altra."
 	},
 	"change_home_org_button": {
 		"no": "Velg vertsorganisasjon",
@@ -612,7 +628,8 @@
 		"af": "Kies tuisorganisasie",
 		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bf\u03b9\u03ba\u03b5\u03af\u03bf\u03c5 \u03c6\u03bf\u03c1\u03ad\u03b1",
 		"xh": "Khetha umbutho wekhaya",
-		"zu": "Khetha inhlangano yasekhaya"
+		"zu": "Khetha inhlangano yasekhaya",
+		"ca": "Escull la teva organització principal"
 	},
 	"help_desk_link": {
 		"no": "Hjemmesiden til brukerst\u00f8tte",
@@ -649,7 +666,8 @@
 		"af": "Hulplyn-tuisblad",
 		"el": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2 \u03b1\u03c1\u03c9\u03b3\u03ae\u03c2 \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd",
 		"zu": "Ikhasi lasekhaya ledeski losizo",
-		"xh": "Ikhasi lekhaya ledesika yoncedo"
+		"xh": "Ikhasi lekhaya ledesika yoncedo",
+		"ca": "Pàgina d'inici del centre d'atenció a l'usuari"
 	},
 	"help_desk_email": {
 		"no": "Send e-post til brukerst\u00f8tte",
@@ -686,7 +704,8 @@
 		"af": "Stuur e-pos aan hulplyn",
 		"el": "\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u0065\u006d\u0061\u0069\u006c \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03b1\u03c1\u03c9\u03b3\u03ae\u03c2 \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd",
 		"xh": "Thumela i-imeyile kwidesika yoncedo",
-		"zu": "Thumela i-imeyili edeskini losizo"
+		"zu": "Thumela i-imeyili edeskini losizo",
+		"ca": "Envia un correu electrònic el centre d'atenció a l'usuari"
 	},
 	"next": {
 		"no": "Fortsett",
@@ -723,10 +742,12 @@
 		"xh": "Olandelayo",
 		"af": "Volgende",
 		"el": "\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf",
-		"zu": "Okulandelayo"
+		"zu": "Okulandelayo",
+		"ca": "Següent"
 	},
 	"remember_username": {
 		"es": "Recordar mi nombre de usuario",
+        "de": "Nutzername merken",
 		"hu": "Eml\u00e9kezzen a felhaszn\u00e1l\u00f3nevemre",
 		"ru": "\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u043e\u0451 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f",
 		"zh-tw": "\u8a18\u4f4f\u6211\u7684\u4f7f\u7528\u8005\u540d\u7a31",
@@ -737,10 +758,12 @@
 		"el": "\u039d\u03b1 \u03b8\u03c5\u03bc\u03ac\u03c3\u03b1\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7",
 		"zu": "Khumbula igama lami lomsebenzisi",
 		"xh": "Khumbula igama lomsebenzisi lam",
-		"sl": "Zapomni si moje uporabniško ime"
+		"sl": "Zapomni si moje uporabniško ime",
+		"ca": "Recorda el meu nom d’usuari"
 	},
 	"remember_me": {
 		"es": "Recordarme",
+        "de": "Angemeldet bleiben",
 		"hu": "Eml\u00e9kezzen r\u00e1m",
 		"ru": "\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u0435\u043d\u044f",
 		"zh-tw": "\u8a18\u4f4f\u6211",
@@ -751,6 +774,10 @@
 		"el": "\u039d\u03b1 \u03bc\u03b5 \u03b8\u03c5\u03bc\u03ac\u03c3\u03b1\u03b9",
 		"xh": "Ndikhumbule",
 		"zu": "Ngikhumbule",
-		"sl": "Zapomni si me"
-	}
+		"sl": "Zapomni si me",
+		"ca": "Recorda'm"
+	},
+	"remember_organization": {
+		"ca": "Recorda la meva organització principal"
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/logout.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/logout.translation.json
index d17a234a88..9f25790e6c 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/logout.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/logout.translation.json
@@ -34,7 +34,8 @@
 		"af": "Afgemeld",
 		"el": "\u0391\u03c0\u03bf\u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2/\u03b7",
 		"xh": "Uphumile",
-		"zu": "Uphume ngemvume"
+		"zu": "Uphume ngemvume",
+		"ca": "Desconnectat"
 	},
 	"logged_out_text": {
 		"no": "Du er n\u00e5 utlogget.",
@@ -71,7 +72,8 @@
 		"af": "Jy is afgemeld.",
 		"el": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03b1\u03c0\u03bf\u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af.",
 		"zu": "Usuphumile.",
-		"xh": "Uphumile."
+		"xh": "Uphumile.",
+		"ca": "Us heu desconnectat."
 	},
 	"default_link_text": {
 		"no": "G\u00e5 tilbake til SimpleSAMLphp installasjonen sin startside.",
@@ -108,7 +110,8 @@
 		"af": "Gaan terug na die SimpleSAMLphp installasie bladsy",
 		"el": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03b9\u03ba\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1",
 		"xh": "Buyela emva kwikhasi lofakelo le-SimpleSAMLphp",
-		"zu": "Buyela emuva ekhasini lokufaka le-SimpleSAMLphp"
+		"zu": "Buyela emuva ekhasini lokufaka le-SimpleSAMLphp",
+		"ca": "Torneu a la pàgina d’instal·lació de SimpleSAMLphp"
 	},
 	"hold": {
 		"no": "P\u00e5 vent",
@@ -145,7 +148,8 @@
 		"af": "Hou die verbinding",
 		"el": "\u03a3\u03b5 \u03b1\u03bd\u03b1\u03bc\u03bf\u03bd\u03ae",
 		"xh": "Ibanjiwe",
-		"zu": "Imisiwe"
+		"zu": "Imisiwe",
+		"ca": "En espera"
 	},
 	"completed": {
 		"no": "Fullf\u00f8rt",
@@ -182,7 +186,8 @@
 		"af": "Voltooid",
 		"el": "\u039f\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5",
 		"xh": "Igqityiwe",
-		"zu": "Kuqedile"
+		"zu": "Kuqedile",
+		"ca": "Completat"
 	},
 	"progress": {
 		"no": "Logger ut...",
@@ -219,7 +224,8 @@
 		"af": "Besig om af te meld?",
 		"el": "\u0393\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7...",
 		"zu": "Iyaphuma...",
-		"xh": "Iyaphuma..."
+		"xh": "Iyaphuma...",
+		"ca": "Tancant la sessió..."
 	},
 	"failed": {
 		"no": "Utlogging feilet",
@@ -256,7 +262,8 @@
 		"af": "Afmelding misluk",
 		"el": "\u0397 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5",
 		"xh": "Ukuphuma kusilele",
-		"zu": "Ukuphuma kuhlulekile"
+		"zu": "Ukuphuma kuhlulekile",
+		"ca": "Ha fallat el tancament de sessió"
 	},
 	"return": {
 		"no": "Tilbake til tjenesten",
@@ -293,7 +300,8 @@
 		"af": "Terug na diens",
 		"el": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1",
 		"xh": "Buyela kwinkonzo",
-		"zu": "Buyela kusevisi"
+		"zu": "Buyela kusevisi",
+		"ca": "Tornar al servei"
 	},
 	"success": {
 		"no": "Du har n&aring; logget ut fra alle tjenestene listet ovenfor.",
@@ -330,7 +338,8 @@
 		"af": "Jy het suksesvol afgemeld.",
 		"el": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03b1\u03c0\u03bf\u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af \u03bc\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1 \u03b1\u03c0\u03cc \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9.",
 		"xh": "Uphume ngokuyimpumelelo kuzo zonke iinkonzo ezidweliswe ngasentla.",
-		"zu": "Uphume ngempumelelo kuwo wonke amasevisi abhalwe ngenhla."
+		"zu": "Uphume ngempumelelo kuwo wonke amasevisi abhalwe ngenhla.",
+		"ca": "Heu sortit correctament de tots els serveis esmentats anteriorment."
 	},
 	"loggedoutfrom": {
 		"no": "Du er n\u00e5 logget ut fra %SP%.",
@@ -367,7 +376,8 @@
 		"af": "Jy is suksesvol afgemeld van %SP% af.",
 		"el": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03b1\u03c0\u03bf\u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af \u03bc\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 %SP%.",
 		"xh": "Ngoku uphume ngokuyimpumelelo kwi-%SP%.",
-		"zu": "Usuphume ngempumelelo kokuthi %SP%."
+		"zu": "Usuphume ngempumelelo kokuthi %SP%.",
+		"ca": "S’ha tancat la sessió amb èxit de %SP%."
 	},
 	"also_from": {
 		"no": "Du er ogs\u00e5 logget inn p\u00e5 disse tjenestene:",
@@ -404,7 +414,8 @@
 		"af": "Jy is ook by di\u00e9 dienste aangemeld:",
 		"el": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ad\u03c2 \u03c4\u03b9\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2:",
 		"zu": "Ungenile futhi kulawa masevisi:",
-		"xh": "Kananjalo ungene kwezi nkonzo:"
+		"xh": "Kananjalo ungene kwezi nkonzo:",
+		"ca": "També heu iniciat la sessió en aquests serveis:"
 	},
 	"logout_all_question": {
 		"no": "Vil du logge ut fra alle tjenestene ovenfor?",
@@ -441,7 +452,8 @@
 		"af": "Wil jy van alle bogenoemde dienste afmeld?",
 		"el": "\u0395\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03b1\u03c0\u03cc \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2\u003b",
 		"xh": "Ngaba ufuna ukuphuma kuzo zonke iinkonzo ezingasentla?",
-		"zu": "Ingabe ufuna ukuphuma kuwo wonke amasevisi angenhla?"
+		"zu": "Ingabe ufuna ukuphuma kuwo wonke amasevisi angenhla?",
+		"ca": "Voleu sortir de tots els serveis següents?"
 	},
 	"logout_all": {
 		"no": "Ja, alle tjenestene over",
@@ -478,7 +490,8 @@
 		"af": "Ja, alle dienste",
 		"el": "\u039d\u03b1\u03b9, \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2",
 		"zu": "Yebo, wonke amasevisi",
-		"xh": "Ewe, zonke iinkonzo"
+		"xh": "Ewe, zonke iinkonzo",
+		"ca": "Sí, tots els serveis"
 	},
 	"logout_only": {
 		"no": "Nei, bare %SP%",
@@ -515,7 +528,8 @@
 		"af": "Nee, net %SP%",
 		"el": "\u038c\u03c7\u03b9, \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 %SP%",
 		"zu": "Cha, ku-%SP% kuphela",
-		"xh": "Hayi, kuphela %SP%"
+		"xh": "Hayi, kuphela %SP%",
+		"ca": "No, només %SP%"
 	},
 	"incapablesps": {
 		"no": "En eller flere av tjenestene du er logget inn p\u00e5 <i>st\u00f8tter ikke logout<\/i>. Lukk nettleseren, dersom du \u00f8nsker \u00e5 logge ut fra disse tjenestene.",
@@ -552,7 +566,8 @@
 		"af": "Een of meerdere dienste waarby jy aangemeld het, <i>ondersteun nie afmelding nie<\/i>. Om seker te wees datal jou sessies afgesluit word, is dit beter om jou <i>webblaaier toe te maak<\/i>.",
 		"el": "\u039c\u03af\u03b1 \u03ae \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2 \u03bc\u03b5 \u03c4\u03b9\u03c2 \u03bf\u03c0\u03bf\u03af\u03b5\u03c2 \u03b5\u03af\u03c3\u03c4\u03b5 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2\u002f\u03b7 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03bf\u03c5\u03bd \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u002e \u0393\u03b9\u03b1 \u03c4\u03bf \u03ba\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03b9\u03ce\u03bd \u03c3\u03b1\u03c2 (sessions), \u03c3\u03b1\u03c2 \u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 <i>\u03ba\u03bb\u03b5\u03af\u03c3\u03b5\u03c4\u03b5<\/i> \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03bb\u03bf\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 (web browser).",
 		"zu": "Isevisi eyodwa noma ngaphezulu ongene kuyo <i>ayikusekeli ukuphuma</i>. Ukuze wenze isiqiniseko sokuthi wonke amaseshini akho avaliwe, ukhuthazwa ukuthi <i>uvale isiphequluli sakho sewebhu</i>.",
-		"xh": "Inkonzo enye okanye ezingakumbi ongeneyo kuzo <i>azikuxhasi ukuphuma</i>. Ukuqinisekisa zonke iiseshoni zakho zivaliwe, ukhuthazwa <i>uvale ibhrawuza yewebhu</i>."
+		"xh": "Inkonzo enye okanye ezingakumbi ongeneyo kuzo <i>azikuxhasi ukuphuma</i>. Ukuqinisekisa zonke iiseshoni zakho zivaliwe, ukhuthazwa <i>uvale ibhrawuza yewebhu</i>.",
+		"ca": "Un o més dels serveis que heu accedit a <i>no admeten tancar la sessió<\/i>. Per assegurar-vos que totes les vostres sessions estan tancades, us animem a <i>tancar el vostre navegador web<\/i>."
 	},
 	"no": {
 		"no": "Nei",
@@ -589,7 +604,8 @@
 		"af": "Nee",
 		"el": "\u038c\u03c7\u03b9",
 		"xh": "Hayi",
-		"zu": "Cha"
+		"zu": "Cha",
+		"ca": "No"
 	},
 	"logging_out_from": {
 		"sl": "Odjava iz naslednjih storitev:",
@@ -625,7 +641,8 @@
 		"af": "Afmelding van die volgende dienste:",
 		"el": "Γίνεται αποσύνδεση από τις ακόλουθες υπηρεσίες:",
 		"zu": "Iyaphuma kumasevisi alandelayo:",
-		"xh": "Iphuma kwezi nkonzo zilandelayo:"
+		"xh": "Iphuma kwezi nkonzo zilandelayo:",
+		"ca": "Sortida dels serveis següents:"
 	},
 	"failedsps": {
 		"sl": "Odjava z ene ali ve\u010d storitev ni uspela. Odjavo dokon\u010dajte tako, da <i>zaprete spletni brskalnik<\/i>.",
@@ -660,6 +677,7 @@
 		"af": "Dit was nie moontlik om van een of meer dienste af te meld nie. Om seker te wees dat al jou sessies afgesluit word, is dit beter om jou <i>webblaaier toe te maak<\/i>.",
 		"el": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03b1\u03c0\u03cc \u03bc\u03af\u03b1 \u03ae \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2\u002e \u0393\u03b9\u03b1 \u03c4\u03bf \u03ba\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03b9\u03ce\u03bd \u03c3\u03b1\u03c2 (sessions), \u03c3\u03b1\u03c2 \u03c3\u03c5\u03bd\u03b9\u03c3\u03c4\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 <i>\u03ba\u03bb\u03b5\u03af\u03c3\u03b5\u03c4\u03b5<\/i> \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03bb\u03bf\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 (web browser).",
 		"xh": "Awukwazi ukuphuma kwinkonzo enye okanye ezingakumbi. Ukuqinisekisa zonke iiseshoni zakho zivaliwe, ukhuthazwa <i>uvale ibhrawuza yewebhu</i>.",
-		"zu": "Ayikwazi ukuphuma kusevisi eyodwa noma ngaphezulu. Ukuze wenze isiqiniseko sokuthi wonke amaseshini akho avaliwe, ukhuthazwa ukuthi <i>uvale isiphequluli sakho sewebhu</i>."
+		"zu": "Ayikwazi ukuphuma kusevisi eyodwa noma ngaphezulu. Ukuze wenze isiqiniseko sokuthi wonke amaseshini akho avaliwe, ukhuthazwa ukuthi <i>uvale isiphequluli sakho sewebhu</i>.",
+		"ca": "No es pot tancar la sessió d'un o més serveis. Per assegurar-vos que totes les vostres sessions estan tancades, us animem a <i>tancar el vostre navegador web<\/i>."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/status.definition.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/status.definition.json
index a82c97fcbe..4a92ab3b91 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/status.definition.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/status.definition.json
@@ -5,9 +5,6 @@
 	"header_shib": {
 		"en": "Shibboleth demo"
 	},
-	"header_wsfed": {
-		"en": "WS-Fed SP Demo Example"
-	},
 	"header_diagnostics": {
 		"en": "SimpleSAMLphp Diagnostics"
 	},
diff --git a/vendor/simplesamlphp/simplesamlphp/dictionaries/status.translation.json b/vendor/simplesamlphp/simplesamlphp/dictionaries/status.translation.json
index 8131661d85..7b558557ed 100644
--- a/vendor/simplesamlphp/simplesamlphp/dictionaries/status.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/dictionaries/status.translation.json
@@ -33,7 +33,8 @@
 		"ru": "\u0414\u0435\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 SAML 2.0 SP",
 		"el": "\u0394\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03b1\u03c1\u03bf\u03c7\u03ad\u03b1\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0",
 		"zu": "Isampula Ledemo Ye-SAML 2.0 SP",
-		"xh": "Umzekelo weDemo we-SAML 2.0 SP"
+		"xh": "Umzekelo weDemo we-SAML 2.0 SP",
+		"ca": "Exemple de demostració SAML 2.0 SP"
 	},
 	"header_shib": {
 		"no": "Shibboleth Demo",
@@ -69,43 +70,8 @@
 		"ru": "Shibboleth \u0434\u0435\u043c\u043e",
 		"el": "\u0394\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03b1\u03c1\u03bf\u03c7\u03ad\u03b1\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth",
 		"xh": "Idemo ye-Shibboleth",
-		"zu": "Idemo ye-Shibboleth"
-	},
-	"header_wsfed": {
-		"no": "WS-Fed SP Demo Eksempel",
-		"nn": "Demonstrasjon av WS-Federation SP",
-		"sv": "WS-Fed SP demoexempel",
-		"es": "Ejemplo WS-Fed SP",
-		"fr": "Exemple de d\u00e9monstration de WS-Fed SP",
-		"de": "WS-Fed SP Demo Beispiel",
-		"nl": "WS-Fed SP Demo",
-		"sl": "WS-Fed SP demo primer",
-		"da": "WS-Federation tjenesteudbyder-demo",
-		"hr": "Primjer WS-Fed davatelja usluge",
-		"hu": "WS-Fed SP pr\u00f3ba p\u00e9lda",
-		"fi": "WS-FED SP esimerkki",
-		"pt-br": "WS-Fed SP Exemplo",
-		"pt": "Exemplo de demonstra\u00e7\u00e3o do SP WS-Fed",
-		"pl": "Przyk\u0142adowe Demo WS-Fed SP",
-		"cs": "WS-Fed SP Demo",
-		"eu": "WS-Fed SP Adibidea",
-		"tr": "WS-Fed SP Demo \u00d6rne\u011fi",
-		"it": "Demo di WS-Fed SP",
-		"lt": "WS-Fed SP Demonstracin\u0117s versijos Pavyzdys",
-		"ja": "WS-Fed SP \u30c7\u30e2\u4f8b",
-		"zh-tw": "WS-Fed SP Demo \u7bc4\u4f8b",
-		"et": "WS-Fed SP demon\u00e4ide",
-		"he": "\u05d4\u05d3\u05d2\u05de\u05ea \u05d3\u05d5\u05d2\u05de\u05d4 \u05dc\u05e1\"\u05e9 \u05de\u05e1\u05d5\u05d2 WS-Fed",
-		"zh": "WS-Fed SP \u6f14\u793a\u6848\u4f8b",
-		"ar": "\u0627\u0633\u062a\u0639\u0631\u0627\u0636 \u0645\u062b\u0627\u0644 \u0644 WS-Fed",
-		"lv": "WS-Fed SP demonstr\u0101cijas piem\u0113rs",
-		"id": "Contoh Demo WS-Fed SP",
-		"sr": "WS-Fed SP Demo Primer",
-		"ro": "Exemplu demonstrativ de WS-Fed",
-		"ru": "\u0414\u0435\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 WS-Fed SP",
-		"el": "\u0394\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc\u03c2 \u03a0\u03b1\u03c1\u03bf\u03c7\u03ad\u03b1\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd WS-Fed",
-		"zu": "Isibonelo Sedemo ye-WS-Fed SP",
-		"xh": "Umzekelo weDemo we-WS-Fed SP"
+		"zu": "Idemo ye-Shibboleth",
+		"ca": "Exemple de demostració Shibboleth"
 	},
 	"header_diagnostics": {
 		"no": "SimpleSAMLphp diagnostikk",
@@ -141,7 +107,8 @@
 		"ru": "\u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 SimpleSAMLphp",
 		"el": "\u0394\u03b9\u03b1\u03b3\u03bd\u03c9\u03c3\u03c4\u03b9\u03ba\u03ac SimpleSAMLphp",
 		"zu": "Ukuhlonzwa Kwe-SimpleSAMLphp",
-		"xh": "Uhlalutyo lwe-SimpleSAMLphp"
+		"xh": "Uhlalutyo lwe-SimpleSAMLphp",
+		"ca": "Diagnòstic SimpleSAMLphp"
 	},
 	"some_error_occurred": {
 		"no": "En feil har oppst\u00e5tt",
@@ -177,7 +144,8 @@
 		"ru": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430",
 		"el": "\u03a3\u03c5\u03bd\u03ad\u03b2\u03b7 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1",
 		"zu": "Kuvele iphutha elithile",
-		"xh": "Kwenzeke impazamo ethile"
+		"xh": "Kwenzeke impazamo ethile",
+		"ca": "S'ha produït un error"
 	},
 	"intro": {
 		"no": "Hei, dette er en statusside p\u00e5 SimpleSAMLphp. Her kan du se om sesjonen din er timet ut, hvor lenge det er til den timer ut og attributter som er knyttet til din sesjon.",
@@ -213,7 +181,8 @@
 		"eu": "Kaixo, hau SimpleSAMLphp-ren egoera orria da. Hemendik ikus dezakezu zure saioa iraungi den, zenbat denbora geratzen den hau gerta dadin eta zure saioan dauden atributu guztiak.",
 		"el": "\u03a7\u03b1\u03af\u03c1\u03b5\u03c4\u03b5, \u03b1\u03c5\u03c4\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 SimpleSAMLphp. \u0395\u03b4\u03ce \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b4\u03b5\u03af\u03c4\u03b5 \u03b1\u03bd \u03b7 \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1 \u03c3\u03b1\u03c2 \u0028\u0073\u0065\u0073\u0073\u0069\u006f\u006e\u0029 \u03ad\u03c7\u03b5\u03b9 \u03bb\u03ae\u03be\u03b5\u03b9\u002c \u03c4\u03bf \u03c7\u03c1\u03bf\u03bd\u03b9\u03ba\u03cc \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1 \u03c0\u03bf\u03c5 \u03b4\u03b9\u03b1\u03c1\u03ba\u03b5\u03af \u03ad\u03c9\u03c2 \u03cc\u03c4\u03bf\u03c5 \u03bb\u03ae\u03be\u03b5\u03b9\u002c \u03ba\u03b1\u03b8\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bc\u03b5 \u03c4\u03b7 \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1 \u03c3\u03b1\u03c2.",
 		"zu": "Sawubona, leli ikhasi lesimo se-SimpleSAMLphp. Lapha ungakwazi ukubona ukuthi iseshini yakho iphelelwe isikhathi yini, ukuthi ihlala isikhathi eside kangakanani ngaphambi kokuthi iphelelwe isikhathi kanye nazo zonke izici ezihambisana neseshini yakho.",
-		"xh": "Molo, eli likhasi lobume be-SimpleSAMLphp. Apha ungabona ukuba ngaba iseshoni yakho iphelelwe lixesha, iza kuhlala ixesha elide kangakanani ngaphambi kokuba iphelelwe nazo zonke iimpawu ezincanyathiselweyo kwiseshoni yakho."
+		"xh": "Molo, eli likhasi lobume be-SimpleSAMLphp. Apha ungabona ukuba ngaba iseshoni yakho iphelelwe lixesha, iza kuhlala ixesha elide kangakanani ngaphambi kokuba iphelelwe nazo zonke iimpawu ezincanyathiselweyo kwiseshoni yakho.",
+		"ca": "Hola, aquesta és la pàgina d'estat de SimpleSAMLphp. Aquí podeu veure si la vostra sessió ha caducat, quant de temps dura fins que finalitza el temps i tots els atributs que s'adjunten a la vostra sessió."
 	},
 	"validfor": {
 		"no": "Din sesjon er gyldig i %SECONDS% sekunder fra n\u00e5.",
@@ -249,7 +218,8 @@
 		"eu": "Zure saioa %SECONDS% segundoz izango da baliagarri.",
 		"el": "\u0391\u03c0\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5\u03bd %SECONDS% \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c4\u03b7 \u03bb\u03ae\u03be\u03b7 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1\u03c2 \u03c3\u03b1\u03c2.",
 		"xh": "Iseshoni yakho iza kusebenza kangangemizuzu e-%SECONDS% ukususela ngoku.",
-		"zu": "Iseshini yakho isebenza imizuzwana engu-%SECONDS% ukusuka manje."
+		"zu": "Iseshini yakho isebenza imizuzwana engu-%SECONDS% ukusuka manje.",
+		"ca": "La vostra sessió és vàlida durant %SECONDS% segons des d’ara."
 	},
 	"sessionsize": {
 		"no": "Sesjons st\u00f8rrelse: %SIZE%",
@@ -285,7 +255,8 @@
 		"ro": "Dimensiunea sesiunii: %SIZE%",
 		"el": "\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1\u03c2: %SIZE%",
 		"xh": "Ubukhulu beseshoni: %SIZE%",
-		"zu": "Usayizi weseshini: %SIZE%"
+		"zu": "Usayizi weseshini: %SIZE%",
+		"ca": "Mida de la sessió: %SIZE%"
 	},
 	"attributes_header": {
 		"no": "Dine attributter",
@@ -321,7 +292,8 @@
 		"ro": "Atributele dumneavoastr\u0103",
 		"el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2",
 		"zu": "Izici zakho",
-		"xh": "Iimpawu zakho"
+		"xh": "Iimpawu zakho",
+		"ca": "Els teus atributs"
 	},
 	"logout": {
 		"no": "Logg ut",
@@ -357,7 +329,8 @@
 		"ro": "Deautentificare",
 		"el": "\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7",
 		"xh": "Phuma",
-		"zu": "Phuma"
+		"zu": "Phuma",
+		"ca": "Tancar sessió"
 	},
 	"subject_header": {
 		"es": "Identificador SAML",
@@ -367,7 +340,8 @@
 		"da": "SAML emne",
 		"el": "\u03a5\u03c0\u03bf\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf (subject) SAML",
 		"zu": "Isihloko Se-SAML",
-		"xh": "Umbandela we-SAML"
+		"xh": "Umbandela we-SAML",
+		"ca": "Assumpte SAML"
 	},
 	"subject_notset": {
 		"es": "sin valor",
@@ -377,7 +351,8 @@
 		"da": "ikke angivet",
 		"el": "\u03b4\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03bf\u03c1\u03b9\u03c3\u03c4\u03b5\u03af",
 		"xh": "ayikasetwa",
-		"zu": "akusethiwe"
+		"zu": "akusethiwe",
+		"ca": "no establert"
 	},
 	"subject_format": {
 		"es": "Formato",
@@ -387,14 +362,17 @@
 		"da": "Format",
 		"el": "\u039c\u03bf\u03c1\u03c6\u03ae (format)",
 		"zu": "Ifomethi",
-		"xh": "Ufomatho"
+		"xh": "Ufomatho",
+		"ca": "Format"
 	},
 	"authData_header": {
 		"xh": "Ungqinisiso lweNgcombolo",
-		"zu": "I-AuthData"
+		"zu": "I-AuthData",
+		"ca": "AuthData"
 	},
 	"authData_summary": {
 		"xh": "Cofa ukuze ubone uNgqinisiso lweNgcombolo",
-		"zu": "Qhafaza ukuze ubuke i-AuthData"
+		"zu": "Qhafaza ukuze ubuke i-AuthData",
+		"ca": "Feu clic per veure AuthData"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/index.md b/vendor/simplesamlphp/simplesamlphp/docs/index.md
index c7df4fe4c5..995e952477 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/index.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/index.md
@@ -2,6 +2,7 @@ SimpleSAMLphp Documentation
 ===========================
 
  * [Installing SimpleSAMLphp](simplesamlphp-install)
+    * [Upgrade notes for version 1.18](simplesamlphp-upgrade-notes-1.18)
     * [Upgrade notes for version 1.17](simplesamlphp-upgrade-notes-1.17)
     * [Upgrade notes for version 1.16](simplesamlphp-upgrade-notes-1.16)
     * [Upgrade notes for version 1.15](simplesamlphp-upgrade-notes-1.15)
@@ -30,7 +31,7 @@ SimpleSAMLphp Documentation
   * [Configuring HTTP-Artifact](./simplesamlphp-artifact-idp)
   * [Identity Provider Advanced Topics](simplesamlphp-idp-more)
   * [Holder-of-Key profile](simplesamlphp-hok-idp)
- * [Automated Metadata Management](simplesamlphp-automated_metadata)
+ * [Automated Metadata Management](https://github.com/simplesamlphp/simplesamlphp-module-metarefresh/blob/master/docs/simplesamlphp-automated_metadata.md)
  * [Maintenance and configuration](simplesamlphp-maintenance) - covers session handling, php configuration etc.
  * [Authentication Processing Filters](simplesamlphp-authproc) - attribute filtering, attribute mapping, consent, group generation etc.
  * [Advanced features](simplesamlphp-advancedfeatures) - covers bridging protocols, attribute filtering, etc.
@@ -48,7 +49,7 @@ Documentation on specific SimpleSAMLphp modules:
  * [Consent module](./consent:consent)
  * [Installing and configuring the consentAdmin module](./consentAdmin:consentAdmin)
  * [Authorization](./authorize:authorize)
- * [autotest Module](./autotest:test)
+ * [autotest Module](https://github.com/simplesamlphp/simplesamlphp-module-autotest/blob/v1.0/README.md)
  * [Statistics](./statistics:statistics)
 
 Documentation for SimpleSAMLphp developers:
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-advancedfeatures.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-advancedfeatures.md
index a1ee444dd3..69ddf67c4c 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-advancedfeatures.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-advancedfeatures.md
@@ -60,7 +60,7 @@ Automatic update of SAML 2.0 Metadata XML from HTTPS
 ----------------------------------------------------
 
 The `metarefresh` module is the preferred method for doing this.
-Please see the [metarefresh documentation](simplesamlphp-automated_metadata).
+Please see the [metarefresh documentation](https://github.com/simplesamlphp/simplesamlphp-module-metarefresh/blob/master/docs/simplesamlphp-automated_metadata.md).
 
 
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-authproc.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-authproc.md
index 20c1eb53b4..2dc34990f7 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-authproc.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-authproc.md
@@ -27,7 +27,7 @@ Be aware that Authentication Proccessing Filters do replace some of the previous
 
   * `attributemap`
   * `attributealter`
-  * attribute filter
+  * `attribute filter`
 
 Later in this document, we will desribe in detail the alternative Authentication Proccessing Filters that will replicate these functionalities.
 
@@ -124,14 +124,13 @@ Auth Proc Filters included in the SimpleSAMLphp distribution
 
 The following filters are included in the SimpleSAMLphp distribution:
 
-- [`authorize:Authorize`](./authorize:authorize): Access control based on regular expressions.
-- [`consent:Consent`](./consent:consent): Ask the user for consent before transmitting attributes.
 - [`core:AttributeAdd`](./core:authproc_attributeadd): Add attributes to the response.
 - [`core:AttributeCopy`](./core:authproc_attributecopy): Copy existing attributes to the response.
 - [`core:AttributeAlter`](./core:authproc_attributealter): Do search-and-replace on attributevalues.
 - [`core:AttributeLimit`](./core:authproc_attributelimit): Limit the attributes in the response.
 - [`core:AttributeMap`](./core:authproc_attributemap): Change the name of the attributes.
 - [`core:AttributeRealm`](./core:authproc_attributerealm): (deprecated) Create an attribute with the realm of the user.
+- [`core:AttributeValueMap`](./core:authproc_attributevaluemap): Map attribute values to new values and attribute name.
 - [`core:Cardinality`](./core:authproc_cardinality): Ensure the number of attribute values is within the specified multiplicity.
 - [`core:CardinalitySingle`](./core:authproc_cardinalitysingle): Ensure the correct cardinality of single-valued attributes.
 - [`core:GenerateGroups`](./core:authproc_generategroups): Generate a `group` attribute for the user.
@@ -142,7 +141,6 @@ The following filters are included in the SimpleSAMLphp distribution:
 - [`core:StatisticsWithAttribute`](./core:authproc_statisticswithattribute): Create a statistics logentry.
 - [`core:TargetedID`](./core:authproc_targetedid): Generate the `eduPersonTargetedID` attribute.
 - [`core:WarnShortSSOInterval`](./core:authproc_warnshortssointerval): Give a warning if the user logs into the same SP twice within a few seconds.
-- [`expirycheck:ExpiryDate`](./expirycheck:expirycheck): Block access to accounts that have expired.
 - [`saml:AttributeNameID`](./saml:nameid): Generate custom NameID with the value of an attribute.
 - [`saml:AuthnContextClassRef`](./saml:authproc_authncontextclassref): Set the authentication context in the response.
 - [`saml:ExpectedAuthnContextClassRef`](./saml:authproc_expectedauthncontextclassref): Verify the user's authentication context.
@@ -151,7 +149,6 @@ The following filters are included in the SimpleSAMLphp distribution:
 - [`saml:PersistentNameID`](./saml:nameid): Generate persistent NameID from an attribute.
 - [`saml:PersistentNameID2TargetedID`](./saml:nameid): Store persistent NameID as eduPersonTargetedID.
 - [`saml:TransientNameID`](./saml:nameid): Generate transient NameID.
-- [`smartattributes:SmartID`](./smartattributes:smartattributes): Generate user ID attribute based on several attributes.
 
 See the [Third-party modules](https://simplesamlphp.org/modules) page on the SimpleSAMLphp website
 for externally hosted modules that may provide a processing filter.
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-changelog.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-changelog.md
index 940d49ff65..d44838b815 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-changelog.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-changelog.md
@@ -6,17 +6,164 @@ SimpleSAMLphp changelog
 This document lists the changes between versions of SimpleSAMLphp.
 See the upgrade notes for specific information about upgrading.
 
-## Version 1.17.8
+## Version 1.18.8
 
-Released 2019-11-20
+Released 2020-09-02
 
+  * Fixed Artifact Resolution due to incorrect use of Issuer objects (#1343).
+  * Fixed some of the German translations (#1331). Thanks @htto!
+  * Harden against CVE-2020-13625;  this package is not affected, but 3rd party modules may (#1333).
+  * Harden against sevaral JS issues (npm update & npm audit fix)
+  * Fixed inconsistent configuration of backtraces logging
+  * Support for Symfony 3.x is now deprecated
+  * Support for Twig 1.x is now deprecated
+
+### authcrypt
+  * The dependency for whitehat101/apr1-md5 was moved from the base repository to the module (v0.9.2)
+
+### authx509
+  * Restore PHP 5.6 compatibility (v0.9.5)
+
+### cron
+  * Fixed old-ui (#1248)
+
+### ldap
+  * Moved array with binary attributes to authsource config (v0.9.9)
+    Instead of having to edit code, you can now set 'attributes.binary' in the authsource configuration.
+
+### metarefresh
+  * Add attributewhitelist to support e.g. R&S+Sirtfi (v0.9.5)
+  * Restore PHP 5.6 compatibility (v0.9.6)
+
+### negotiate ###
+  * Restore PHP 5.6 compatibility (v0.9.8)
+  * Fixed a link (v0.9.9)
+
+### saml2 library
+  * Fixed a bug in the AuthnRequest-class that would raise an InvalidArgumentException when setting
+      the AssertionConsumerServiceIndex as an integer on an saml:SP authsource.
+      Thanks to Andrea @ Oracle for reporting this.
+
+## Version 1.18.7
+
+Released 2020-05-12
+
+  * Fix spurious warnings when session_create_id() fails to create ID (#1291)
+  * Fix inconsistency in the way PATH_INFO is being used (#1227).
+  * Fix a potential security issue [CVE-2020-11022](https://nvd.nist.gov/vuln/detail/CVE-2020-11022) by updating jQuery. If any of your custom modules rely on jQuery,
+      make sure you read the following [update notes](https://jquery.com/upgrade-guide/3.5/), since jQuery has solved this in a non-BC way (#1321).
+  * Fix incorrect Polish translations (#1311).
+  * Fix a broken migration query in the LogoutStore (#1324).
+  * Fix an issue with the SameSite cookie parameter when running on PHP versions older than 7.3 (#1320).
+
+### adfs
+  * Fixed a broken link to one of the assets (v0.9.6).
+
+### ldap
+  * Handle binary attributes in a generic way (v0.9.5).
+
+### oauth
+  * Fix PHP 7.4 incompatibility (v0.9.2).
+
+### preprodwarning
+  * Fix Dutch translations (v0.9.2).
+
+### sanitycheck
+  * Fix broken HTML (v0.9.1).
+
+### saml
+  * Fix several issues in the saml:NameIDAttribute authproc filter (#1325).
+
+### saml2 library
+  * fixed a standards compliance issue regarding ContactPerson EMail addresses (v3.4.4).
+  * fixed an issue parsing very large metadata files (v3.4.3).
+
+## Version 1.18.6
+
+Released 2020-04-17
+
+  * Fix source code disclosure on case-insensitive file systems. See
+    [SSPSA 202004-01](https://simplesamlphp.org/security/202004-01).
+  * Fix spurious error in logs when using a custom theme (#1312).
+  * Fix broken metadata converter (#1305).
+
+## Version 1.18.5
+
+Released 2020-03-19
+
+  * Make the URLs for the cron module work again (#1248).
+  * Email error reports now include metadata again (#1269).
+  * Fix exampleauth module when using the legacy UI (#1275).
+  * Fix authorize module when using custom reject message.
+  * Documentation improvements.
+  * Fix connection persistence for deployments that switched to memcached.
+
+## Version 1.18.4
+
+Released 2020-01-24
+
+  * Resolved a security issue in email reports. See
+    [SSPSA 202001-01](https://simplesamlphp.org/security/202001-01).
+  * Resolved a security issue with the logging system. See
+    [SSPSA 202001-02](https://simplesamlphp.org/security/202001-02).
+  * Fixed SQL store index creation for PostgreSQL.
+  * Handle case where cookie 'domain' parameter was not set.
+  * Update versions of included JavaScript dependencies.
+
+## Version 1.18.3
+
+Released 2019-12-09
+
+  * Fixed an issue with several modules being enabled by default (#1257).
+  * Fixed an issue with metadata generation for trusted entities (#1247, #1251).
+
+### ldap
+  * Fixed an issue affecting the installation in case-insensitive file systems (#1253).
+
+## Version 1.18.2
+
+Released 2019-11-26
+
+  * Fixed an issue with the `ldap` module that prevented installing SimpleSAMLphp from the repository (#1241).
+
+## Version 1.18.1
+
+Released 2019-11-26
+
+  * Fixed an issue that prevented custom themes from working (#1240).
+  * Fixed an issue with translations in the discovery service (#1244).
+  * Fixed an issue with schema validation.
+
+## Version 1.18.0
+
+Released 2019-11-19
+
+  * Fixed an issue with warnings being logged when using PHP 7.2 or newer (#1168).
+  * Fixed an issue with web server aliases or rewritten URLs not working (#1023, #1093).
+  * Fixed an issue that prevented errors to be logged if the log file was not writeable (#1194).
+  * Fixed an issue with old-style NameIDPolicy configurations that disallowed creating new NameIDs (#1230).
   * Resolved a security issue that exposed host information to unauthenticated users. See
     [SSPSA 201911-02](https://simplesamlphp.org/security/201911-02).
+  * Replaced custom Email class with the phpmailer library.
+  * Allow logging to STDERR in the `logging.handler` option by setting it to `stderr`.
+  * Allow use of stream wrappers (e.g. s3://) in paths.
+  * Improved 'update or insert' handling for different SQL drivers.
+  * The default algorithm within the TimeLimitedToken class has been bumped from SHA-1 to SHA-256
+    as announced by deprecation notice in 1.15.
+  * Most modules have been externalized. They will not be included in our future releases by default,
+    but will be easily installable using composer. For now, they are still included in the package.
+  * Minor fixes to code, CSS and documentation.
 
-### consentAdmin
+### metarefresh
+  * The algorithm to compute the fingerprint of the certificate that signed
+    metadata can be specified with the new `validateFingerprintAlgorithm`
+    configuration option.
 
-  * Fixed an issue with CSS and Javascript not loading for the module in the new user
-    interface.
+### saml
+  * Make the id of the generated signed metadata change only when metadata content changes.
+  * New SP metadata configuration options `AssertionConsumerService` and `SingleLogoutServiceLocation`
+    to allow overriding the default URL paths.
+  * Added support for per-IDP configurable `AuthnContextClassRef`/`AuthnContextComparison`.
 
 ## Version 1.17.7
 
@@ -512,7 +659,7 @@ Released 2017-04-27
   * Resolved a security issue with unauthenticated encryption in the SimpleSAML\Utils\Crypto class. See [SSPSA 201704-01](https://simplesamlphp.org/security/201704-01).
   * Added requirement for the Multibyte String PHP extension and the corresponding checks.
   * Set a default name for SimpleSAMLphp sessions in the configuration template for the PHP session handler.
-  
+
 ## Version 1.14.12
 
 Released 2017-03-30
@@ -903,7 +1050,7 @@ Released 2013-06-05.
   * Workaround for SSL SNI extension not being correctly set.
   * New language cookie and parameter config options.
   * Add 'module.enable' configuration option for enabling/disabling modules.
-  * Check for existence of memcache extension. 
+  * Check for existence of memcache extension.
   * Initial support for limiting redirects to trusted hosts.
   * Demo example now shows both friendly and canonical name of the attributes.
   * Other minor fixes for bugs and typos.
@@ -1695,8 +1842,8 @@ Updates to `config.php`. Please check for updates in your local modified configu
   * Documentation update. New authencation source API now default and documented.
   * New authentication source (new API):
     * LDAP
-    * LDAPMulti  
-	* YubiKey authentication source. (Separate module)  
+    * LDAPMulti
+	* YubiKey authentication source. (Separate module)
 	* Facebook authentication source. (Separate module)
   * New Authentication Processing Filter:
     * AttributeAlter
@@ -1719,7 +1866,7 @@ Updates to `config.php`. Please check for updates in your local modified configu
   * New module: Aggregator: Aggregates metadata. Used in Kalmar Union.
   * New module: Metarefresh, download, parses and consumes metadata.
   * New module: SanityCheck. Checks if things looks good and reports bad configuration etc.
-  * New module: Cron. Will perform tasks regularly. 
+  * New module: Cron. Will perform tasks regularly.
   * Module: SAML2.0. SAML 2.0 SP implemented as an module. Yet not documented how to use, but all SAML 2.0 SP functionality may be moved out to this module for better modularization.
   * New module: statistics. Parses STAT log files, and aggregates based on a generic rule system. Output is stored in aggregated text files, and a frontend is included to present statistics with tables and graphs. Used sanitycheck and cron.
   * Added support for IdP initiated SSO.
@@ -1745,7 +1892,7 @@ Updates to `config.php`. Please check for updates in your local modified configu
   * Added notes about how to aggregate and consume metadata. Just a start.
   * Large improvements to Configuration class, and config helper functions.
   * STAT logging is moved into separate authenticaion processing filter.
-  * Fix for NoPassive responses to Google Apps with alternative NameIDFormats.  
+  * Fix for NoPassive responses to Google Apps with alternative NameIDFormats.
   * LDAP module allows to search multiple searchbases.
   * All documentation is converted from docbook to markdown format.
   * Added headers to not allow google to index pages.
@@ -1759,7 +1906,7 @@ Updates to `config.php`. Please check for updates in your local modified configu
   * Improved UI on default theme
   * Fix for session duration in the Conditions element in the Assertion (SAML 2.0).
   * Updated with new Feide IdP metadata in metadata-templates
-  
+
 
 
 ## Version 1.3
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-customauth.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-customauth.md
index ac9b04e245..8e6ee8d257 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-customauth.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-customauth.md
@@ -1,7 +1,7 @@
 Implementing custom username/password authentication
 ====================================================
 
-This is a step-by-step guide for creating a custom username/password [authentication source](./simplesamlphp-authsource.md) for SimpleSAMLphp.
+This is a step-by-step guide for creating a custom username/password [authentication source](./simplesamlphp-authsource) for SimpleSAMLphp.
 An authentication source is responsible for authenticating the user, typically by getting a username and password, and looking it up in some sort of database.
 
 <!-- {{TOC}} -->
@@ -9,7 +9,7 @@ An authentication source is responsible for authenticating the user, typically b
 Create a custom module
 ----------------------
 
-All custom code for SimpleSAMLphp should be contained in a [module](./simplesamlphp-modules.md).
+All custom code for SimpleSAMLphp should be contained in a [module](./simplesamlphp-modules).
 This ensures that you can upgrade your SimpleSAMLphp installation without overwriting your own code.
 In this example, we will call the module `mymodule`.
 It will be located under `modules/mymodule`.
@@ -40,6 +40,8 @@ To begin with, we will create a very simple authentication source, where the use
 Create the file `modules/mymodule/lib/Auth/Source/MyAuth.php` with the following contents:
 
     <?php
+    namespace SimpleSAML\Module\mymodule\Auth\Source;
+
     class MyAuth extends \SimpleSAML\Module\core\Auth\UserPassBase {
         protected function login($username, $password) {
             if ($username !== 'theusername' || $password !== 'thepassword') {
@@ -58,7 +60,7 @@ Some things to note:
   - The classname is `\SimpleSAML\Module\mymodule\Auth\Source\MyAuth`.
     This tells SimpleSAMLphp to look for the class in `modules/mymodule/lib/Auth/Source/MyAuth.php`.
 
-  - Our authentication source subclassese `\SimpleSAML\Module\core\Auth\UserPassBase`.
+  - Our authentication source subclasses `\SimpleSAML\Module\core\Auth\UserPassBase`.
     This is a helper-class that implements much of the common code needed for username/password authentication.
 
   - The `login` function receives the username and password the user enters.
@@ -214,7 +216,7 @@ Note that we have updated the username & password to "theconfigusername" and "th
 A more complete example - custom database authentication
 --------------------------------------------------------
 
-The [sqlauth:SQL](../modules/sqlauth/docs/sql.md) authentication source can do simple authentication against SQL databases.
+The [sqlauth:SQL](./sqlauth:sql) authentication source can do simple authentication against SQL databases.
 However, in some cases it cannot be used, for example because the database layout is too complex, or because the password validation routines cannot be implemented in SQL.
 What follows is an example of an authentication source that fetches an user from a database, and validates the password using a custom function.
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-errorhandling.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-errorhandling.md
index f7251550b6..ddefac1648 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-errorhandling.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-errorhandling.md
@@ -147,7 +147,7 @@ There are two methods in this class that deals with exceptions:
 #### `throwException`
 
 This method delivers the exception to the code that initialized the exception handling in the authentication state.
-That would be `\SimpleSAML\Auth\DefaultAuth` for authtentication sources, and `www/saml2/idp/SSOService.php` for processing filters.
+That would be `www/saml2/idp/SSOService.php` for processing filters.
 To configure how and where the exception should be delivered, there are two fields in the state-array which can be set:
 
 * `\SimpleSAML\Auth\State::EXCEPTION_HANDLER_FUNC`, in which case the exception will be delivered by a function call to the function specified in that field.
@@ -173,17 +173,6 @@ The following code illustrates this behaviour:
     }
 
 
-### `\SimpleSAML\Auth\DefaultAuth`
-
-This class accepts an `$errorURL` parameter to the `initLogin()` function.
-This parameter is stored in the `\SimpleSAML\Auth\State::EXCEPTION_HANDLER_URL` of the state array.
-Exceptions thrown by the authentication source will be delivered to that URL.
-
-It also wraps the call to the `authenticate()` function inside a try-catch block.
-Any exceptions thrown during that function call will be delivered to the URL specified in the `$errorURL` parameter.
-This is done for consistency, since `\SimpleSAML\Auth\DefaultAuth` never transfers control back to the caller by returning.
-
-
 ### `\SimpleSAML\Auth\ProcessingChain`
 
 This class requires the caller to add the error handler to the state array before calling the `processState()` function.
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-idp.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-idp.md
index 2a8cd83ff8..48547ba31f 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-idp.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-idp.md
@@ -110,7 +110,7 @@ In this setup, this file should contain a single entry:
 		],
 	];
 
-This configuration creates two users - `student` and `employee`, with the passwords `studentpass` and `employeepass`. The username and password is stored in the array index (`student:studentpass` for the `student`-user. The attributes for each user is configured in the array referenced by the index. For the student user, these are:
+This configuration creates two users - `student` and `employee`, with the passwords `studentpass` and `employeepass`. The username and password are stored in the array index (`student:studentpass` for the `student`-user). The attributes for each user are configured in the array referenced by the index. So for the student user, these are:
 
 	[
 		'uid' => ['student'],
@@ -120,10 +120,10 @@ This configuration creates two users - `student` and `employee`, with the passwo
 The attributes will be returned by the IdP when the user logs on.
 
 
-Creating a SSL self signed certificate
---------------------------------------
+Creating a self signed certificate
+----------------------------------
 
-Here is an example of an `openssl`-command which can be used to generate a new private key key and the corresponding self-signed certificate.
+The IdP needs a certificate to sign its SAML assertions with. Here is an example of an `openssl`-command which can be used to generate a new private key key and the corresponding self-signed certificate. The private key and certificate go into the directory defined in the certdir setting (defaults to `cert/`)
 
 This key and certificate can be used to sign SAML messages:
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-install.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-install.md
index 231d27cf92..0334ba4152 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-install.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-install.md
@@ -27,7 +27,7 @@ Prerequisites
 -------------
 
  * A web server capable of executing PHP scripts.
- * PHP version >= 5.5.0.
+ * PHP version >= 5.6.0.
  * Support for the following PHP extensions:
    * Always required: `date`, `dom`, `hash`, `libxml`, `openssl`, `pcre`, `SPL`, `zlib`, `json`, `mbstring`
    * When automatically checking for latest versions, and used by some modules: `cURL`
@@ -130,7 +130,7 @@ one possible configuration.
 Find the Apache configuration file for the virtual hosts where you want to run SimpleSAMLphp. The configuration may
 look like this:
 
-```apacheconfig
+```
     <VirtualHost *>
             ServerName service.example.com
             DocumentRoot /var/www/service.example.com
@@ -140,15 +140,7 @@ look like this:
             Alias /simplesaml /var/simplesamlphp/www
 
             <Directory /var/simplesamlphp/www>
-                <IfModule !mod_authz_core.c>
-                # For Apache 2.2:
-                Order allow,deny
-                Allow from all
-                </IfModule>
-                <IfModule mod_authz_core.c>
-                # For Apache 2.4:
                 Require all granted
-                </IfModule>
             </Directory>
     </VirtualHost>
 ```
@@ -158,10 +150,10 @@ Note the `Alias` directive, which gives control to SimpleSAMLphp for all urls ma
 them are accessible through the `www` subdirectory of your SimpleSAMLphp installation. You can name the alias 
 whatever you want, but the name must be specified in the `baseurlpath` configuration option in the `config.php` file of 
 SimpleSAMLphp as described in
-[the section called “SimpleSAMLphp configuration: config.php”](#sect.config "SimpleSAMLphp configuration: config.php").
+[the section called “SimpleSAMLphp configuration: config.php”](#section_6 "SimpleSAMLphp configuration: config.php").
 Here is an example of how this configuration may look like in `config.php`:
 
-```php
+```
 $config = [
     [...]
     'baseurlpath' => 'simplesaml/',
@@ -179,7 +171,7 @@ directory too, use the `metadatadir` configuration option to specify the locatio
 
 This is just the basic configuration to get things working. For a checklist
 further completing your documentation, please see
-[Maintenance and configuration: Apache](simplesamlphp-maintenance.md#apache-configuration).
+[Maintenance and configuration: Apache](simplesamlphp-maintenance#section_5).
 
 
 Configuring Nginx
@@ -203,20 +195,17 @@ look like this:
 
         ssl_certificate        /etc/pki/tls/certs/idp.example.com.crt;
         ssl_certificate_key    /etc/pki/tls/private/idp.example.com.key;
-        ssl_protocols          TLSv1.1 TLSv1.2;
-        ssl_ciphers            HIGH:!aNULL:!MD5;
+        ssl_protocols          TLSv1.3 TLSv1.2;
+        ssl_ciphers            EECDH+AESGCM:EDH+AESGCM;
 
         location ^~ /simplesaml {
             alias /var/simplesamlphp/www;
 
-            location ~ \.php(/|$) {
-                root             /var/simplesamlphp/www;
-                fastcgi_pass     127.0.0.1:9000;
-                fastcgi_index    index.php;
-                fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
-                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
-                fastcgi_param    PATH_INFO $fastcgi_path_info;
+            location ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
                 include          fastcgi_params;
+                fastcgi_pass     $fastcgi_pass;
+                fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
+                fastcgi_param    SCRIPT_NAME /simplesaml$phpfile;
             }
         }
     }
@@ -230,7 +219,7 @@ There are a few steps that you should complete in the main configuration file, `
 -  Set the `baseurlpath` configuration option. Make it point to the canonical URL of your deployment, where
    SimpleSAMLphp can be reached:
    
-   ```php
+   ```
        'baseurlpath' => 'https://your.canonical.host.name/simplesaml/',
    ```
 
@@ -242,10 +231,10 @@ There are a few steps that you should complete in the main configuration file, `
 -  Set an administrator password. This is needed to access some of the pages in your SimpleSAMLphp installation web
    interface.
    
-   Hashed passwords can also be used here. See the [`authcrypt`](../modules/authcrypt/docs/authcrypt.md) documentation
+   Hashed passwords can also be used here. See the [`authcrypt`](./authcrypt:authcrypt) documentation
    for more information.
 
-   ```php
+   ```
        'auth.adminpassword' => 'setnewpasswordhere',
    ```
 
@@ -259,7 +248,7 @@ There are a few steps that you should complete in the main configuration file, `
 
    Here is an example of the configuration option:
 
-   ```php
+   ```
        'secretsalt' => 'randombytesinsertedhere',
    ```
 
@@ -276,7 +265,7 @@ There are a few steps that you should complete in the main configuration file, `
 -  Set technical contact information. This information will be available in the generated metadata. The e-mail address
    will also be used for receiving error reports sent automatically by SimpleSAMLphp. Here is an example:
 
-   ```php
+   ```
        'technicalcontact_name' => 'John Smith',
        'technicalcontact_email' => 'john.smith@example.com',
    ```
@@ -284,13 +273,13 @@ There are a few steps that you should complete in the main configuration file, `
 -  If you use SimpleSAMLphp in a country where English is not widespread, you may want to change the default language
    from English to something else:
 
-   ```php
+   ```
        'language.default' => 'no',
    ```
 
 -  Set your timezone
 
-   ```php
+   ```
        'timezone' => 'Europe/Oslo',
    ```
 
@@ -302,11 +291,12 @@ Configuring PHP
 
 ### Sending e-mails from PHP
 
-Some parts of SimpleSAMLphp will allow you to send e-mails. For example, sending error reports to technical admin. If
+Some parts of SimpleSAMLphp will allow you to send e-mails. For example, sending error reports to the technical admin. If
 you want to make use of this functionality, you should make sure your PHP installation is configured to be able to
-send e-mails. It's a common problem that PHP is not configured to send e-mails properly. The configuration differs
-from system to system. On UNIX, PHP is using sendmail, on Windows SMTP.
+send e-mails.
 
+By default SimpleSAMLphp uses the PHP `mail()` function, which you can configure via `php.ini`.
+For more advanced configuration, including using a remote SMTP server, see the `mail.*` options in `config.php`.
 
 Enabling and disabling modules
 ------------------------------
@@ -314,7 +304,7 @@ Enabling and disabling modules
 If you want to enable some of the modules that are installed with SimpleSAMLphp, but are disabled by default, you 
 can do that in the configuration:
 
-```php
+```
     'module.enable' => [
          'exampleauth' => true, // Setting to TRUE enables.
          'saml' => false, // Setting to FALSE disables.
@@ -381,7 +371,7 @@ in a separate document.
    + [Remote SP reference](simplesamlphp-reference-sp-remote)
    + [Setting up an IdP for G Suite (Google Apps)](simplesamlphp-googleapps)
    + [Advanced Topics](simplesamlphp-idp-more)
- - [Automated Metadata Management](simplesamlphp-automated_metadata)
+ - [Automated Metadata Management](https://github.com/simplesamlphp/simplesamlphp-module-metarefresh/blob/master/docs/simplesamlphp-automated_metadata.md)
  - [Maintenance and configuration](simplesamlphp-maintenance)
 
 
@@ -413,7 +403,7 @@ The SimpleSAMLphp package contains one folder named `simplesamlphp-x.y.z` (where
 this folder there are a lot of subfolders for library, metadata, configuration, etc. One of these folders is named 
 `www`. **Only this folder should be exposed on the web**. The recommended configuration is to put the whole 
 `simplesamlphp` folder outside the web root, and then link to the `www` folder by using the `Alias` directive, as 
-described in [the section called “Configuring Apache”](#sect.apacheconfig "Configuring Apache"). This is not the only
+described in [the section called “Configuring Apache”](#section_4 "Configuring Apache"). This is not the only
 possible way, though.
 
 As an example, let's see how you can install SimpleSAMLphp in your home directory on a shared hosting server.
@@ -436,8 +426,8 @@ As an example, let's see how you can install SimpleSAMLphp in your home director
 3. Next, you need to set the `baseurlpath` configuration option with the URL pointing to the `simplesaml` link you 
 just created in your `public_html` directory. For example, if your home directory is reachable in
 `https://host.example/~myaccount/`, set the base URL path accordingly:
- 
-   ```php
+
+   ```
        'baseurlpath' => 'https://host.example/~myaccount/simplesaml/', 
    ```
 
@@ -467,13 +457,13 @@ Now, we need to make a few configuration changes. First, let's edit `~/public_ht
 
 Change the two lines from:
 
-```php
+```
     require_once(dirname(dirname(__FILE__)) . '/lib/_autoload.php');
 ```
 
 to something like:
 
-```php
+```
     require_once(dirname(dirname(dirname(__FILE__))) . '/lib/_autoload.php');
 ```
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-metadata-extensions-attributes.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-metadata-extensions-attributes.md
index 832bc9c7d9..aac564cea8 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-metadata-extensions-attributes.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-metadata-extensions-attributes.md
@@ -1,5 +1,5 @@
-SAML V2.0 Metadata Extensions for Login and Discovery User Interface
-=============================
+SAML V2.0 Metadata Attribute Extensions
+=======================================
 
 <!--
 	This file is written in Markdown syntax.
@@ -7,16 +7,16 @@ SAML V2.0 Metadata Extensions for Login and Discovery User Interface
 	http://daringfireball.net/projects/markdown/syntax
 -->
 
-  * Author: Timothy Ace [tace@synacor.com](mailto:tace@synacor.com)
-
 <!-- {{TOC}} -->
 
-This is a reference for the SimpleSAMLphp implemenation of the [SAML
+This is a reference for the SimpleSAMLphp implementation of the [SAML
 V2.0 Attribute Extensions](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-attribute-ext.pdf)
-defined by OASIS.
+defined by OASIS. A common use case is adding entity attributes
+to the generated metadata.
 
-The `metadata/saml20-idp-hosted.php` entries are used to define the
-metadata extension items. An example of this is:
+For an IdP `metadata/saml20-idp-hosted.php` entries are used to define the
+metadata extension items; for an SP they can be added to `config/authsources.php`.
+An example of this is:
 
     <?php
     $metadata['entity-id-1'] = [
@@ -29,13 +29,13 @@ metadata extension items. An example of this is:
     ];
 
 The OASIS specification primarily defines how to include arbitrary
-`Attribute` and `Assertion` elements within the metadata for an IdP.
+`Attribute` and `Assertion` elements within the metadata for an entity.
 
 *Note*: SimpleSAMLphp does not support `Assertion` elements within the
 metadata at this time.
 
 Defining Attributes
---------------
+-------------------
 
 The `EntityAttributes` key is used to define the attributes in the
 metadata. Each item in the `EntityAttributes` array defines a new
@@ -71,8 +71,8 @@ This generates:
 When the curly braces are omitted, the NameFormat is automatically set
 to "urn:oasis:names:tc:SAML:2.0:attrname-format:uri".
 
-Generated XML Metadata Examples
-----------------
+Examples
+--------
 
 If given the following configuration...
 
@@ -110,3 +110,33 @@ If given the following configuration...
 			<ds:X509Data>
             ...
 
+
+An example configuration to declare Géant Data Protection Code of Conduct
+entity category support for a service provider in `authsources.php`:
+
+    'saml:SP' => [
+        ...
+        'EntityAttributes' => [
+            'http://macedir.org/entity-category' => [
+                'http://www.geant.net/uri/dataprotection-code-of-conduct/v1'
+            ]
+        ],
+        'UIInfo' =>[
+                'DisplayName' => [
+                    'en' => 'English name',
+                    'es' => 'Nombre en Español',
+                ],
+                'Description' => [
+                    'en' => 'English description',
+                    'es' => 'Descripción en Español',
+                ],
+                'InformationURL' => [
+                    'en' => 'http://example.com/info/en',
+                    'es' => 'http://example.com/info/es',
+                ],
+                'PrivacyStatementURL' => [
+                    'en' => 'http://example.com/privacy/en',
+                    'es' => 'http://example.com/privacy/es',
+                ],
+        ]
+    ],
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-modules.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-modules.md
index ed0df99828..466e42200e 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-modules.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-modules.md
@@ -152,10 +152,10 @@ this:
 
     'example-static' => [
       /* This maps to modules/exampleauth/lib/Auth/Source/Static.php */
-      'exampleauth:Static',
+      'exampleauth:StaticSource',
     
       /* The following is configuration which is passed on to
-       * the exampleauth:Static authentication source. */
+       * the exampleauth:StaticSource authentication source. */
       'uid' => 'testuser',
       'eduPersonAffiliation' => ['member', 'employee'],
       'cn' => ['Test User'],
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-hosted.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-hosted.md
index 276d9b7f66..3a6b47934b 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-hosted.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-hosted.md
@@ -35,12 +35,6 @@ Common options
 `auth`
 :   Which authentication module should be used to authenticate users on
     this IdP.
-<!--
-`authority`
-:   Who is authorized to create sessions for this IdP. Can be
-    `login` for LDAP login module, or `saml2` for SAML 2.0 SP.
-    Specifying this parameter is highly recommended.
--->
 
 `authproc`
 :   Used to manipulate attributes, and limit access for each SP. See
@@ -129,6 +123,8 @@ Common options
     any value in the SP-remote metadata overrides the one configured
     in the IdP metadata.
 
+:   *Note*: **deprecated** Will be removed in a future release; use the MDUI-extension instead
+
 `privatekey`
 :   Name of private key file for this IdP, in PEM format. The filename
     is relative to the `cert/`-directory.
@@ -148,13 +144,9 @@ Common options
     the user. This attribute is used if SimpleSAMLphp needs to generate
     a persistent unique identifier for the user. This option can be set
     in both the IdP-hosted and the SP-remote metadata. The value in the
-    sp-remote metadata has the highest priority. The default value is
+    SP-remote metadata has the highest priority. The default value is
     `eduPersonPrincipalName`.
 
-:   Note that this option also exists in the SP-remote metadata, and
-    any value in the SP-remote metadata overrides the one configured
-    in the IdP metadata.
-
 
 SAML 2.0 options
 ----------------
@@ -167,6 +159,25 @@ The following SAML 2.0 options are available:
 
 :   Note that this option can be set for each SP in the SP-remote metadata.
 
+`attributeencodings`
+:   What encoding should be used for the different attributes. This is
+    an array which maps attribute names to attribute encodings. There
+    are three different encodings:
+
+:   -   `string`: Will include the attribute as a normal string. This is
+        the default.
+
+:   -   `base64`: Store the attribute as a base64 encoded string. This
+        is the default when the `base64attributes`-option is set to
+        `TRUE`.
+
+:   -   `raw`: Store the attribute without any modifications. This
+        makes it possible to include raw XML in the response.
+
+:   Note that this option also exists in the SP-remote metadata, and
+    any value in the SP-remote metadata overrides the one configured
+    in the IdP metadata.
+
 `attributes.NameFormat`
 :   What value will be set in the Format field of attribute
     statements. This parameter can be configured multiple places, and
@@ -253,12 +264,6 @@ The following SAML 2.0 options are available:
 :   Allows to specify information about the registrar of this SP. Please refer to the
     [MDRPI extension](./simplesamlphp-metadata-extensions-rpi) document for further information.
 
-`saml20.sendartifact`
-:   Set to `TRUE` to enable the IdP to send responses with the HTTP-Artifact binding.
-    Defaults to `FALSE`.
-
-:   Note that this requires a configured memcache server.
-
 `saml20.ecp`
 :   Set to `true` to enable the IdP to recieve authnrequests and send responses according the Enhanced Client or Proxy (ECP) Profile. Note: authentication filters that require interaction with the user will not work with ECP.
     Defaults to `false`.
@@ -267,22 +272,39 @@ The following SAML 2.0 options are available:
 :   Set to `TRUE` to enable the IdP to send responses according the [Holder-of-Key Web Browser SSO Profile](./simplesamlphp-hok-idp).
     Defaults to `FALSE`.
 
-`saml20.sign.response`
-:   Whether `<samlp:Response>` messages should be signed.
+`saml20.sendartifact`
+:   Set to `TRUE` to enable the IdP to send responses with the HTTP-Artifact binding.
+    Defaults to `FALSE`.
+
+:   Note that this requires a configured memcache server.
+
+`saml20.sign.assertion`
+:   Whether `<saml:Assertion>` elements should be signed.
     Defaults to `TRUE`.
 
 :   Note that this option also exists in the SP-remote metadata, and
     any value in the SP-remote metadata overrides the one configured
     in the IdP metadata.
 
-`saml20.sign.assertion`
-:   Whether `<saml:Assertion>` elements should be signed.
+`saml20.sign.response`
+:   Whether `<samlp:Response>` messages should be signed.
     Defaults to `TRUE`.
 
 :   Note that this option also exists in the SP-remote metadata, and
     any value in the SP-remote metadata overrides the one configured
     in the IdP metadata.
 
+`signature.algorithm`
+:   The algorithm to use when signing any message generated by this identity provider. Defaults to RSA-SHA256.
+:   Possible values:
+
+    * `http://www.w3.org/2000/09/xmldsig#rsa-sha1`
+       *Note*: the use of SHA1 is **deprecated** and will be disallowed in the future.
+    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha256`
+       The default.
+    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha384`
+    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha512`
+
 `sign.logout`
 :   Whether to sign logout messages sent from this IdP.
 
@@ -332,17 +354,6 @@ The following SAML 2.0 options are available:
 	specified will be kept in the metadata, making the first binding
 	the default one.
 
-`signature.algorithm`
-:   The algorithm to use when signing any message generated by this identity provider. Defaults to RSA-SHA256.
-:   Possible values:
-
-    * `http://www.w3.org/2000/09/xmldsig#rsa-sha1`
-       *Note*: the use of SHA1 is **deprecated** and will be disallowed in the future.
-    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha256`
-       The default.
-    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha384`
-    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha512`
-
 `validate.authnrequest`
 :   Whether we require signatures on authentication requests sent to this IdP.
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-remote.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-remote.md
index 0859495d56..95b4eda3e9 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-remote.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-idp-remote.md
@@ -44,6 +44,18 @@ The following options are common between both the SAML 2.0 protocol and Shibbole
 `icon`
 :   A logo which will be shown next to this IdP in the discovery service.
 
+`name`
+:   The name of this IdP. Will be used by various modules when they need to show a name of the SP to the user.
+
+:   If this option is unset, the organization name will be used instead (if it is available).
+
+:   This option can be translated into multiple languages by specifying the value as an array of language-code to translated name:
+
+        'name' => [
+            'en' => 'A service',
+            'no' => 'En tjeneste',
+        ],
+
 `OrganizationName`
 :   The name of the organization responsible for this SPP.
     This name does not need to be suitable for display to end users.
@@ -73,18 +85,6 @@ The following options are common between both the SAML 2.0 protocol and Shibbole
 
 :   *Note*: If you specify this option, you must also specify the `OrganizationName` option.
 
-`name`
-:   The name of this IdP. Will be used by various modules when they need to show a name of the SP to the user.
-
-:   If this option is unset, the organization name will be used instead (if it is available).
-
-:   This option can be translated into multiple languages by specifying the value as an array of language-code to translated name:
-
-        'name' => [
-            'en' => 'A service',
-            'no' => 'En tjeneste',
-        ],
-
 `scope`
 :   An array with scopes valid for this IdP.
     The IdP will send scopes in scoped attributes, that is, attributes containing a value with an `@` sign and a domain name
@@ -104,6 +104,26 @@ SAML 2.0 options
 
 The following SAML 2.0 options are available:
 
+`AuthnContextClassRef`
+:    The AuthnContextClassRef that will be sent in the login request.
+
+:   Note that this option also exists in the SP configuration. This
+    entry in the IdP-remote metadata overrides the option in the
+    [SP configuration](./saml:sp).
+
+`AuthnContextComparison`
+
+:    The Comparison attribute of the AuthnContext that will be sent in the login request. This parameter won't be used unless AuthnContextClassRef is set and contains one or more values. Possible values:
+
+        SAML2\Constants::COMPARISON_EXACT (default)
+        SAML2\Constants::COMPARISON_BETTER
+        SAML2\Constants::COMPARISON_MINIMUM
+        SAML2\Constants::COMPARISON_MAXIMUM
+
+:   Note that this option also exists in the SP configuration. This
+    entry in the IdP-remote metadata overrides the option in the
+    [SP configuration](./saml:sp).
+
 `disable_scoping`
 :    Whether sending of samlp:Scoping elements in authentication requests should be suppressed. The default value is `FALSE`.
      When set to `TRUE`, no scoping elements will be sent. This does not comply with the SAML2 specification, but allows 
@@ -149,6 +169,19 @@ The following SAML 2.0 options are available:
 :   For compatibility purposes, `null` is equivalent to Transient and a format
     can be defined as a string instead of an array. These variants are deprecated.
 
+`signature.algorithm`
+:   The algorithm to use when signing any message sent to this specific identity provider. Defaults to RSA-SHA256.
+:   Note that this option also exists in the SP configuration.
+    This value in the IdP remote metadata overrides the value in the SP configuration.
+:   Possible values:
+
+    * `http://www.w3.org/2000/09/xmldsig#rsa-sha1`
+       *Note*: the use of SHA1 is **deprecated** and will be disallowed in the future.
+    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha256`
+      The default.
+    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha384`
+    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha512`
+
 `sign.authnrequest`
 :   Whether to sign authentication requests sent to this IdP.
 
@@ -169,19 +202,6 @@ The following SAML 2.0 options are available:
 `SingleLogoutServiceResponse`
 :   Endpoint URL for logout responses. Overrides the `SingleLogoutService`-option for responses.
 
-`signature.algorithm`
-:   The algorithm to use when signing any message sent to this specific identity provider. Defaults to RSA-SHA256.
-:   Note that this option also exists in the SP configuration.
-    This value in the IdP remote metadata overrides the value in the SP configuration.
-:   Possible values:
-
-    * `http://www.w3.org/2000/09/xmldsig#rsa-sha1`
-       *Note*: the use of SHA1 is **deprecated** and will be disallowed in the future.
-    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha256`
-      The default.
-    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha384`
-    * `http://www.w3.org/2001/04/xmldsig-more#rsa-sha512`
-
 `SPNameQualifier`
 :   This corresponds to the SPNameQualifier in the SAML 2.0 specification. It allows to give subjects a SP specific namespace. This option is rarely used, so if you don't need it, leave it out. When left out, SimpleSAMLphp assumes the entityID of your SP as the SPNameQualifier.
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-sp-remote.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-sp-remote.md
index 6d858beb9c..423df7b37f 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-sp-remote.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-reference-sp-remote.md
@@ -98,18 +98,16 @@ and Shibboleth 1.3 protocol:
     entry in the SP-remote metadata overrides the option in the
     IdP-hosted metadata.
 
+:   *Note*: **deprecated** Will be removed in a future release; use the MDUI-extension instead
+
 `userid.attribute`
 :   The attribute name of an attribute which uniquely identifies
     the user. This attribute is used if SimpleSAMLphp needs to generate
     a persistent unique identifier for the user. This option can be set
     in both the IdP-hosted and the SP-remote metadata. The value in the
-    sp-remote metadata has the highest priority. The default value is
+    SP-remote metadata has the highest priority. The default value is
     `eduPersonPrincipalName`.
 
-:   Note that this option also exists in the IdP-hosted metadata. This
-    entry in the SP-remote metadata overrides the option in the
-    IdP-hosted metadata.
-
 
 SAML 2.0 options
 ----------------
@@ -123,6 +121,21 @@ The following SAML 2.0 options are available:
 
 :   The value of this option is specified in one of several [endpoint formats](./simplesamlphp-metadata-endpoints).
 
+`attributeencodings`
+:   What encoding should be used for the different attributes. This is
+    an array which maps attribute names to attribute encodings. There
+    are three different encodings:
+
+:   -   `string`: Will include the attribute as a normal string. This is
+        the default.
+
+:   -   `base64`: Store the attribute as a base64 encoded string. This
+        is the default when the `base64attributes`-option is set to
+        `TRUE`.
+
+:   -   `raw`: Store the attribute without any modifications. This
+        makes it possible to include raw XML in the response.
+
 `attributes.NameFormat`
 :   What value will be set in the Format field of attribute
     statements. This parameter can be configured multiple places, and
@@ -155,6 +168,16 @@ The following SAML 2.0 options are available:
 
 :   (This option was previously named `AttributeNameFormat`.)
 
+`certData`
+:   The base64 encoded certificate for this SP. This is an alternative to storing the certificate in a file on disk and specifying the filename in the `certificate`-option.
+
+`certificate`
+:   Name of certificate file for this SP. The certificate is used to
+    verify the signature of messages received from the SP (if
+    `redirect.validate`is set to `TRUE`), and to encrypting assertions
+    (if `assertion.encryption` is set to TRUE and `sharedkey` is
+    unset.)
+
 `encryption.blacklisted-algorithms`
 :   Blacklisted encryption algorithms. This is an array containing the algorithm identifiers.
 
@@ -197,33 +220,6 @@ The following SAML 2.0 options are available:
     entry in the SP-remote metadata overrides the option in the
     [IdP-hosted metadata](./simplesamlphp-reference-idp-hosted).
 
-`SingleLogoutService`
-:   The URL of the SingleLogoutService endpoint for this SP.
-    This option is required if you want to implement single logout for
-    this SP. If the option isn't specified, this SP will not be logged
-    out automatically when a single logout operation is initialized.
-
-:   The value of this option is specified in one of several [endpoint formats](./simplesamlphp-metadata-endpoints).
-
-`SingleLogoutServiceResponse`
-:   The URL logout responses to this SP should be sent. If this option
-    is unspecified, the `SingleLogoutService` endpoint will be used as
-    the recipient of logout responses.
-
-`SPNameQualifier`
-:   SP NameQualifier for this SP. If not set, the IdP will set the
-    SPNameQualifier to be the SP entity ID.
-
-`certData`
-:   The base64 encoded certificate for this SP. This is an alternative to storing the certificate in a file on disk and specifying the filename in the `certificate`-option.
-
-`certificate`
-:   Name of certificate file for this SP. The certificate is used to
-    verify the signature of messages received from the SP (if
-    `redirect.validate`is set to `TRUE`), and to encrypting assertions
-    (if `assertion.encryption` is set to TRUE and `sharedkey` is
-    unset.)
-
 `saml20.sign.response`
 :   Whether `<samlp:Response>` messages should be signed.
     Defaults to `TRUE`.
@@ -263,6 +259,12 @@ The following SAML 2.0 options are available:
 :   Certificate file included by IdP for KeyInfo within the signature for the SP, in PEM format. The filename is relative to the cert/-directory.
 :   If `signature.privatekey` is present and `signature.certificate` is left blank, X509Certificate will not be included with the signature.
 
+`sign.logout`
+:   Whether to sign logout messages sent to this SP.
+
+:   Note that this option also exists in the IdP-hosted metadata.
+    The value in the SP-remote metadata overrides the value in the IdP-hosted metadata.
+
 `simplesaml.nameidattribute`
 :   When the value of the `NameIDFormat`-option is set to either
     `email` or `persistent`, this is the name of the attribute which
@@ -280,26 +282,22 @@ The following SAML 2.0 options are available:
 :   Whether the SP should receive any attributes from the IdP. The
     default value is `TRUE`.
 
-`attributeencodings`
-:   What encoding should be used for the different attributes. This is
-    an array which maps attribute names to attribute encodings. There
-    are three different encodings:
-
-:   -   `string`: Will include the attribute as a normal string. This is
-        the default.
-
-:   -   `base64`: Store the attribute as a base64 encoded string. This
-        is the default when the `base64attributes`-option is set to
-        `TRUE`.
+`SingleLogoutService`
+:   The URL of the SingleLogoutService endpoint for this SP.
+    This option is required if you want to implement single logout for
+    this SP. If the option isn't specified, this SP will not be logged
+    out automatically when a single logout operation is initialized.
 
-:   -   `raw`: Store the attribute without any modifications. This
-        makes it possible to include raw XML in the response.
+:   The value of this option is specified in one of several [endpoint formats](./simplesamlphp-metadata-endpoints).
 
-`sign.logout`
-:   Whether to sign logout messages sent to this SP.
+`SingleLogoutServiceResponse`
+:   The URL logout responses to this SP should be sent. If this option
+    is unspecified, the `SingleLogoutService` endpoint will be used as
+    the recipient of logout responses.
 
-:   Note that this option also exists in the IdP-hosted metadata.
-    The value in the SP-remote metadata overrides the value in the IdP-hosted metadata.
+`SPNameQualifier`
+:   SP NameQualifier for this SP. If not set, the IdP will set the
+    SPNameQualifier to be the SP entity ID.
 
 `validate.authnrequest`
 :   Whether we require signatures on authentication requests sent from this SP.
@@ -387,6 +385,11 @@ Shibboleth 1.3 options
 
 The following options for Shibboleth 1.3 SP's are avaiblable:
 
+`audience`
+:   The value which should be given in the `<Audience>`-element in the
+    `<AudienceRestrictionCondition>`-element in the response. The
+    default value is the entity ID of the SP.
+
 `AssertionConsumerService`
 :   The URL of the AssertionConsumerService endpoint for this SP.
     This endpoint must accept the SAML responses encoded with the
@@ -401,11 +404,6 @@ The following options for Shibboleth 1.3 SP's are avaiblable:
     `<NameIdentifier>`-element should be. The default value is the
     entity ID of the SP.
 
-`audience`
-:   The value which should be given in the `<Audience>`-element in the
-    `<AudienceRestrictionCondition>`-element in the response. The
-    default value is the entity ID of the SP.
-
 `scopedattributes`
 :   Array with names of attributes which should be scoped. Scoped
     attributes will receive a `Scope`-attribute on the
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp-api.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp-api.md
index 07c851f9d2..ad04922406 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp-api.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp-api.md
@@ -6,6 +6,19 @@ SimpleSAMLphp SP API reference
 This document describes the \SimpleSAML\Auth\Simple API.
 This is the preferred API for integrating SimpleSAMLphp with other applications.
 
+### Note on PHP sessions and SimpleSAMLphp API calls
+
+Some SimpleSAMLphp calls replace the current active PHP session. If you previously started a session and wish to write to it, then you must cleanup the SimpleSAMLphp session before you can write to your session. If you do not need to modify your own session, then you can leave the cleanup call out; however, forgetting to call cleanup is a common source of hard to find bugs.
+
+    session_start();
+    // ...
+    $auth = new \SimpleSAML\Auth\Simple('default-sp');
+    $auth->isAuthenticated(); // Replaces our session with the SimpleSAMLphp one
+    // $_SESSION['key'] = 'value'; // This would save to the SimpleSAMLphp session which isn't what we want
+    \SimpleSAML\Session::getSessionFromRequest()->cleanup(); // Reverts to our PHP session
+    // Save to our session
+    $_SESSION['key'] = 'value';
+
 Constructor
 -----------
 
@@ -34,11 +47,11 @@ Check whether the user is authenticated with this authentication source.
 ### Example
 
     if (!$auth->isAuthenticated()) {
+        \SimpleSAML\Session::getSessionFromRequest()->cleanup();
         /* Show login link. */
         print('<a href="/login">Login</a>');
     }
 
-
 `requireAuth`
 -------------
 
@@ -57,6 +70,7 @@ See the documentation for the `login`-function for a description of the paramete
 ### Example 1
 
     $auth->requireAuth();
+    \SimpleSAML\Session::getSessionFromRequest()->cleanup();
     print("Hello, authenticated user!");
 
 ### Example 2
@@ -69,6 +83,7 @@ See the documentation for the `login`-function for a description of the paramete
         'ReturnTo' => 'https://sp.example.org/',
         'KeepPost' => FALSE,
     ]);
+    \SimpleSAML\Session::getSessionFromRequest()->cleanup();
     print("Hello, authenticated user!");
 
 
@@ -112,7 +127,7 @@ The [`saml:SP`](./saml:sp) authentication source also defines some parameters.
         'isPassive' => TRUE,
         'ErrorURL' => 'https://.../error_handler.php',
     ]);
-
+    \SimpleSAML\Session::getSessionFromRequest()->cleanup();
 
 `logout`
 --------
@@ -144,6 +159,7 @@ This function never returns.
 Logout, and redirect to the specified URL.
 
     $auth->logout('https://sp.example.org/logged_out.php');
+    \SimpleSAML\Session::getSessionFromRequest()->cleanup();
 
 ### Example 2
 
@@ -154,6 +170,7 @@ Same as the previous, but check the result of the logout operation afterwards.
         'ReturnStateParam' => 'LogoutState',
         'ReturnStateStage' => 'MyLogoutState',
     ]);
+    \SimpleSAML\Session::getSessionFromRequest()->cleanup();
 
 And in logged_out.php:
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp.md
index 7fc47ee941..365289f49e 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-sp.md
@@ -122,7 +122,7 @@ directory.
 If you intend to add your SP to a federation, the procedure for managing trust in federations differ, but the common part is
 that you would need to provide the *SAML 2.0 metadata of your SP*, and register that with the federation administration.
 You will probably be required too to consume the federation metadata periodically. Read more about
-[automated metadata management](simplesamlphp-automated_metadata) to learn more about that. 
+[automated metadata management](https://github.com/simplesamlphp/simplesamlphp-module-metarefresh/blob/master/docs/simplesamlphp-automated_metadata.md) to learn more about that. 
 
 
 Test the SP
@@ -197,6 +197,26 @@ your own session after calling SimpleSAMLphp, you can do so by cleaning up the s
 If you don't cleanup SimpleSAMLphp's session and try to use $_SESSION afterwards, you won't be using your own session
 and all your data is likely to get lost or inaccessible.
 
+Note that if your application uses a [custom session handler](https://www.php.net/manual/en/function.session-set-save-handler.php), SimpleSAMLphp will use it as well. This can lead to problems because SimpleSAMLphp's stand-alone web UI uses the default PHP session handlers. Therefore, you may need to unset the custom handler before making any calls to SimpleSAMLphp:
+
+    // use custom save handler
+    session_set_save_handler($handler);
+    session_start();
+    
+    // close session and restore default handler
+    session_write_close();
+    session_set_save_handler(new SessionHandler(), true);
+    
+    // use SimpleSAML\Session
+    $session = \SimpleSAML\Session::getSessionFromRequest();
+    $session->cleanup();
+    session_write_close();
+    
+    // back to custom save handler
+    session_set_save_handler($handler);
+    session_start();
+
+
 
 Support
 -------
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-theming.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-theming.md
index 51cbe65b5b..89ea7a572b 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-theming.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-theming.md
@@ -99,6 +99,7 @@ You can put resource files within the www folder of your module, to make your mo
 ```
 modules
 └───mymodule
+    └───lib
     └───themes
     └───www
         └───logo.png
@@ -106,13 +107,13 @@ modules
 ```
 
 Reference these resources in your custom PHP templates under `themes/fancytheme` by using a generator for the URL:
-```php
+```
 <?php echo SimpleSAML\Module::getModuleURL('mymodule/logo.png'); ?>
 ```
 
 Example for a custom CSS stylesheet file:
-```html
-<link rel="stylesheet" type="text/css" href="<?php echo SimpleSAML\Module::getModuleURL('mymodule/style.css'); ?>" />
+```
+<link rel="stylesheet" href="<?php echo SimpleSAML\Module::getModuleURL('mymodule/style.css'); ?>">
 ```
 
 Migrating to Twig templates
@@ -130,6 +131,15 @@ If you need to make more extensive customizations to the base template, you shou
 
 Any references to `$this->data['baseurlpath']` in old-style templates can be replaced with `{{baseurlpath}}` in Twig templates. Likewise, references to `\SimpleSAML\Module::getModuleURL()` can be replaced with `{{baseurlpath}}module.php/mymodule/...`
 
+Within templates each module is defined as a separate namespace matching the module name. This allows one template to reference templates from other modules using Twig's `@namespace_name/template_path` notation. For instance, a template in `mymodule` can include the widget template from the `yourmodule` module using the notation `@yourmodule/widget.twig`. A special namespace, `__parent__`, exists to allow theme developers to more easily extend a module's stock template.
+
+Even more advanced changes can be made by defining a theme controller in `config.php`:
+
+    'theme.controller' => '\SimpleSAML\Module\mymodule\FancyThemeController',
+
+This requires you to implement `\SimpleSAML\XHTML\TemplateControllerInterface.php` in your module's `lib`-directory.
+The class can then modify the Twig Environment and the variables passed to the theme's templates. In short, this allows you to set additional global variables and to write your own Twig filters and functions.
+
 See the [Twig documentation](https://twig.symfony.com/doc/1.x/templates.html) for more information on using variables and expressions in Twig templates, and the SimpleSAMLphp wiki for [our conventions](https://github.com/simplesamlphp/simplesamlphp/wiki/Twig-conventions).
 
 The wiki also includes some information on [migrating translations](https://github.com/simplesamlphp/simplesamlphp/wiki/Migrating-translation-in-Twig) and [migrating templates](https://github.com/simplesamlphp/simplesamlphp/wiki/Twig:-Migrating-templates).
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.14.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.14.md
index 9931225c49..fdabcdb247 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.14.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.14.md
@@ -19,7 +19,7 @@ The jQuery version in use has been bumped to the latest 1.8.X version.
 Service Providers using the eduPersonTargetedID attribute, will get a DOMNodeList object instead of the NameID value. In
 order to process the NameID, a SAML2_XML_saml_NameID object can be used:
 
-```php
+```
 $attributes = $as->getAttributes();
 $eptid = $attributes['eduPersonTargetedID'][0]->item(0);
 $nameID = new SAML2_XML_saml_NameID($eptid);
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.17.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.17.md
index 0a07a7c26a..376f081c6d 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.17.md
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.17.md
@@ -3,18 +3,18 @@ Upgrade notes for SimpleSAMLphp 1.17
 
 The minimum PHP version required is now PHP 5.5.
 
-All (remaining) classes have been changed to use namespaces. There are mappings
-from the legacy names so calling code should keep working. Custom code
-(e.g. modules) that test for class names explicitly, e.g. when catching specific
+All (remaining) classes have been changed to namespaces. There are mappings
+from the legacy names so calling code should remain working. Custom code
+(e.g. modules) that test for class names, e.g. when catching specific
 exceptions, may need to be changed.
 
-The possibility to omit sending a NameIDPolicy in authentication requests has
-been reintroduced by setting `NameIDPolicy` to `false`. The preferred way is
+The possibility has been reintroduced to omit the NameIdPolicy from SP
+AuthnRequests by setting NameIDPolicy to `false`. The prefered way is
 to configure it as an array `[ 'Format' => format, 'AllowCreate' => true/false ]`,
 which is now also the format used in the `saml:NameIDPolicy` variable
-in the state array.
+in `$state`.
 
-Code, config and documentation have switched to using the modern PHP
+The code, config and documentation have switched to using the modern PHP
 array syntax. This should not have an impact as both will remain working
 equally, but the code examples and config templates look slightly different.
 The following are equivalent:
@@ -34,16 +34,3 @@ The following are equivalent:
         ],
         'other example' => 1
     ];
-
-Finally, a new experimental user interface has been introduced. The interface
-is split in two:
-
-* A user interface targeted at end users, which allows them to authenticate and
-  see their information, as well as manage any options relevant to them.
-* An admin interface with most of the pages in the current web interface. This
-  new interface is implemented in an admin module that can be disabled, effectively
-  removing the administrator interface completely.
-
-In order to test this new user interface, a temporary configuration option
-`usenewui` needs to be set to `true`. This configuration option will disappear
-in SimpleSAMLphp 2.0, where the new user interface will be the only one available.
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.18.md b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.18.md
new file mode 100644
index 0000000000..785563c8eb
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-upgrade-notes-1.18.md
@@ -0,0 +1,26 @@
+Upgrade notes for SimpleSAMLphp 1.18
+====================================
+
+The minimum PHP version required is now PHP 5.6.
+
+### Deprecations
+
+* The use of the PHP `memcache` extension was deprecated in favour of `memcached`.
+In order to keep using memcache functionality you have to move to the PHP `memcached` extension,
+which is available from PECL; see https://pecl.php.net/package/memcached. The former is considered abandoned
+and it's safe use can no longer be guaranteed.
+
+  There are a few options here:
+   - Depending on your distribution, the package may just be available for you to install
+   - You could use the package from the REMI repository if you're on RHEL; https://rpms.remirepo.net/
+   - Download the source from https://pecl.php.net/package/memcached and compile the source as a PHP-extension manually;
+     https://www.php.net/manual/en/install.pecl.phpize.php
+ 
+* Support for SAML1.1 / Shibboleth 1.3 will be discontinued in a future release.
+* The class `SimpleSAML\Auth\TimeLimitedToken` is now deprecated and will be removed in a future release
+  If your custom module relies on this class, be sure to make a copy into your repository and
+  make sure to also copy the unit tests that come along.
+* Setting `privacypolicy` in metadata files will be removed in a future release. It was only used
+  by the consent module, which supports `UIInfo`'s `PrivacyStatementURL`.
+  See https://simplesamlphp.org/docs/stable/simplesamlphp-metadata-extensions-ui on how to configure this.
+
diff --git a/vendor/simplesamlphp/simplesamlphp/extra/auth_memcookie.conf b/vendor/simplesamlphp/simplesamlphp/extra/auth_memcookie.conf
deleted file mode 100644
index c387a85dc9..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/extra/auth_memcookie.conf
+++ /dev/null
@@ -1,38 +0,0 @@
-<Location />
-        # This is a list of memcache servers which Auth MemCookie
-        # should use. It is a ','-separated list of
-        # host:port-pairs.
-        # Note that this list must list the same servers as the
-        # 'authmemcookie.servers'-option in config.php in the
-        # configuration for simpleSAMLphp.
-        Auth_memCookie_Memcached_AddrPort "127.0.0.1:11211"
-
-        # This must be set to 'on' to enable Auth MemCookie for
-        # this directory.
-        Auth_memCookie_Authoritative on
-
-        # This adjusts the maximum number of data elements in the
-        # session data. The default is 10, which can be to low.
-        Auth_memCookie_SessionTableSize "40"
-
-        # These two commands are required to enable access control
-        # in Apache.
-        AuthType Cookie
-        AuthName "My Login"
-
-        # This command causes apache to redirect to the given
-        # URL when we receive a '401 Authorization Required'
-        # error. We redirect to "/simplesaml/authmemcookie.php",
-        # which initializes a login to the IdP.
-        ErrorDocument 401 "/simplesaml/authmemcookie.php"
-
-</Location>
-
-<Location /secret>
-        # This allows all authenticated users to access the
-        # directory. To learn more about the 'Require' command,
-        # please look at:
-        # http://httpd.apache.org/docs/2.0/mod/core.html#require
-        Require valid-user
-</Location>
-
diff --git a/vendor/simplesamlphp/simplesamlphp/extra/simplesamlphp.spec b/vendor/simplesamlphp/simplesamlphp/extra/simplesamlphp.spec
index 996258f76e..7aa4203581 100644
--- a/vendor/simplesamlphp/simplesamlphp/extra/simplesamlphp.spec
+++ b/vendor/simplesamlphp/simplesamlphp/extra/simplesamlphp.spec
@@ -1,6 +1,6 @@
 %define name      simplesamlphp
 %define summary   SAML IDP/SP written in PHP
-%define version   1.17.8
+%define version   1.18.8
 %define release   1
 %define license   LGPL 2.1
 %define group     Networking/WWW
@@ -70,7 +70,6 @@ tar cf - . | (cd %{buildroot}%{_prefix}simplesamlphp; tar xfp -)
 /var/lib/simplesamlphp/
 %dir %attr(0750, root,apache) /var/lib/simplesamlphp/config
 %config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/config/acl.php
-%config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/config/authmemcookie.php
 %config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/config/authsources.php
 %config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/config/config.php
 %dir %attr(0750, root,apache) /var/lib/simplesamlphp/metadata
@@ -83,8 +82,6 @@ tar cf - . | (cd %{buildroot}%{_prefix}simplesamlphp; tar xfp -)
 %config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/metadata/shib13-idp-remote.php
 %config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/metadata/shib13-sp-hosted.php
 %config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/metadata/shib13-sp-remote.php
-%config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/metadata/wsfed-idp-remote.php
-%config(noreplace) %attr(0640, root,apache) /var/lib/simplesamlphp/metadata/wsfed-sp-hosted.php
 %dir %attr(0770, root, apache) /var/lib/simplesamlphp/log
 %dir %attr(0770, root, apache) /var/lib/simplesamlphp/data
 %dir %attr(0750, root, apache) /var/lib/simplesamlphp/cert
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/AuthenticationFactory.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/AuthenticationFactory.php
index 7335bc2d56..25dc18307d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/AuthenticationFactory.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/AuthenticationFactory.php
@@ -2,12 +2,14 @@
 
 namespace SimpleSAML\Auth;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+
 /**
  * Factory class to get instances of \SimpleSAML\Auth\Simple for a given authentication source.
  */
 class AuthenticationFactory
 {
-
     /** @var \SimpleSAML\Configuration */
     protected $config;
 
@@ -15,7 +17,7 @@ class AuthenticationFactory
     protected $session;
 
 
-    public function __construct(\SimpleSAML\Configuration $config, \SimpleSAML\Session $session)
+    public function __construct(Configuration $config, Session $session)
     {
         $this->config = $config;
         $this->session = $session;
@@ -34,4 +36,4 @@ public function create($as)
     {
         return new Simple($as, $this->config, $this->session);
     }
-}
\ No newline at end of file
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Default.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/DefaultAuth.php
similarity index 78%
rename from vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Default.php
rename to vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/DefaultAuth.php
index 86c7465cd5..4a2a5da549 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Default.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/DefaultAuth.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Auth;
 
+use SimpleSAML\Module\saml\Auth\Source\SP;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+
 /**
  * Implements the default behaviour for authentication.
  *
@@ -18,6 +22,11 @@ class DefaultAuth
 {
     /**
      * @deprecated This method will be removed in SSP 2.0. Use Source::initLogin() instead.
+     * @param string $authId
+     * @param string $return
+     * @param string|null $errorURL
+     * @param array $params
+     * @return void
      */
     public static function initLogin(
         $authId,
@@ -34,6 +43,8 @@ public static function initLogin(
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use
      * State::getPersistentAuthData() instead.
+     * @param array &$state
+     * @return array
      */
     public static function extractPersistentAuthState(array &$state)
     {
@@ -43,6 +54,8 @@ public static function extractPersistentAuthState(array &$state)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use Source::loginCompleted() instead.
+     * @param array $state
+     * @return void
      */
     public static function loginCompleted($state)
     {
@@ -52,13 +65,16 @@ public static function loginCompleted($state)
 
     /**
      * @deprecated This method will be removed in SSP 2.0.
+     * @param string $returnURL
+     * @param string $authority
+     * @return void
      */
     public static function initLogoutReturn($returnURL, $authority)
     {
         assert(is_string($returnURL));
         assert(is_string($authority));
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
 
         $state = $session->getAuthData($authority, 'LogoutState');
         $session->doLogout($authority);
@@ -78,6 +94,9 @@ public static function initLogoutReturn($returnURL, $authority)
 
     /**
      * @deprecated This method will be removed in SSP 2.0.
+     * @param string $returnURL
+     * @param string $authority
+     * @return void
      */
     public static function initLogout($returnURL, $authority)
     {
@@ -86,24 +105,28 @@ public static function initLogout($returnURL, $authority)
 
         self::initLogoutReturn($returnURL, $authority);
 
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($returnURL);
+        Utils\HTTP::redirectTrustedURL($returnURL);
     }
 
 
     /**
      * @deprecated This method will be removed in SSP 2.0.
+     * @param array $state
+     * @return void
      */
     public static function logoutCompleted($state)
     {
         assert(is_array($state));
         assert(array_key_exists('\SimpleSAML\Auth\DefaultAuth.ReturnURL', $state));
 
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($state['\SimpleSAML\Auth\DefaultAuth.ReturnURL']);
+        Utils\HTTP::redirectTrustedURL($state['\SimpleSAML\Auth\DefaultAuth.ReturnURL']);
     }
 
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use Source::logoutCallback() instead.
+     * @param array $state
+     * @return void
      */
     public static function logoutCallback($state)
     {
@@ -114,10 +137,14 @@ public static function logoutCallback($state)
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use
      * \SimpleSAML\Module\saml\Auth\Source\SP::handleUnsolicitedAuth() instead.
+     * @param string $authId
+     * @param array $state
+     * @param string $redirectTo
+     * @return void
      */
     public static function handleUnsolicitedAuth($authId, array $state, $redirectTo)
     {
-        \SimpleSAML\Module\saml\Auth\Source\SP::handleUnsolicitedAuth($authId, $state, $redirectTo);
+        SP::handleUnsolicitedAuth($authId, $state, $redirectTo);
     }
 
 
@@ -132,7 +159,7 @@ private static function getAuthSource($id)
     {
         $as = Source::getById($id);
         if ($as === null) {
-            throw new \Exception('Invalid authentication source: '.$id);
+            throw new \Exception('Invalid authentication source: ' . $id);
         }
         return $as;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/LDAP.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/LDAP.php
index c83d221f9c..f8bb3de4c1 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/LDAP.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/LDAP.php
@@ -2,839 +2,13 @@
 
 namespace SimpleSAML\Auth;
 
-use SimpleSAML\Error;
-use SimpleSAML\Logger;
+\SimpleSAML\Logger::warning("The class \SimpleSAML\Auth\LDAP has been moved to the ldap module, please use \SimpleSAML\Module\saml\Auth\Ldap instead.");
 
 /**
- * Constants defining possible errors
+ * @deprecated To be removed in 2.0
  */
-
-define('ERR_INTERNAL', 1);
-define('ERR_NO_USER', 2);
-define('ERR_WRONG_PW', 3);
-define('ERR_AS_DATA_INCONSIST', 4);
-define('ERR_AS_INTERNAL', 5);
-define('ERR_AS_ATTRIBUTE', 6);
-
-// not defined in earlier PHP versions
-if (!defined('LDAP_OPT_DIAGNOSTIC_MESSAGE')) {
-    define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
-}
-
-/**
- * The LDAP class holds helper functions to access an LDAP database.
- *
- * @author Andreas Aakre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
- * @author Anders Lund, UNINETT AS. <anders.lund@uninett.no>
- * @package SimpleSAMLphp
- */
-
-class LDAP
-{
-    /**
-     * LDAP link identifier.
-     *
-     * @var resource
-     */
-    protected $ldap = null;
-
-    /**
-     * LDAP user: authz_id if SASL is in use, binding dn otherwise
-     */
-    protected $authz_id = null;
-
-    /**
-     * Timeout value, in seconds.
-     *
-     * @var int
-     */
-    protected $timeout = 0;
-
-    /**
-     * Private constructor restricts instantiation to getInstance().
-     *
-     * @param string $hostname
-     * @param bool $enable_tls
-     * @param bool $debug
-     * @param int $timeout
-     * @param int $port
-     * @param bool $referrals
-     */
-    public function __construct(
-        $hostname,
-        $enable_tls = true,
-        $debug = false,
-        $timeout = 0,
-        $port = 389,
-        $referrals = true
-    ) {
-        // Debug
-        Logger::debug('Library - LDAP __construct(): Setup LDAP with '.
-            'host=\''.$hostname.
-            '\', tls='.var_export($enable_tls, true).
-            ', debug='.var_export($debug, true).
-            ', timeout='.var_export($timeout, true).
-            ', referrals='.var_export($referrals, true));
-
-        /*
-         * Set debug level before calling connect. Note that this passes
-         * NULL to ldap_set_option, which is an undocumented feature.
-         *
-         * OpenLDAP 2.x.x or Netscape Directory SDK x.x needed for this option.
-         */
-        if ($debug && !ldap_set_option(null, LDAP_OPT_DEBUG_LEVEL, 7)) {
-            Logger::warning('Library - LDAP __construct(): Unable to set debug level (LDAP_OPT_DEBUG_LEVEL) to 7');
-        }
-
-        /*
-         * Prepare a connection for to this LDAP server. Note that this function
-         * doesn't actually connect to the server.
-         */
-        $resource = @ldap_connect($hostname, $port);
-        if ($resource === false) {
-            throw $this->makeException(
-                'Library - LDAP __construct(): Unable to connect to \''.$hostname.'\'',
-                ERR_INTERNAL
-            );
-        }
-        $this->ldap = $resource;
-
-        // Enable LDAP protocol version 3
-        if (!@ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, 3)) {
-            throw $this->makeException(
-                'Library - LDAP __construct(): Failed to set LDAP Protocol version (LDAP_OPT_PROTOCOL_VERSION) to 3',
-                ERR_INTERNAL
-            );
-        }
-
-        // Set referral option
-        if (!@ldap_set_option($this->ldap, LDAP_OPT_REFERRALS, $referrals)) {
-            throw $this->makeException(
-                'Library - LDAP __construct(): Failed to set LDAP Referrals (LDAP_OPT_REFERRALS) to '.$referrals,
-                ERR_INTERNAL
-            );
-        }
-
-        // Set timeouts, if supported
-        // (OpenLDAP 2.x.x or Netscape Directory SDK x.x needed)
-        $this->timeout = $timeout;
-        if ($timeout > 0) {
-            if (!@ldap_set_option($this->ldap, LDAP_OPT_NETWORK_TIMEOUT, $timeout)) {
-                Logger::warning(
-                    'Library - LDAP __construct(): Unable to set timeouts (LDAP_OPT_NETWORK_TIMEOUT) to '.$timeout
-                );
-            }
-            if (!@ldap_set_option($this->ldap, LDAP_OPT_TIMELIMIT, $timeout)) {
-                Logger::warning(
-                    'Library - LDAP __construct(): Unable to set timeouts (LDAP_OPT_TIMELIMIT) to '.$timeout
-                );
-            }
-        }
-
-        // Enable TLS, if needed
-        if (stripos($hostname, "ldaps:") === false && $enable_tls) {
-            if (!@ldap_start_tls($this->ldap)) {
-                throw $this->makeException('Library - LDAP __construct():'.
-                    ' Unable to force TLS', ERR_INTERNAL);
-            }
-        }
-    }
-
-
-    /**
-     * Convenience method to create an LDAPException as well as log the
-     * description.
-     *
-     * @param string $description
-     * The exception's description
-     * @return \Exception
-     */
-    private function makeException($description, $type = null)
-    {
-        $errNo = 0x00;
-
-        // Log LDAP code and description, if possible
-        if (empty($this->ldap)) {
-            Logger::error($description);
-        } else {
-            $errNo = @ldap_errno($this->ldap);
-        }
-
-        // Decide exception type and return
-        if ($type) {
-            if ($errNo !== 0) {
-                // Only log real LDAP errors; not success
-                Logger::error($description.'; cause: \''.ldap_error($this->ldap).'\' (0x'.dechex($errNo).')');
-            } else {
-                Logger::error($description);
-            }
-
-            switch ($type) {
-                case ERR_INTERNAL:// 1 - ExInternal
-                    return new Error\Exception($description, $errNo);
-                case ERR_NO_USER:// 2 - ExUserNotFound
-                    return new Error\UserNotFound($description, $errNo);
-                case ERR_WRONG_PW:// 3 - ExInvalidCredential
-                    return new Error\InvalidCredential($description, $errNo);
-                case ERR_AS_DATA_INCONSIST:// 4 - ExAsDataInconsist
-                    return new Error\AuthSource('ldap', $description);
-                case ERR_AS_INTERNAL:// 5 - ExAsInternal
-                    return new Error\AuthSource('ldap', $description);
-            }
-        } else {
-            if ($errNo !== 0) {
-                $description .= '; cause: \''.ldap_error($this->ldap).'\' (0x'.dechex($errNo).')';
-                if (@ldap_get_option($this->ldap, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extendedError)
-                    && !empty($extendedError)
-                ) {
-                    $description .= '; additional: \''.$extendedError.'\'';
-                }
-            }
-            switch ($errNo) {
-                case 0x20://LDAP_NO_SUCH_OBJECT
-                    Logger::warning($description);
-                    return new Error\UserNotFound($description, $errNo);
-                case 0x31://LDAP_INVALID_CREDENTIALS
-                    Logger::info($description);
-                    return new Error\InvalidCredential($description, $errNo);
-                case -1://NO_SERVER_CONNECTION
-                    Logger::error($description);
-                    return new Error\AuthSource('ldap', $description);
-                default:
-                    Logger::error($description);
-                    return new Error\AuthSource('ldap', $description);
-            }
-        }
-        return new \Exception('Unknown LDAP error.');
-    }
-
-
-    /**
-     * Search for DN from a single base.
-     *
-     * @param string $base
-     * Indication of root of subtree to search
-     * @param string|array $attribute
-     * The attribute name(s) to search for.
-     * @param string $value
-     * The attribute value to search for.
-     * Additional search filter
-     * @param string|null $searchFilter
-     * The scope of the search
-     * @param string $scope
-     * @return string
-     * The DN of the resulting found element.
-     * @throws Error\Exception if:
-     * - Attribute parameter is wrong type
-     * @throws Error\AuthSource if:
-     * - Not able to connect to LDAP server
-     * - False search result
-     * - Count return false
-     * - Searche found more than one result
-     * - Failed to get first entry from result
-     * - Failed to get DN for entry
-     * @throws Error\UserNotFound if:
-     * - Zero entries were found
-     */
-    private function search($base, $attribute, $value, $searchFilter = null, $scope = "subtree")
-    {
-        // Create the search filter
-        $attribute = self::escape_filter_value($attribute, false);
-        $value = self::escape_filter_value($value, true);
-        $filter = '';
-        foreach ($attribute as $attr) {
-            $filter .= '('.$attr.'='.$value.')';
-        }
-        $filter = '(|'.$filter.')';
-
-        // Append LDAP filters if defined
-        if ($searchFilter !== null) {
-            $filter = "(&".$filter."".$searchFilter.")";
-        }
-
-        // Search using generated filter
-        Logger::debug('Library - LDAP search(): Searching base ('.$scope.') \''.$base.'\' for \''.$filter.'\'');
-        if ($scope === 'base') {
-            $result = @ldap_read($this->ldap, $base, $filter, [], 0, 0, $this->timeout, LDAP_DEREF_NEVER);
-        } elseif ($scope === 'onelevel') {
-            $result = @ldap_list($this->ldap, $base, $filter, [], 0, 0, $this->timeout, LDAP_DEREF_NEVER);
-        } else {
-            $result = @ldap_search($this->ldap, $base, $filter, [], 0, 0, $this->timeout, LDAP_DEREF_NEVER);
-        }
-
-        if ($result === false) {
-            throw $this->makeException(
-                'Library - LDAP search(): Failed search on base \''.$base.'\' for \''.$filter.'\''
-            );
-        }
-
-        // Sanity checks on search results
-        $count = @ldap_count_entries($this->ldap, $result);
-        if ($count === false) {
-            throw $this->makeException('Library - LDAP search(): Failed to get number of entries returned');
-        } elseif ($count > 1) {
-            // More than one entry is found. External error
-            throw $this->makeException(
-                'Library - LDAP search(): Found '.$count.' entries searching base \''.$base.'\' for \''.$filter.'\'',
-                ERR_AS_DATA_INCONSIST
-            );
-        } elseif ($count === 0) {
-            // No entry is fond => wrong username is given (or not registered in the catalogue). User error
-            throw $this->makeException(
-                'Library - LDAP search(): Found no entries searching base \''.$base.'\' for \''.$filter.'\'',
-                ERR_NO_USER
-            );
-        }
-
-
-        // Resolve the DN from the search result
-        $entry = @ldap_first_entry($this->ldap, $result);
-        if ($entry === false) {
-            throw $this->makeException(
-                'Library - LDAP search(): Unable to retrieve result after searching base \''.
-                    $base.'\' for \''.$filter.'\''
-            );
-        }
-        $dn = @ldap_get_dn($this->ldap, $entry);
-        if ($dn === false) {
-            throw $this->makeException(
-                'Library - LDAP search(): Unable to get DN after searching base \''.$base.'\' for \''.$filter.'\''
-            );
-        }
-        return $dn;
-    }
-
-
-    /**
-     * Search for a DN.
-     *
-     * @param string|array $base
-     * The base, or bases, which to search from.
-     * @param string|array $attribute
-     * The attribute name(s) searched for.
-     * @param string $value
-     * The attribute value searched for.
-     * @param bool $allowZeroHits
-     * Determines if the method will throw an exception if no hits are found.
-     * Defaults to FALSE.
-     * @param string|null $searchFilter
-     * Additional searchFilter to be added to the (attribute=value) filter
-     * @param string $scope
-     * The scope of the search
-     * @return string
-     * The DN of the matching element, if found. If no element was found and
-     * $allowZeroHits is set to FALSE, an exception will be thrown; otherwise
-     * NULL will be returned.
-     * @throws Error\AuthSource if:
-     * - LDAP search encounter some problems when searching cataloge
-     * - Not able to connect to LDAP server
-     * @throws Error\UserNotFound if:
-     * - $allowZeroHits is FALSE and no result is found
-     *
-     */
-    public function searchfordn(
-        $base,
-        $attribute,
-        $value,
-        $allowZeroHits = false,
-        $searchFilter = null,
-        $scope = 'subtree'
-    ) {
-        // Traverse all search bases, returning DN if found
-        $bases = \SimpleSAML\Utils\Arrays::arrayize($base);
-        foreach ($bases as $current) {
-            try {
-                // Single base search
-                $result = $this->search($current, $attribute, $value, $searchFilter, $scope);
-
-                // We don't hawe to look any futher if user is found
-                if (!empty($result)) {
-                    return $result;
-                }
-                // If search failed, attempt the other base DNs
-            } catch (Error\UserNotFound $e) {
-                // Just continue searching
-            }
-        }
-        // Decide what to do for zero entries
-        Logger::debug('Library - LDAP searchfordn(): No entries found');
-        if ($allowZeroHits) {
-            // Zero hits allowed
-            return null;
-        } else {
-            // Zero hits not allowed
-            throw $this->makeException('Library - LDAP searchfordn(): LDAP search returned zero entries for'.
-                ' filter \'('.join(' | ', $attribute).' = '.$value.')\' on base(s) \'('.join(' & ', $bases).')\'', 2);
-        }
-    }
-
-
-    /**
-     * This method was created specifically for the ldap:AttributeAddUsersGroups->searchActiveDirectory()
-     * method, but could be used for other LDAP search needs. It will search LDAP and return all the entries.
-     *
-     * @throws \Exception
-     * @param string|array $bases
-     * @param string|array $filters Array of 'attribute' => 'values' to be combined into the filter,
-     *     or a raw filter string
-     * @param string|array $attributes Array of attributes requested from LDAP
-     * @param bool $and If multiple filters defined, then either bind them with & or |
-     * @param bool $escape Weather to escape the filter values or not
-     * @param string $scope The scope of the search
-     * @return array
-     */
-    public function searchformultiple(
-        $bases,
-        $filters,
-        $attributes = [],
-        $and = true,
-        $escape = true,
-        $scope = 'subtree'
-    ) {
-        // Escape the filter values, if requested
-        if ($escape) {
-            $filters = $this->escape_filter_value($filters, false);
-        }
-
-        // Build search filter
-        $filter = '';
-        if (is_array($filters)) {
-            foreach ($filters as $attribute => $value) {
-                $filter .= "($attribute=$value)";
-            }
-            if (count($filters) > 1) {
-                $filter = ($and ? '(&' : '(|').$filter.')';
-            }
-        } elseif (is_string($filters)) {
-            $filter = $filters;
-        }
-
-        // Verify filter was created
-        if ($filter == '' || $filter == '(=)') {
-            throw $this->makeException('ldap:LdapConnection->search_manual : No search filters defined', ERR_INTERNAL);
-        }
-
-        // Verify at least one base was passed
-        $bases = (array) $bases;
-        if (empty($bases)) {
-            throw $this->makeException('ldap:LdapConnection->search_manual : No base DNs were passed', ERR_INTERNAL);
-        }
-
-        // Search each base until result is found
-        $result = false;
-        foreach ($bases as $base) {
-            if ($scope === 'base') {
-                $result = @ldap_read($this->ldap, $base, $filter, $attributes, 0, 0, $this->timeout);
-            } elseif ($scope === 'onelevel') {
-                $result = @ldap_list($this->ldap, $base, $filter, $attributes, 0, 0, $this->timeout);
-            } else {
-                $result = @ldap_search($this->ldap, $base, $filter, $attributes, 0, 0, $this->timeout);
-            }
-
-            if ($result !== false && @ldap_count_entries($this->ldap, $result) > 0) {
-                break;
-            }
-        }
-
-        // Verify that a result was found in one of the bases
-        if ($result === false) {
-            throw $this->makeException(
-                'ldap:LdapConnection->search_manual : Failed to search LDAP using base(s) ['.
-                implode('; ', $bases).'] with filter ['.$filter.']. LDAP error ['.
-                ldap_error($this->ldap).']'
-            );
-        } elseif (@ldap_count_entries($this->ldap, $result) < 1) {
-            throw $this->makeException(
-                'ldap:LdapConnection->search_manual : No entries found in LDAP using base(s) ['.
-                implode('; ', $bases).'] with filter ['.$filter.']',
-                ERR_NO_USER
-            );
-        }
-
-        // Get all results
-        $results = ldap_get_entries($this->ldap, $result);
-        if ($results === false) {
-            throw $this->makeException(
-                'ldap:LdapConnection->search_manual : Unable to retrieve entries from search results'
-            );
-        }
-
-        // parse each entry and process its attributes
-        for ($i = 0; $i < $results['count']; $i++) {
-            $entry = $results[$i];
-
-            // iterate over the attributes of the entry
-            for ($j = 0; $j < $entry['count']; $j++) {
-                $name = $entry[$j];
-                $attribute = $entry[$name];
-
-                // decide whether to base64 encode or not
-                for ($k = 0; $k < $attribute['count']; $k++) {
-                    // base64 encode binary attributes
-                    if (strtolower($name) === 'jpegphoto' || strtolower($name) === 'objectguid') {
-                        $results[$i][$name][$k] = base64_encode($attribute[$k]);
-                    }
-                }
-            }
-        }
-
-        // Remove the count and return
-        unset($results['count']);
-        return $results;
-    }
-
-
-    /**
-     * Bind to LDAP with a specific DN and password. Simple wrapper around
-     * ldap_bind() with some additional logging.
-     *
-     * @param string $dn
-     * The DN used.
-     * @param string $password
-     * The password used.
-     * @param array $sasl_args
-     * Array of SASL options for SASL bind
-     * @return bool
-     * Returns TRUE if successful, FALSE if
-     * LDAP_INVALID_CREDENTIALS, LDAP_X_PROXY_AUTHZ_FAILURE,
-     * LDAP_INAPPROPRIATE_AUTH, LDAP_INSUFFICIENT_ACCESS
-     * @throws Error\Exception on other errors
-     */
-    public function bind($dn, $password, array $sasl_args = null)
-    {
-        if ($sasl_args != null) {
-            if (!function_exists('ldap_sasl_bind')) {
-                $ex_msg = 'Library - missing SASL support';
-                throw $this->makeException($ex_msg);
-            }
-
-            // SASL Bind, with error handling
-            $authz_id = $sasl_args['authz_id'];
-            $error = @ldap_sasl_bind(
-                $this->ldap,
-                $dn,
-                $password,
-                $sasl_args['mech'],
-                $sasl_args['realm'],
-                $sasl_args['authc_id'],
-                $sasl_args['authz_id'],
-                $sasl_args['props']
-            );
-        } else {
-            // Simple Bind, with error handling
-            $authz_id = $dn;
-            $error = @ldap_bind($this->ldap, $dn, $password);
-        }
-
-        if ($error === true) {
-            // Good
-            $this->authz_id = $authz_id;
-            Logger::debug('Library - LDAP bind(): Bind successful with DN \''.$dn.'\'');
-            return true;
-        }
-
-        /* Handle errors
-         * LDAP_INVALID_CREDENTIALS
-         * LDAP_INSUFFICIENT_ACCESS */
-        switch (ldap_errno($this->ldap)) {
-            case 32: // LDAP_NO_SUCH_OBJECT
-                // no break
-            case 47: // LDAP_X_PROXY_AUTHZ_FAILURE
-                // no break
-            case 48: // LDAP_INAPPROPRIATE_AUTH
-                // no break
-            case 49: // LDAP_INVALID_CREDENTIALS
-                // no break
-            case 50: // LDAP_INSUFFICIENT_ACCESS
-                return false;
-            default:
-                break;
-        }
-
-        // Bad
-        throw $this->makeException('Library - LDAP bind(): Bind failed with DN \''.$dn.'\'');
-    }
-
-
-    /**
-     * Applies an LDAP option to the current connection.
-     *
-     * @throws Exception
-     * @param $option
-     * @param $value
-     * @return void
-     */
-    public function setOption($option, $value)
-    {
-        // Attempt to set the LDAP option
-        if (!@ldap_set_option($this->ldap, $option, $value)) {
-            throw $this->makeException(
-                'ldap:LdapConnection->setOption : Failed to set LDAP option ['.
-                $option.'] with the value ['.$value.'] error: '.ldap_error($this->ldap),
-                ERR_INTERNAL
-            );
-        }
-
-        // Log debug message
-        Logger::debug(
-            'ldap:LdapConnection->setOption : Set the LDAP option ['.
-            $option.'] with the value ['.$value.']'
-        );
-    }
-
-
-    /**
-     * Search a given DN for attributes, and return the resulting associative
-     * array.
-     *
-     * @param string $dn
-     * The DN of an element.
-     * @param string|array $attributes
-     * The names of the attribute(s) to retrieve. Defaults to NULL; that is,
-     * all available attributes. Note that this is not very effective.
-     * @param int $maxsize
-     * The maximum size of any attribute's value(s). If exceeded, the attribute
-     * will not be returned.
-     * @return array
-     * The array of attributes and their values.
-     * @see http://no.php.net/manual/en/function.ldap-read.php
-     */
-    public function getAttributes($dn, $attributes = null, $maxsize = null)
-    {
-        // Preparations, including a pretty debug message...
-        $description = 'all attributes';
-        if (is_array($attributes)) {
-            $description = '\''.join(',', $attributes).'\'';
-        } else {
-            // Get all attributes...
-            // TODO: Verify that this originally was the intended behaviour. Could $attributes be a string?
-            $attributes = [];
-        }
-        Logger::debug('Library - LDAP getAttributes(): Getting '.$description.' from DN \''.$dn.'\'');
-
-        // Attempt to get attributes
-        // TODO: Should aliases be dereferenced?
-        $result = @ldap_read($this->ldap, $dn, 'objectClass=*', $attributes, 0, 0, $this->timeout);
-        if ($result === false) {
-            throw $this->makeException('Library - LDAP getAttributes(): Failed to get attributes from DN \''.$dn.'\'');
-        }
-        $entry = @ldap_first_entry($this->ldap, $result);
-        if ($entry === false) {
-            throw $this->makeException('Library - LDAP getAttributes(): Could not get first entry from DN \''.$dn.'\'');
-        }
-        $attributes = @ldap_get_attributes($this->ldap, $entry); // Recycling $attributes... Possibly bad practice.
-        if ($attributes === false) {
-            throw $this->makeException(
-                'Library - LDAP getAttributes(): Could not get attributes of first entry from DN \''.$dn.'\''
-            );
-        }
-
-        // Parsing each found attribute into our result set
-        $result = []; // Recycling $result... Possibly bad practice.
-        for ($i = 0; $i < $attributes['count']; $i++) {
-            // Ignore attributes that exceed the maximum allowed size
-            $name = $attributes[$i];
-            $attribute = $attributes[$name];
-
-            // Deciding whether to base64 encode
-            $values = [];
-            for ($j = 0; $j < $attribute['count']; $j++) {
-                $value = $attribute[$j];
-
-                if (!empty($maxsize) && strlen($value) > $maxsize) {
-                    // Ignoring and warning
-                    Logger::warning('Library - LDAP getAttributes(): Attribute \''.
-                        $name.'\' exceeded maximum allowed size by '.(strlen($value) - $maxsize));
-                    continue;
-                }
-
-                // Base64 encode binary attributes
-                if (strtolower($name) === 'jpegphoto'
-                    || strtolower($name) === 'objectguid'
-                    || strtolower($name) === 'ms-ds-consistencyguid'
-                ) {
-                    $values[] = base64_encode($value);
-                } else {
-                    $values[] = $value;
-                }
-            }
-
-            // Adding
-            $result[$name] = $values;
-        }
-
-        // We're done
-        Logger::debug('Library - LDAP getAttributes(): Found attributes \'('.join(',', array_keys($result)).')\'');
-        return $result;
-    }
-
-
-    /**
-     * Enter description here...
-     *
-     * @param array $config
-     * @param string $username
-     * @param string $password
-     * @return array|bool
-     */
-    public function validate($config, $username, $password = null)
-    {
-        /* Escape any characters with a special meaning in LDAP. The following
-         * characters have a special meaning (according to RFC 2253):
-         * ',', '+', '"', '\', '<', '>', ';', '*'
-         * These characters are escaped by prefixing them with '\'.
-         */
-        $username = addcslashes($username, ',+"\\<>;*');
-
-        if (isset($config['priv_user_dn'])) {
-            $this->bind($config['priv_user_dn'], $config['priv_user_pw']);
-        }
-        if (isset($config['dnpattern'])) {
-            $dn = str_replace('%username%', $username, $config['dnpattern']);
-        } else {
-            $dn = $this->searchfordn($config['searchbase'], $config['searchattributes'], $username);
-        }
-
-        if ($password !== null) {
-            // checking users credentials ... assuming below that she may read her own attributes ...
-            // escape characters with a special meaning, also in the password
-            $password = addcslashes($password, ',+"\\<>;*');
-            if (!$this->bind($dn, $password)) {
-                Logger::info(
-                    'Library - LDAP validate(): Failed to authenticate \''.$username.'\' using DN \''.$dn.'\''
-                );
-                return false;
-            }
-        }
-
-        /*
-         * Retrieve attributes from LDAP
-         */
-        $attributes = $this->getAttributes($dn, $config['attributes']);
-        return $attributes;
-    }
-
-
-    /**
-     * Borrowed function from PEAR:LDAP.
-     *
-     * Escapes the given VALUES according to RFC 2254 so that they can be safely used in LDAP filters.
-     *
-     * Any control characters with an ACII code < 32 as well as the characters with special meaning in
-     * LDAP filters "*", "(", ")", and "\" (the backslash) are converted into the representation of a
-     * backslash followed by two hex digits representing the hexadecimal value of the character.
-     *
-     * @static
-     * @param string|array $values Array of values to escape
-     * @return array Array $values, but escaped
-     */
-    public static function escape_filter_value($values = [], $singleValue = true)
-    {
-        // Parameter validation
-        $values = \SimpleSAML\Utils\Arrays::arrayize($values);
-
-        foreach ($values as $key => $val) {
-            // Escaping of filter meta characters
-            $val = str_replace('\\', '\5c', $val);
-            $val = str_replace('*', '\2a', $val);
-            $val = str_replace('(', '\28', $val);
-            $val = str_replace(')', '\29', $val);
-
-            // ASCII < 32 escaping
-            $val = self::asc2hex32($val);
-
-            if (null === $val) {
-                $val = '\0'; // apply escaped "null" if string is empty
-            }
-
-            $values[$key] = $val;
-        }
-        if ($singleValue) {
-            return $values[0];
-        }
-        return $values;
-    }
-
-
-    /**
-     * Borrowed function from PEAR:LDAP.
-     *
-     * Converts all ASCII chars < 32 to "\HEX"
-     *
-     * @param string $string String to convert
-     *
-     * @static
-     * @return string
-     */
-    public static function asc2hex32($string)
-    {
-        for ($i = 0; $i < strlen($string); $i++) {
-            $char = substr($string, $i, 1);
-            if (ord($char) < 32) {
-                $hex = dechex(ord($char));
-                if (strlen($hex) == 1) {
-                    $hex = '0'.$hex;
-                }
-                $string = str_replace($char, '\\'.$hex, $string);
-            }
-        }
-        return $string;
-    }
-
-    /**
-     * Convert SASL authz_id into a DN
-     */
-    private function authzidToDn($searchBase, $searchAttributes, $authz_id)
-    {
-        if (preg_match("/^dn:/", $authz_id)) {
-            return preg_replace("/^dn:/", "", $authz_id);
-        }
-
-        if (preg_match("/^u:/", $authz_id)) {
-            return $this->searchfordn(
-                $searchBase,
-                $searchAttributes,
-                preg_replace("/^u:/", "", $authz_id)
-            );
-        }
-        return $authz_id;
-    }
-
-    /**
-     * ldap_exop_whoami accessor, if available. Use requested authz_id
-     * otherwise.
-     *
-     * ldap_exop_whoami() has been provided as a third party patch that
-     * waited several years to get its way upstream:
-     * http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/databases/php-ldap/files
-     *
-     * When it was integrated into PHP repository, the function prototype
-     * was changed, The new prototype was used in third party patch for
-     * PHP 7.0 and 7.1, hence the version test below.
-     */
-    public function whoami($searchBase, $searchAttributes)
-    {
-        $authz_id = '';
-        if (function_exists('ldap_exop_whoami')) {
-            if (version_compare(phpversion(), '7', '<')) {
-                if (ldap_exop_whoami($this->ldap, $authz_id) !== true) {
-                    throw $this->makeException('LDAP whoami exop failure');
-                }
-            } else {
-                if (($authz_id = ldap_exop_whoami($this->ldap)) === false) {
-                    throw $this->makeException('LDAP whoami exop failure');
-                }
-            }
-        } else {
-            $authz_id = $this->authz_id;
-        }
-
-        $dn = $this->authzidToDn($searchBase, $searchAttributes, $authz_id);
-
-        if (!isset($dn) || ($dn == '')) {
-            throw $this->makeException('Cannot figure userID');
-        }
-
-        return $dn;
-    }
+if (class_exists('\SimpleSAML\Module\ldap\Auth\Ldap')) {
+    class_alias(\SimpleSAML\Module\ldap\Auth\Ldap::class, 'SimpleSAML\Auth\LDAP');
+} else {
+    throw new \Exception('The ldap module is either missing or disabled');
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingChain.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingChain.php
index a82d51334a..d160928a8f 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingChain.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingChain.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\Auth;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+
 /**
  * Class for implementing authentication processing chains for IdPs.
  *
@@ -46,6 +52,7 @@ class ProcessingChain
      *
      * @param array $idpMetadata  The metadata for the IdP.
      * @param array $spMetadata  The metadata for the SP.
+     * @param string $mode
      */
     public function __construct($idpMetadata, $spMetadata, $mode = 'idp')
     {
@@ -54,8 +61,8 @@ public function __construct($idpMetadata, $spMetadata, $mode = 'idp')
 
         $this->filters = [];
 
-        $config = \SimpleSAML\Configuration::getInstance();
-        $configauthproc = $config->getArray('authproc.'.$mode, null);
+        $config = Configuration::getInstance();
+        $configauthproc = $config->getArray('authproc.' . $mode, null);
 
         if (!empty($configauthproc)) {
             $configfilters = self::parseFilterList($configauthproc);
@@ -72,8 +79,8 @@ public function __construct($idpMetadata, $spMetadata, $mode = 'idp')
             self::addFilters($this->filters, $spFilters);
         }
 
-        \SimpleSAML\Logger::debug('Filter config for '.$idpMetadata['entityid'].'->'.
-            $spMetadata['entityid'].': '.str_replace("\n", '', var_export($this->filters, true)));
+        Logger::debug('Filter config for ' . $idpMetadata['entityid'] . '->' .
+            $spMetadata['entityid'] . ': ' . str_replace("\n", '', var_export($this->filters, true)));
     }
 
 
@@ -84,6 +91,7 @@ public function __construct($idpMetadata, $spMetadata, $mode = 'idp')
      *
      * @param array &$target  Target filter list. This list must be sorted.
      * @param array $src  Source filters. May be unsorted.
+     * @return void
      */
     private static function addFilters(&$target, $src)
     {
@@ -124,7 +132,7 @@ private static function parseFilterList($filterSrc)
             }
 
             if (!is_array($filter)) {
-                throw new \Exception('Invalid authentication processing filter configuration: '.
+                throw new \Exception('Invalid authentication processing filter configuration: ' .
                     'One of the filters wasn\'t a string or an array.');
             }
 
@@ -141,7 +149,7 @@ private static function parseFilterList($filterSrc)
      * @param array $config      Array with the authentication processing filter configuration.
      * @param int $priority      The priority of the current filter, (not included in the filter
      *                           definition.)
-     * @return ProcessingFilter  The parsed filter.
+     * @return \SimpleSAML\Auth\ProcessingFilter  The parsed filter.
      */
     private static function parseFilter($config, $priority)
     {
@@ -151,13 +159,15 @@ private static function parseFilter($config, $priority)
             throw new \Exception('Authentication processing filter without name given.');
         }
 
-        $className = \SimpleSAML\Module::resolveClass(
+        $className = Module::resolveClass(
             $config['class'],
             'Auth\Process',
             '\SimpleSAML\Auth\ProcessingFilter'
         );
         $config['%priority'] = $priority;
         unset($config['class']);
+
+        /** @var \SimpleSAML\Auth\ProcessingFilter */
         return new $className($config, null);
     }
 
@@ -181,6 +191,9 @@ private static function parseFilter($config, $priority)
      * @see State::EXCEPTION_HANDLER_FUNC
      *
      * @param array &$state  The state we are processing.
+     * @throws \SimpleSAML\Error\Exception
+     * @throws \SimpleSAML\Error\UnserializableException
+     * @return void
      */
     public function processState(&$state)
     {
@@ -201,7 +214,7 @@ public function processState(&$state)
                 $filter = array_shift($state[self::FILTERS_INDEX]);
                 $filter->process($state);
             }
-        } catch (\SimpleSAML\Error\Exception $e) {
+        } catch (Error\Exception $e) {
             // No need to convert the exception
             throw $e;
         } catch (\Exception $e) {
@@ -209,7 +222,7 @@ public function processState(&$state)
              * To be consistent with the exception we return after an redirect,
              * we convert this exception before returning it.
              */
-            throw new \SimpleSAML\Error\UnserializableException($e);
+            throw new Error\UnserializableException($e);
         }
 
         // Completed
@@ -226,6 +239,7 @@ public function processState(&$state)
      * to whatever exception handler is defined in the state array.
      *
      * @param array $state  The state we are processing.
+     * @return void
      */
     public static function resumeProcessing($state)
     {
@@ -235,10 +249,10 @@ public static function resumeProcessing($state)
             $filter = array_shift($state[self::FILTERS_INDEX]);
             try {
                 $filter->process($state);
-            } catch (\SimpleSAML\Error\Exception $e) {
+            } catch (Error\Exception $e) {
                 State::throwException($state, $e);
             } catch (\Exception $e) {
-                $e = new \SimpleSAML\Error\UnserializableException($e);
+                $e = new Error\UnserializableException($e);
                 State::throwException($state, $e);
             }
         }
@@ -255,7 +269,7 @@ public static function resumeProcessing($state)
              * in $state['ReturnURL'].
              */
             $id = State::saveState($state, self::COMPLETED_STAGE);
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL($state['ReturnURL'], [self::AUTHPARAM => $id]);
+            Utils\HTTP::redirectTrustedURL($state['ReturnURL'], [self::AUTHPARAM => $id]);
         } else {
             /* Pass the state to the function defined in $state['ReturnCall']. */
 
@@ -280,6 +294,7 @@ public static function resumeProcessing($state)
      * This function will only return if processing completes.
      *
      * @param array &$state  The state we are processing.
+     * @return void
      */
     public function processStatePassive(&$state)
     {
@@ -302,10 +317,10 @@ public function processStatePassive(&$state)
             $filter = array_shift($state[self::FILTERS_INDEX]);
             try {
                 $filter->process($state);
-            } catch (\SimpleSAML\Error\NoPassive $e) {
+            } catch (Error\NoPassive $e) {
                 // @deprecated will be removed in 2.0
                 // Ignore \SimpleSAML\Error\NoPassive exceptions
-            } catch (\SimpleSAML\Module\saml\Error\NoPassive $e) {
+            } catch (Module\saml\Error\NoPassive $e) {
                 // Ignore \SimpleSAML\Module\saml\Error\NoPassive exceptions
             }
         }
@@ -316,7 +331,7 @@ public function processStatePassive(&$state)
      *
      * @param string $id The state identifier.
      * @see State::parseStateID()
-     * @return array The state referenced by the $id parameter.
+     * @return array|null The state referenced by the $id parameter.
      */
     public static function fetchProcessedState($id)
     {
@@ -328,6 +343,8 @@ public static function fetchProcessedState($id)
 
     /**
      * @deprecated This method will be removed in SSP 2.0.
+     * @param array &$state
+     * @return void
      */
     private static function addUserID(&$state)
     {
@@ -336,10 +353,10 @@ private static function addUserID(&$state)
 
         if (isset($state['Destination']['userid.attribute'])) {
             $attributeName = $state['Destination']['userid.attribute'];
-            \SimpleSAML\Logger::debug("The 'userid.attribute' option has been deprecated.");
+            Logger::debug("The 'userid.attribute' option has been deprecated.");
         } elseif (isset($state['Source']['userid.attribute'])) {
             $attributeName = $state['Source']['userid.attribute'];
-            \SimpleSAML\Logger::debug("The 'userid.attribute' option has been deprecated.");
+            Logger::debug("The 'userid.attribute' option has been deprecated.");
         } else {
             // Default attribute
             $attributeName = 'eduPersonPrincipalName';
@@ -351,12 +368,12 @@ private static function addUserID(&$state)
 
         $uid = $state['Attributes'][$attributeName];
         if (count($uid) === 0) {
-            \SimpleSAML\Logger::warning('Empty user id attribute ['.$attributeName.'].');
+            Logger::warning('Empty user id attribute [' . $attributeName . '].');
             return;
         }
 
         if (count($uid) > 1) {
-            \SimpleSAML\Logger::warning('Multiple attribute values for user id attribute ['.$attributeName.'].');
+            Logger::warning('Multiple attribute values for user id attribute [' . $attributeName . '].');
             return;
         }
 
@@ -364,7 +381,7 @@ private static function addUserID(&$state)
         $uid = $uid[0];
 
         if (empty($uid)) {
-            \SimpleSAML\Logger::warning('Empty value in attribute '.$attributeName.". on user. Cannot set UserID.");
+            Logger::warning('Empty value in attribute ' . $attributeName . ". on user. Cannot set UserID.");
             return;
         }
         $state['UserID'] = $uid;
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingFilter.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingFilter.php
index 8c01b1d7b8..baeb5834b6 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingFilter.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/ProcessingFilter.php
@@ -50,7 +50,7 @@ public function __construct(&$config, $reserved)
         if (array_key_exists('%priority', $config)) {
             $this->priority = $config['%priority'];
             if (!is_int($this->priority)) {
-                throw new \Exception('Invalid priority: '.var_export($this->priority, true));
+                throw new \Exception('Invalid priority: ' . var_export($this->priority, true));
             }
             unset($config['%priority']);
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Simple.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Simple.php
index ffaa0cc92a..5ad7ca2cac 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Simple.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Simple.php
@@ -2,11 +2,11 @@
 
 namespace SimpleSAML\Auth;
 
-use \SimpleSAML\Configuration;
-use \SimpleSAML\Error\AuthSource as AuthSourceError;
-use \SimpleSAML\Module;
-use \SimpleSAML\Session;
-use \SimpleSAML\Utils\HTTP;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
 
 /**
  * Helper class for simple authentication applications.
@@ -45,7 +45,7 @@ public function __construct($authSource, Configuration $config = null, Session $
             $config = Configuration::getInstance();
         }
         $this->authSource = $authSource;
-        $this->app_config = $config->getConfigItem('application', null);
+        $this->app_config = $config->getConfigItem('application');
 
         if ($session === null) {
             $session = Session::getSessionFromRequest();
@@ -59,13 +59,13 @@ public function __construct($authSource, Configuration $config = null, Session $
      *
      * @return Source The authentication source.
      *
-     * @throws AuthSourceError If the requested auth source is unknown.
+     * @throws \SimpleSAML\Error\AuthSource If the requested auth source is unknown.
      */
     public function getAuthSource()
     {
         $as = Source::getById($this->authSource);
         if ($as === null) {
-            throw new AuthSourceError($this->authSource, 'Unknown authentication source.');
+            throw new Error\AuthSource($this->authSource, 'Unknown authentication source.');
         }
         return $as;
     }
@@ -97,6 +97,7 @@ public function isAuthenticated()
      * method for a description.
      *
      * @param array $params Various options to the authentication request. See the documentation.
+     * @return void
      */
     public function requireAuth(array $params = [])
     {
@@ -122,6 +123,7 @@ public function requireAuth(array $params = [])
      * Please note: this function never returns.
      *
      * @param array $params Various options to the authentication request.
+     * @return void
      */
     public function login(array $params = [])
     {
@@ -137,12 +139,12 @@ public function login(array $params = [])
             if (array_key_exists('ReturnCallback', $params)) {
                 $returnTo = (array) $params['ReturnCallback'];
             } else {
-                $returnTo = HTTP::getSelfURL();
+                $returnTo = Utils\HTTP::getSelfURL();
             }
         }
 
         if (is_string($returnTo) && $keepPost && $_SERVER['REQUEST_METHOD'] === 'POST') {
-            $returnTo = HTTP::getPOSTRedirectURL($returnTo, $_POST);
+            $returnTo = Utils\HTTP::getPOSTRedirectURL($returnTo, $_POST);
         }
 
         if (array_key_exists('ErrorURL', $params)) {
@@ -181,13 +183,14 @@ public function login(array $params = [])
      *
      * @param string|array|null $params Either the URL the user should be redirected to after logging out, or an array
      * with parameters for the logout. If this parameter is null, we will return to the current page.
+     * @return void
      */
     public function logout($params = null)
     {
         assert(is_array($params) || is_string($params) || $params === null);
 
         if ($params === null) {
-            $params = HTTP::getSelfURL();
+            $params = Utils\HTTP::getSelfURL();
         }
 
         if (is_string($params)) {
@@ -229,6 +232,7 @@ public function logout($params = null)
      * This function never returns.
      *
      * @param array $state The state after the logout.
+     * @return void
      */
     public static function logoutCompleted($state)
     {
@@ -245,7 +249,7 @@ public static function logoutCompleted($state)
                 $stateID = State::saveState($state, $state['ReturnStateStage']);
                 $params[$state['ReturnStateParam']] = $stateID;
             }
-            HTTP::redirectTrustedURL($state['ReturnTo'], $params);
+            Utils\HTTP::redirectTrustedURL($state['ReturnTo'], $params);
         }
     }
 
@@ -317,7 +321,7 @@ public function getLoginURL($returnTo = null)
         assert($returnTo === null || is_string($returnTo));
 
         if ($returnTo === null) {
-            $returnTo = HTTP::getSelfURL();
+            $returnTo = Utils\HTTP::getSelfURL();
         }
 
         $login = Module::getModuleURL('core/as_login.php', [
@@ -342,7 +346,7 @@ public function getLogoutURL($returnTo = null)
         assert($returnTo === null || is_string($returnTo));
 
         if ($returnTo === null) {
-            $returnTo = HTTP::getSelfURL();
+            $returnTo = Utils\HTTP::getSelfURL();
         }
 
         $logout = Module::getModuleURL('core/as_logout.php', [
@@ -367,33 +371,28 @@ public function getLogoutURL($returnTo = null)
     protected function getProcessedURL($url = null)
     {
         if ($url === null) {
-            $url = HTTP::getSelfURL();
+            $url = Utils\HTTP::getSelfURL();
         }
 
         $scheme = parse_url($url, PHP_URL_SCHEME);
-        $host = parse_url($url, PHP_URL_HOST) ? : HTTP::getSelfHost();
+        $host = parse_url($url, PHP_URL_HOST) ? : Utils\HTTP::getSelfHost();
         $port = parse_url($url, PHP_URL_PORT) ? : (
-            $scheme ? '' : trim(HTTP::getServerPort(), ':')
+            $scheme ? '' : ltrim(Utils\HTTP::getServerPort(), ':')
         );
-        $scheme = $scheme ? : (HTTP::getServerHTTPS() ? 'https' : 'http');
+        $scheme = $scheme ? : (Utils\HTTP::getServerHTTPS() ? 'https' : 'http');
         $path = parse_url($url, PHP_URL_PATH) ? : '/';
         $query = parse_url($url, PHP_URL_QUERY) ? : '';
         $fragment = parse_url($url, PHP_URL_FRAGMENT) ? : '';
 
-        $port = !empty($port) ? ':'.$port : '';
+        $port = !empty($port) ? ':' . $port : '';
         if (($scheme === 'http' && $port === ':80') || ($scheme === 'https' && $port === ':443')) {
             $port = '';
         }
 
-        if (is_null($this->app_config)) {
-            // nothing more we can do here
-            return $scheme.'://'.$host.$port.$path.($query ? '?'.$query : '').($fragment ? '#'.$fragment : '');
-        }
-
         $base = trim($this->app_config->getString(
             'baseURL',
-            $scheme.'://'.$host.$port
+            $scheme . '://' . $host . $port
         ), '/');
-        return $base.$path.($query ? '?'.$query : '').($fragment ? '#'.$fragment : '');
+        return $base . $path . ($query ? '?' . $query : '') . ($fragment ? '#' . $fragment : '');
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Source.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Source.php
index d24f6e774f..36b7e28c6d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Source.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/Source.php
@@ -2,6 +2,13 @@
 
 namespace SimpleSAML\Auth;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+
 /**
  * This class defines a base class for authentication source.
  *
@@ -47,13 +54,13 @@ public function __construct($info, &$config)
      * @param string $type The type of the authentication source.
      *
      * @return Source[]  Array of \SimpleSAML\Auth\Source objects of the specified type.
-     * @throws Exception If the authentication source is invalid.
+     * @throws \Exception If the authentication source is invalid.
      */
     public static function getSourcesOfType($type)
     {
         assert(is_string($type));
 
-        $config = \SimpleSAML\Configuration::getConfig('authsources.php');
+        $config = Configuration::getConfig('authsources.php');
 
         $ret = [];
 
@@ -98,6 +105,7 @@ public function getAuthId()
      * information about the user, and call completeAuth with the state array.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     abstract public function authenticate(&$state);
 
@@ -109,14 +117,19 @@ abstract public function authenticate(&$state);
      * interact with the user even in the case when the user is already authenticated.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public function reauthenticate(array &$state)
     {
         assert(isset($state['ReturnCallback']));
 
         // the default implementation just copies over the previous authentication data
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $data = $session->getAuthState($this->authId);
+        if ($data === null) {
+            throw new Error\NoState();
+        }
+
         foreach ($data as $k => $v) {
             $state[$k] = $v;
         }
@@ -131,6 +144,7 @@ public function reauthenticate(array &$state)
      * but should instead be passed to the top-level exception handler.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public static function completeAuth(&$state)
     {
@@ -159,6 +173,7 @@ public static function completeAuth(&$state)
      * check it by calling \SimpleSAML\Utils\HTTP::checkURLAllowed().
      * @param array $params Extra information about the login. Different authentication requestors may provide different
      * information. Optional, will default to an empty array.
+     * @return void
      */
     public function initLogin($return, $errorURL = null, array $params = [])
     {
@@ -191,10 +206,10 @@ public function initLogin($return, $errorURL = null, array $params = [])
 
         try {
             $this->authenticate($state);
-        } catch (\SimpleSAML\Error\Exception $e) {
+        } catch (Error\Exception $e) {
             State::throwException($state, $e);
         } catch (\Exception $e) {
-            $e = new \SimpleSAML\Error\UnserializableException($e);
+            $e = new Error\UnserializableException($e);
             State::throwException($state, $e);
         }
         self::loginCompleted($state);
@@ -207,6 +222,7 @@ public function initLogin($return, $errorURL = null, array $params = [])
      * This method never returns.
      *
      * @param array $state The state after the login has completed.
+     * @return void
      */
     public static function loginCompleted($state)
     {
@@ -219,13 +235,13 @@ public static function loginCompleted($state)
         $return = $state['\SimpleSAML\Auth\Source.Return'];
 
         // save session state
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $authId = $state['\SimpleSAML\Auth\Source.id'];
         $session->doLogin($authId, State::getPersistentAuthData($state));
 
         if (is_string($return)) {
             // redirect...
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL($return);
+            Utils\HTTP::redirectTrustedURL($return);
         } else {
             call_user_func($return, $state);
         }
@@ -245,6 +261,7 @@ public static function loginCompleted($state)
      * showing the user a page, or redirecting, this function should return.
      *
      * @param array &$state Information about the current logout operation.
+     * @return void
      */
     public function logout(&$state)
     {
@@ -261,6 +278,7 @@ public function logout(&$state)
      * but should instead be passed to the top-level exception handler.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public static function completeLogout(&$state)
     {
@@ -286,7 +304,7 @@ public static function completeLogout(&$state)
      * @param string $authId The authentication source identifier.
      * @param array  $config The configuration.
      *
-     * @return Source The parsed authentication source.
+     * @return \SimpleSAML\Auth\Source The parsed authentication source.
      * @throws \Exception If the authentication source is invalid.
      */
     private static function parseAuthSource($authId, $config)
@@ -304,21 +322,22 @@ private static function parseAuthSource($authId, $config)
 
         try {
             // Check whether or not there's a factory responsible for instantiating our Auth Source instance
-            $factoryClass = \SimpleSAML\Module::resolveClass(
+            $factoryClass = Module::resolveClass(
                 $id,
                 'Auth\Source\Factory',
                 '\SimpleSAML\Auth\SourceFactory'
             );
 
             /** @var SourceFactory $factory */
-            $factory = new $factoryClass;
+            $factory = new $factoryClass();
             $authSource = $factory->create($info, $config);
         } catch (\Exception $e) {
             // If not, instantiate the Auth Source here
-            $className = \SimpleSAML\Module::resolveClass($id, 'Auth\Source', '\SimpleSAML\Auth\Source');
+            $className = Module::resolveClass($id, 'Auth\Source', '\SimpleSAML\Auth\Source');
             $authSource = new $className($info, $config);
         }
 
+        /** @var \SimpleSAML\Auth\Source */
         return $authSource;
     }
 
@@ -335,9 +354,9 @@ private static function parseAuthSource($authId, $config)
      * authentication source of a different type is found, an exception will be thrown.
      *
      * @param string      $authId The authentication source identifier.
-     * @param string|NULL $type The type of authentication source. If NULL, any type will be accepted.
+     * @param string|null $type The type of authentication source. If NULL, any type will be accepted.
      *
-     * @return Source|NULL The AuthSource object, or NULL if no authentication
+     * @return \SimpleSAML\Auth\Source|null The AuthSource object, or NULL if no authentication
      *     source with the given identifier is found.
      * @throws \SimpleSAML\Error\Exception If no such authentication source is found or it is invalid.
      */
@@ -347,14 +366,14 @@ public static function getById($authId, $type = null)
         assert($type === null || is_string($type));
 
         // for now - load and parse config file
-        $config = \SimpleSAML\Configuration::getConfig('authsources.php');
+        $config = Configuration::getConfig('authsources.php');
 
         $authConfig = $config->getArray($authId, null);
         if ($authConfig === null) {
             if ($type !== null) {
-                throw new \SimpleSAML\Error\Exception(
-                    'No authentication source with id '.
-                    var_export($authId, true).' found.'
+                throw new Error\Exception(
+                    'No authentication source with id ' .
+                    var_export($authId, true) . ' found.'
                 );
             }
             return null;
@@ -367,10 +386,10 @@ public static function getById($authId, $type = null)
         }
 
         // the authentication source doesn't have the correct type
-        throw new \SimpleSAML\Error\Exception(
-            'Invalid type of authentication source '.
-            var_export($authId, true).'. Was '.var_export(get_class($ret), true).
-            ', should be '.var_export($type, true).'.'
+        throw new Error\Exception(
+            'Invalid type of authentication source ' .
+            var_export($authId, true) . '. Was ' . var_export(get_class($ret), true) .
+            ', should be ' . var_export($type, true) . '.'
         );
     }
 
@@ -379,6 +398,7 @@ public static function getById($authId, $type = null)
      * Called when the authentication source receives an external logout request.
      *
      * @param array $state State array for the logout operation.
+     * @return void
      */
     public static function logoutCallback($state)
     {
@@ -387,10 +407,10 @@ public static function logoutCallback($state)
 
         $source = $state['\SimpleSAML\Auth\Source.logoutSource'];
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         if (!$session->isValid($source)) {
-            \SimpleSAML\Logger::warning(
-                'Received logout from an invalid authentication source '.
+            Logger::warning(
+                'Received logout from an invalid authentication source ' .
                 var_export($source, true)
             );
 
@@ -411,6 +431,7 @@ public static function logoutCallback($state)
      *
      * @param string $assoc The identifier for this logout association.
      * @param array  $state The state array passed to the authenticate-function.
+     * @return void
      */
     protected function addLogoutCallback($assoc, $state)
     {
@@ -429,19 +450,19 @@ protected function addLogoutCallback($assoc, $state)
             $callbackState = [];
         }
 
-        $id = strlen($this->authId).':'.$this->authId.$assoc;
+        $id = strlen($this->authId) . ':' . $this->authId . $assoc;
 
         $data = [
             'callback' => $callback,
             'state'    => $callbackState,
         ];
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $session->setData(
             '\SimpleSAML\Auth\Source.LogoutCallbacks',
             $id,
             $data,
-            \SimpleSAML\Session::DATA_TIMEOUT_SESSION_END
+            Session::DATA_TIMEOUT_SESSION_END
         );
     }
 
@@ -455,14 +476,15 @@ protected function addLogoutCallback($assoc, $state)
      * This function always returns.
      *
      * @param string $assoc The logout association which should be called.
+     * @return void
      */
     protected function callLogoutCallback($assoc)
     {
         assert(is_string($assoc));
 
-        $id = strlen($this->authId).':'.$this->authId.$assoc;
+        $id = strlen($this->authId) . ':' . $this->authId . $assoc;
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
 
         $data = $session->getData('\SimpleSAML\Auth\Source.LogoutCallbacks', $id);
         if ($data === null) {
@@ -491,7 +513,7 @@ protected function callLogoutCallback($assoc)
      */
     public static function getSources()
     {
-        $config = \SimpleSAML\Configuration::getOptionalConfig('authsources.php');
+        $config = Configuration::getOptionalConfig('authsources.php');
 
         return $config->getOptions();
     }
@@ -504,12 +526,13 @@ public static function getSources()
      * @param string $id The auth source identifier.
      *
      * @throws \Exception If the first element of $source is not an identifier for the auth source.
+     * @return void
      */
     protected static function validateSource($source, $id)
     {
         if (!array_key_exists(0, $source) || !is_string($source[0])) {
             throw new \Exception(
-                'Invalid authentication source \''.$id.
+                'Invalid authentication source \'' . $id .
                 '\': First element must be a string which identifies the authentication source.'
             );
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/State.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/State.php
index 6afd183ca1..ac915cbd31 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/State.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/State.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\Auth;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+
 /**
  * This is a helper class for saving and loading state information.
  *
@@ -24,7 +30,8 @@
  * By defining an exception handler when creating the state array, users of the state
  * array can call throwException with the state and the exception. This exception will
  * be passed to the handler defined by the EXCEPTION_HANDLER_URL or EXCEPTION_HANDLER_FUNC
- * elements of the state array.
+ * elements of the state array. Note that internally this uses the request parameter name
+ * defined in EXCEPTION_PARAM, which, for technical reasons, cannot contain a ".".
  *
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
@@ -150,7 +157,7 @@ public static function getStateId(&$state, $rawId = false)
         assert(is_bool($rawId));
 
         if (!array_key_exists(self::ID, $state)) {
-            $state[self::ID] = \SimpleSAML\Utils\Random::generateID();
+            $state[self::ID] = Utils\Random::generateID();
         }
 
         $id = $state[self::ID];
@@ -161,7 +168,7 @@ public static function getStateId(&$state, $rawId = false)
         }
 
         // We have a restart URL. Return the ID with that URL.
-        return $id.':'.$state[self::RESTART];
+        return $id . ':' . $state[self::RESTART];
     }
 
 
@@ -173,7 +180,7 @@ public static function getStateId(&$state, $rawId = false)
     private static function getStateTimeout()
     {
         if (self::$stateTimeout === null) {
-            $globalConfig = \SimpleSAML\Configuration::getInstance();
+            $globalConfig = Configuration::getInstance();
             self::$stateTimeout = $globalConfig->getInteger('session.state.timeout', 60 * 60);
         }
 
@@ -207,10 +214,10 @@ public static function saveState(&$state, $stage, $rawId = false)
 
         // Save state
         $serializedState = serialize($state);
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $session->setData('\SimpleSAML\Auth\State', $id, $serializedState, self::getStateTimeout());
 
-        \SimpleSAML\Logger::debug('Saved state: '.var_export($return, true));
+        Logger::debug('Saved state: ' . var_export($return, true));
 
         return $return;
     }
@@ -233,9 +240,9 @@ public static function cloneState(array $state)
             $clonedState[self::CLONE_ORIGINAL_ID] = $state[self::ID];
             unset($clonedState[self::ID]);
 
-            \SimpleSAML\Logger::debug('Cloned state: '.var_export($state[self::ID], true));
+            Logger::debug('Cloned state: ' . var_export($state[self::ID], true));
         } else {
-            \SimpleSAML\Logger::debug('Cloned state with undefined id.');
+            Logger::debug('Cloned state with undefined id.');
         }
 
         return $clonedState;
@@ -256,18 +263,18 @@ public static function cloneState(array $state)
      * @throws \SimpleSAML\Error\NoState If we couldn't find the state and there's no URL defined to redirect to.
      * @throws \Exception If the stage of the state is invalid and there's no URL defined to redirect to.
      *
-     * @return array|NULL  State information, or null if the state is missing and $allowMissing is true.
+     * @return array|null  State information, or NULL if the state is missing and $allowMissing is true.
      */
     public static function loadState($id, $stage, $allowMissing = false)
     {
         assert(is_string($id));
         assert(is_string($stage));
         assert(is_bool($allowMissing));
-        \SimpleSAML\Logger::debug('Loading state: '.var_export($id, true));
+        Logger::debug('Loading state: ' . var_export($id, true));
 
         $sid = self::parseStateID($id);
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $state = $session->getData('\SimpleSAML\Auth\State', $sid['id']);
 
         if ($state === null) {
@@ -277,10 +284,10 @@ public static function loadState($id, $stage, $allowMissing = false)
             }
 
             if ($sid['url'] === null) {
-                throw new \SimpleSAML\Error\NoState();
+                throw new Error\NoState();
             }
 
-            \SimpleSAML\Utils\HTTP::redirectUntrustedURL($sid['url']);
+            Utils\HTTP::redirectUntrustedURL($sid['url']);
         }
 
         $state = unserialize($state);
@@ -295,16 +302,16 @@ public static function loadState($id, $stage, $allowMissing = false)
              * request if that is possible. If not, show an error.
              */
 
-            $msg = 'Wrong stage in state. Was \''.$state[self::STAGE].
-                '\', should be \''.$stage.'\'.';
+            $msg = 'Wrong stage in state. Was \'' . $state[self::STAGE] .
+                '\', should be \'' . $stage . '\'.';
 
-            \SimpleSAML\Logger::warning($msg);
+            Logger::warning($msg);
 
             if ($sid['url'] === null) {
                 throw new \Exception($msg);
             }
 
-            \SimpleSAML\Utils\HTTP::redirectUntrustedURL($sid['url']);
+            Utils\HTTP::redirectUntrustedURL($sid['url']);
         }
 
         return $state;
@@ -317,6 +324,7 @@ public static function loadState($id, $stage, $allowMissing = false)
      * This function deletes the given state to prevent the user from reusing it later.
      *
      * @param array &$state The state which should be deleted.
+     * @return void
      */
     public static function deleteState(&$state)
     {
@@ -327,9 +335,9 @@ public static function deleteState(&$state)
             return;
         }
 
-        \SimpleSAML\Logger::debug('Deleting state: '.var_export($state[self::ID], true));
+        Logger::debug('Deleting state: ' . var_export($state[self::ID], true));
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $session->deleteData('\SimpleSAML\Auth\State', $state[self::ID]);
     }
 
@@ -341,8 +349,9 @@ public static function deleteState(&$state)
      * @param \SimpleSAML\Error\Exception $exception The exception.
      *
      * @throws \SimpleSAML\Error\Exception If there is no exception handler defined, it will just throw the $exception.
+     * @return void
      */
-    public static function throwException($state, \SimpleSAML\Error\Exception $exception)
+    public static function throwException($state, Error\Exception $exception)
     {
         assert(is_array($state));
 
@@ -352,7 +361,7 @@ public static function throwException($state, \SimpleSAML\Error\Exception $excep
             $id = self::saveState($state, self::EXCEPTION_STAGE);
 
             // Redirect to the exception handler
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL(
+            Utils\HTTP::redirectTrustedURL(
                 $state[self::EXCEPTION_HANDLER_URL],
                 [self::EXCEPTION_PARAM => $id]
             );
@@ -369,15 +378,16 @@ public static function throwException($state, \SimpleSAML\Error\Exception $excep
              */
             throw $exception;
         }
+        throw new \Exception(); // This should never happen
     }
 
 
     /**
      * Retrieve an exception state.
      *
-     * @param string|NULL $id The exception id. Can be NULL, in which case it will be retrieved from the request.
+     * @param string|null $id The exception id. Can be NULL, in which case it will be retrieved from the request.
      *
-     * @return array|NULL  The state array with the exception, or NULL if no exception was thrown.
+     * @return array|null  The state array with the exception, or NULL if no exception was thrown.
      */
     public static function loadExceptionState($id = null)
     {
@@ -391,6 +401,7 @@ public static function loadExceptionState($id = null)
             $id = $_REQUEST[self::EXCEPTION_PARAM];
         }
 
+        /** @var array $state */
         $state = self::loadState($id, self::EXCEPTION_STAGE);
         assert(array_key_exists(self::EXCEPTION_DATA, $state));
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/TimeLimitedToken.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/TimeLimitedToken.php
index eb6620d5ec..ac5846dec9 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/TimeLimitedToken.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Auth/TimeLimitedToken.php
@@ -2,8 +2,12 @@
 
 namespace SimpleSAML\Auth;
 
+use SimpleSAML\Utils;
+
 /**
  * A class that generates and verifies time-limited tokens.
+ *
+ * @deprecated  This class was deprecated in 1.18 and will be removed in a future release
  */
 
 class TimeLimitedToken
@@ -32,23 +36,21 @@ class TimeLimitedToken
     /**
      * Create a new time-limited token.
      *
-     * Please note that the default algorithm will change in SSP 1.15.0 to SHA-256 instead of SHA-1.
-     *
      * @param int $lifetime Token lifetime in seconds. Defaults to 900 (15 min).
      * @param string $secretSalt A random and unique salt per installation. Defaults to the salt in the configuration.
      * @param int $skew The allowed time skew (in seconds) to correct clock deviations. Defaults to 1 second.
-     * @param string $algo The hash algorithm to use to generate the tokens. Defaults to SHA-1.
+     * @param string $algo The hash algorithm to use to generate the tokens. Defaults to SHA-256.
      *
      * @throws \InvalidArgumentException if the given parameters are invalid.
      */
-    public function __construct($lifetime = 900, $secretSalt = null, $skew = 1, $algo = 'sha1')
+    public function __construct($lifetime = 900, $secretSalt = null, $skew = 1, $algo = 'sha256')
     {
         if ($secretSalt === null) {
-            $secretSalt = \SimpleSAML\Utils\Config::getSecretSalt();
+            $secretSalt = Utils\Config::getSecretSalt();
         }
 
         if (!in_array($algo, hash_algos(), true)) {
-            throw new \InvalidArgumentException('Invalid hash algorithm "'.$algo.'"');
+            throw new \InvalidArgumentException('Invalid hash algorithm "' . $algo . '"');
         }
 
         $this->secretSalt = $secretSalt;
@@ -66,10 +68,11 @@ public function __construct($lifetime = 900, $secretSalt = null, $skew = 1, $alg
      * not only the same data must be added, but also in the same order.
      *
      * @param string $data The data to incorporate into the current token.
+     * @return void
      */
     public function addVerificationData($data)
     {
-        $this->secretSalt .= '|'.$data;
+        $this->secretSalt .= '|' . $data;
     }
 
 
@@ -89,7 +92,7 @@ private function calculateTokenValue($offset, $time = null)
         // a secret salt that should be randomly generated for each installation
         return hash(
             $this->algo,
-            $offset.':'.floor(($time - $offset) / ($this->lifetime + $this->skew)).':'.$this->secretSalt
+            $offset . ':' . floor(($time - $offset) / ($this->lifetime + $this->skew)) . ':' . $this->secretSalt
         );
     }
 
@@ -103,13 +106,14 @@ public function generate()
     {
         $time = time();
         $current_offset = ($time - $this->skew) % ($this->lifetime + $this->skew);
-        return dechex($current_offset).'-'.$this->calculateTokenValue($current_offset, $time);
+        return dechex($current_offset) . '-' . $this->calculateTokenValue($current_offset, $time);
     }
 
 
     /**
      * @see generate
      * @deprecated This method will be removed in SSP 2.0. Use generate() instead.
+     * @return string
      */
     public function generate_token()
     {
@@ -122,7 +126,7 @@ public function generate_token()
      *
      * @param string $token The token to validate.
      *
-     * @return boolean True if the given token is currently valid, false otherwise.
+     * @return bool True if the given token is currently valid, false otherwise.
      */
     public function validate($token)
     {
@@ -139,6 +143,8 @@ public function validate($token)
     /**
      * @see validate
      * @deprecated This method will be removed in SSP 2.0. Use validate() instead.
+     * @param string $token
+     * @return bool
      */
     public function validate_token($token)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/Artifact.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/Artifact.php
index 3ce30d977f..09703ec99d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/Artifact.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/Artifact.php
@@ -4,18 +4,15 @@
  * Implementation of the Shibboleth 1.3 Artifact binding.
  *
  * @package SimpleSAMLphp
+ * @deprecated This class will be removed in a future release
  */
 
 namespace SimpleSAML\Bindings\Shib13;
 
 use SAML2\DOMDocumentFactory;
+use SimpleSAML\Configuration;
 use SimpleSAML\Error;
-use SimpleSAML\Utils\Config;
-use SimpleSAML\Utils\HTTP;
-use SimpleSAML\Utils\Random;
-use SimpleSAML\Utils\System;
-use SimpleSAML\Utils\Time;
-use SimpleSAML\Utils\XML;
+use SimpleSAML\Utils;
 
 class Artifact
 {
@@ -61,9 +58,9 @@ private static function buildRequest(array $artifacts)
         $msg = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">'.
             '<SOAP-ENV:Body>'.
             '<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"'.
-            ' RequestID="'.Random::generateID().'"'.
+            ' RequestID="'.Utils\Random::generateID().'"'.
             ' MajorVersion="1" MinorVersion="1"'.
-            ' IssueInstant="'.Time::generateTimestamp().'"'.
+            ' IssueInstant="'.Utils\Time::generateTimestamp().'"'.
             '>';
 
         foreach ($artifacts as $a) {
@@ -96,18 +93,18 @@ private static function extractResponse($soapResponse)
         }
 
         $soapEnvelope = $doc->firstChild;
-        if (!XML::isDOMNodeOfType($soapEnvelope, 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/')) {
+        if (!Utils\XML::isDOMNodeOfType($soapEnvelope, 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/')) {
             throw new Error\Exception('Expected artifact response to contain a <soap:Envelope> element.');
         }
 
-        $soapBody = XML::getDOMChildren($soapEnvelope, 'Body', 'http://schemas.xmlsoap.org/soap/envelope/');
+        $soapBody = Utils\XML::getDOMChildren($soapEnvelope, 'Body', 'http://schemas.xmlsoap.org/soap/envelope/');
         if (count($soapBody) === 0) {
             throw new Error\Exception('Couldn\'t find <soap:Body> in <soap:Envelope>.');
         }
         $soapBody = $soapBody[0];
 
 
-        $responseElement = XML::getDOMChildren($soapBody, 'Response', 'urn:oasis:names:tc:SAML:1.0:protocol');
+        $responseElement = Utils\XML::getDOMChildren($soapBody, 'Response', 'urn:oasis:names:tc:SAML:1.0:protocol');
         if (count($responseElement) === 0) {
             throw new Error\Exception('Couldn\'t find <saml1p:Response> in <soap:Body>.');
         }
@@ -133,13 +130,14 @@ private static function extractResponse($soapResponse)
      * @return string The <saml1p:Response> element, as an XML string.
      * @throws Error\Exception
      */
-    public static function receive(\SimpleSAML\Configuration $spMetadata, \SimpleSAML\Configuration $idpMetadata)
+    public static function receive(Configuration $spMetadata, Configuration $idpMetadata)
     {
         $artifacts = self::getArtifacts();
         $request = self::buildRequest($artifacts);
 
-        XML::debugSAMLMessage($request, 'out');
+        Utils\XML::debugSAMLMessage($request, 'out');
 
+        /** @var array $url */
         $url = $idpMetadata->getDefaultEndpoint(
             'ArtifactResolutionService',
             ['urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding']
@@ -157,12 +155,12 @@ public static function receive(\SimpleSAML\Configuration $spMetadata, \SimpleSAM
                 "-----END CERTIFICATE-----\n";
         }
 
-        $file = System::getTempDir().DIRECTORY_SEPARATOR.sha1($certData).'.crt';
+        $file = Utils\System::getTempDir().DIRECTORY_SEPARATOR.sha1($certData).'.crt';
         if (!file_exists($file)) {
-            System::writeFile($file, $certData);
+            Utils\System::writeFile($file, $certData);
         }
 
-        $spKeyCertFile = Config::getCertPath($spMetadata->getString('privatekey'));
+        $spKeyCertFile = Utils\Config::getCertPath($spMetadata->getString('privatekey'));
 
         $opts = [
             'ssl' => [
@@ -181,9 +179,9 @@ public static function receive(\SimpleSAML\Configuration $spMetadata, \SimpleSAM
         ];
 
         // Fetch the artifact
-        $response = HTTP::fetch($url, $opts);
         /** @var string $response */
-        XML::debugSAMLMessage($response, 'in');
+        $response = Utils\HTTP::fetch($url, $opts);
+        Utils\XML::debugSAMLMessage($response, 'in');
 
         // Find the response in the SOAP message
         $response = self::extractResponse($response);
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php
index 893682c1b8..d7c38700a9 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php
@@ -6,14 +6,15 @@
  *
  * @author Andreas Åkre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
+ * @deprecated This class will be removed in a future release
  */
 
 namespace SimpleSAML\Bindings\Shib13;
 
 use SAML2\DOMDocumentFactory;
-use SimpleSAML\Utils\Crypto;
-use SimpleSAML\Utils\HTTP;
-use SimpleSAML\Utils\XML;
+use SimpleSAML\Configuration;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Utils;
 use SimpleSAML\XML\Shib13\AuthnResponse;
 use SimpleSAML\XML\Signer;
 
@@ -22,12 +23,12 @@ class HTTPPost
     /**
      * @var \SimpleSAML\Configuration
      */
-    private $configuration = null;
+    private $configuration;
 
     /**
      * @var \SimpleSAML\Metadata\MetaDataStorageHandler
      */
-    private $metadata = null;
+    private $metadata;
 
 
     /**
@@ -37,8 +38,8 @@ class HTTPPost
      * @param \SimpleSAML\Metadata\MetaDataStorageHandler $metadatastore A store where to find metadata.
      */
     public function __construct(
-        \SimpleSAML\Configuration $configuration,
-        \SimpleSAML\Metadata\MetaDataStorageHandler $metadatastore
+        Configuration $configuration,
+        MetaDataStorageHandler $metadatastore
     ) {
         $this->configuration = $configuration;
         $this->metadata = $metadatastore;
@@ -53,18 +54,19 @@ public function __construct(
      * @param \SimpleSAML\Configuration $spmd The metadata of the SP which is receiving the response.
      * @param string|null               $relayState The relaystate for the SP.
      * @param string                    $shire The shire which should receive the response.
+     * @return void
      */
     public function sendResponse(
         $response,
-        \SimpleSAML\Configuration $idpmd,
-        \SimpleSAML\Configuration $spmd,
+        Configuration $idpmd,
+        Configuration $spmd,
         $relayState,
         $shire
     ) {
-        XML::checkSAMLMessage($response, 'saml11');
+        Utils\XML::checkSAMLMessage($response, 'saml11');
 
-        $privatekey = Crypto::loadPrivateKey($idpmd, true);
-        $publickey = Crypto::loadPublicKey($idpmd, true);
+        $privatekey = Utils\Crypto::loadPrivateKey($idpmd, true);
+        $publickey = Utils\Crypto::loadPublicKey($idpmd, true);
 
         $responsedom = DOMDocumentFactory::fromString(str_replace("\r", "", $response));
 
@@ -101,7 +103,7 @@ public function sendResponse(
         if ($signResponse) {
             // sign the response - this must be done after encrypting the assertion
             // we insert the signature before the saml2p:Status element
-            $statusElements = XML::getDOMChildren($responseroot, 'Status', '@saml1p');
+            $statusElements = Utils\XML::getDOMChildren($responseroot, 'Status', '@saml1p');
             assert(count($statusElements) === 1);
             $signer->sign($responseroot, $responseroot, $statusElements[0]);
         } else {
@@ -111,9 +113,9 @@ public function sendResponse(
 
         $response = $responsedom->saveXML();
 
-        XML::debugSAMLMessage($response, 'out');
+        Utils\XML::debugSAMLMessage($response, 'out');
 
-        HTTP::submitPOSTData($shire, [
+        Utils\HTTP::submitPOSTData($shire, [
             'TARGET'       => $relayState,
             'SAMLResponse' => base64_encode($response),
         ]);
@@ -137,9 +139,9 @@ public function decodeResponse($post)
         $rawResponse = $post['SAMLResponse'];
         $samlResponseXML = base64_decode($rawResponse);
 
-        XML::debugSAMLMessage($samlResponseXML, 'in');
+        Utils\XML::debugSAMLMessage($samlResponseXML, 'in');
 
-        XML::checkSAMLMessage($samlResponseXML, 'saml11');
+        Utils\XML::checkSAMLMessage($samlResponseXML, 'saml11');
 
         $samlResponse = new AuthnResponse();
         $samlResponse->setXML($samlResponseXML);
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Configuration.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Configuration.php
index 7c575ff875..cbcebcf01e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Configuration.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Configuration.php
@@ -2,7 +2,9 @@
 
 namespace SimpleSAML;
 
-use SimpleSAML\Utils\System;
+use SAML2\Constants;
+use SimpleSAML\Error;
+use SimpleSAML\Utils;
 
 /**
  * Configuration of SimpleSAMLphp
@@ -188,6 +190,7 @@ private static function loadFromFile($filename, $required)
      *
      * @param string $path The directory which contains the configuration files.
      * @param string $configSet The configuration set. Defaults to 'simplesaml'.
+     * @return void
      */
     public static function setConfigDir($path, $configSet = 'simplesaml')
     {
@@ -206,6 +209,8 @@ public static function setConfigDir($path, $configSet = 'simplesaml')
      * @param \SimpleSAML\Configuration $config  The configuration object to store
      * @param string $filename  The name of the configuration file.
      * @param string $configSet  The configuration set. Optional, defaults to 'simplesaml'.
+     * @return void
+     * @throws \Exception
      */
     public static function setPreLoadedConfig(
         Configuration $config,
@@ -217,14 +222,14 @@ public static function setPreLoadedConfig(
 
         if (!array_key_exists($configSet, self::$configDirs)) {
             if ($configSet !== 'simplesaml') {
-                throw new \Exception('Configuration set \''.$configSet.'\' not initialized.');
+                throw new \Exception('Configuration set \'' . $configSet . '\' not initialized.');
             } else {
-                self::$configDirs['simplesaml'] = dirname(dirname(dirname(__FILE__))).'/config';
+                self::$configDirs['simplesaml'] = dirname(dirname(dirname(__FILE__))) . '/config';
             }
         }
 
         $dir = self::$configDirs[$configSet];
-        $filePath = $dir.'/'.$filename;
+        $filePath = $dir . '/' . $filename;
 
         self::$loadedConfigs[$filePath] = $config;
     }
@@ -246,14 +251,14 @@ public static function getConfig($filename = 'config.php', $configSet = 'simples
 
         if (!array_key_exists($configSet, self::$configDirs)) {
             if ($configSet !== 'simplesaml') {
-                throw new \Exception('Configuration set \''.$configSet.'\' not initialized.');
+                throw new \Exception('Configuration set \'' . $configSet . '\' not initialized.');
             } else {
                 self::$configDirs['simplesaml'] = Utils\Config::getConfigDir();
             }
         }
 
         $dir = self::$configDirs[$configSet];
-        $filePath = $dir.'/'.$filename;
+        $filePath = $dir . '/' . $filename;
         return self::loadFromFile($filePath, true);
     }
 
@@ -276,14 +281,14 @@ public static function getOptionalConfig($filename = 'config.php', $configSet =
 
         if (!array_key_exists($configSet, self::$configDirs)) {
             if ($configSet !== 'simplesaml') {
-                throw new \Exception('Configuration set \''.$configSet.'\' not initialized.');
+                throw new \Exception('Configuration set \'' . $configSet . '\' not initialized.');
             } else {
                 self::$configDirs['simplesaml'] = Utils\Config::getConfigDir();
             }
         }
 
         $dir = self::$configDirs[$configSet];
-        $filePath = $dir.'/'.$filename;
+        $filePath = $dir . '/' . $filename;
         return self::loadFromFile($filePath, false);
     }
 
@@ -345,7 +350,7 @@ public static function getInstance($instancename = 'simplesaml')
         }
 
         throw new Error\CriticalConfigurationError(
-            'Configuration with name '.$instancename.' is not initialized.'
+            'Configuration with name ' . $instancename . ' is not initialized.'
         );
     }
 
@@ -358,6 +363,7 @@ public static function getInstance($instancename = 'simplesaml')
      * @param string $path
      * @param string $instancename
      * @param string $configfilename
+     * @return \SimpleSAML\Configuration
      *
      * @see setConfigDir()
      * @deprecated This function is superseeded by the setConfigDir function.
@@ -378,7 +384,7 @@ public static function init($path, $instancename = 'simplesaml', $configfilename
             return self::$instance[$instancename];
         }
 
-        self::$instance[$instancename] = self::loadFromFile($path.'/'.$configfilename, true);
+        self::$instance[$instancename] = self::loadFromFile($path . '/' . $configfilename, true);
         return self::$instance[$instancename];
     }
 
@@ -390,6 +396,7 @@ public static function init($path, $instancename = 'simplesaml', $configfilename
      *
      * @param string $instancename
      * @param string $filename
+     * @return \SimpleSAML\Configuration
      *
      * @see getConfig()
      * @deprecated This function is superseeded by the getConfig() function.
@@ -407,7 +414,7 @@ public function copyFromBase($instancename, $filename)
 
         $dir = dirname($this->filename);
 
-        self::$instance[$instancename] = self::loadFromFile($dir.'/'.$filename, true);
+        self::$instance[$instancename] = self::loadFromFile($dir . '/' . $filename, true);
         return self::$instance[$instancename];
     }
 
@@ -419,7 +426,7 @@ public function copyFromBase($instancename, $filename)
      */
     public function getVersion()
     {
-        return '1.17.8';
+        return '1.18.8';
     }
 
 
@@ -441,7 +448,7 @@ public function getValue($name, $default = null)
         if (!array_key_exists($name, $this->configuration)) {
             if ($default === self::REQUIRED_OPTION) {
                 throw new \Exception(
-                    $this->location.': Could not retrieve the required option '.
+                    $this->location . ': Could not retrieve the required option ' .
                     var_export($name, true)
                 );
             }
@@ -506,7 +513,7 @@ public function getBaseURL()
         }
         if (preg_match('/^\*(.*)$/D', $this->getString('baseurlpath', 'simplesaml/'), $matches)) {
             // deprecated behaviour, will be removed in the future
-            return Utils\HTTP::getFirstPathElement(false).$matches[1];
+            return Utils\HTTP::getFirstPathElement(false) . $matches[1];
         }
         return ltrim($this->getBasePath(), '/');
     }
@@ -531,13 +538,13 @@ public function getBasePath()
                 // absolute URL without path
                 return '/';
             }
-            return '/'.rtrim($matches[1], '/')."/";
+            return '/' . rtrim($matches[1], '/') . '/';
         } elseif ($baseURL === '' || $baseURL === '/') {
             // root directory of site
             return '/';
         } elseif (preg_match('#^/?((?:[^/\s]+/?)+)#', $baseURL, $matches)) {
             // local path only
-            return '/'.rtrim($matches[1], '/').'/';
+            return '/' . rtrim($matches[1], '/') . '/';
         } else {
             /*
              * Invalid 'baseurlpath'. We cannot recover from this, so throw a critical exception and try to be graceful
@@ -546,8 +553,8 @@ public function getBasePath()
             $c = $this->toArray();
             $c['baseurlpath'] = Utils\HTTP::guessBasePath();
             throw new Error\CriticalConfigurationError(
-                'Incorrect format for option \'baseurlpath\'. Value is: "'.
-                $this->getString('baseurlpath', 'simplesaml/').'". Valid format is in the form'.
+                'Incorrect format for option \'baseurlpath\'. Value is: "' .
+                $this->getString('baseurlpath', 'simplesaml/') . '". Valid format is in the form' .
                 ' [(http|https)://(hostname|fqdn)[:port]]/[path/to/simplesaml/].',
                 $this->filename,
                 $c
@@ -574,7 +581,7 @@ public function resolvePath($path)
 
         assert(is_string($path));
 
-        return System::resolvePath($path, $this->getBaseDir());
+        return Utils\System::resolvePath($path, $this->getBaseDir());
     }
 
 
@@ -601,11 +608,12 @@ public function getPathValue($name, $default = null)
             $path = $this->configuration[$name];
         }
 
+        $path = $this->resolvePath($path);
         if ($path === null) {
             return null;
         }
 
-        return $this->resolvePath($path).'/';
+        return $path . '/';
     }
 
 
@@ -679,7 +687,7 @@ public function getBoolean($name, $default = self::REQUIRED_OPTION)
 
         if (!is_bool($ret)) {
             throw new \Exception(
-                $this->location.': The option '.var_export($name, true).
+                $this->location . ': The option ' . var_export($name, true) .
                 ' is not a valid boolean value.'
             );
         }
@@ -717,7 +725,7 @@ public function getString($name, $default = self::REQUIRED_OPTION)
 
         if (!is_string($ret)) {
             throw new \Exception(
-                $this->location.': The option '.var_export($name, true).
+                $this->location . ': The option ' . var_export($name, true) .
                 ' is not a valid string value.'
             );
         }
@@ -755,7 +763,7 @@ public function getInteger($name, $default = self::REQUIRED_OPTION)
 
         if (!is_int($ret)) {
             throw new \Exception(
-                $this->location.': The option '.var_export($name, true).
+                $this->location . ': The option ' . var_export($name, true) .
                 ' is not a valid integer value.'
             );
         }
@@ -799,9 +807,9 @@ public function getIntegerRange($name, $minimum, $maximum, $default = self::REQU
 
         if ($ret < $minimum || $ret > $maximum) {
             throw new \Exception(
-                $this->location.': Value of option '.var_export($name, true).
-                ' is out of range. Value is '.$ret.', allowed range is ['
-                .$minimum.' - '.$maximum.']'
+                $this->location . ': Value of option ' . var_export($name, true) .
+                ' is out of range. Value is ' . $ret . ', allowed range is ['
+                . $minimum . ' - ' . $maximum . ']'
             );
         }
 
@@ -849,9 +857,9 @@ public function getValueValidate($name, $allowedValues, $default = self::REQUIRE
             $strValues = implode(', ', $strValues);
 
             throw new \Exception(
-                $this->location.': Invalid value given for the option '.
-                var_export($name, true).'. It should have one of the following values: '.
-                $strValues.'; but it had the following value: '.var_export($ret, true)
+                $this->location . ': Invalid value given for the option ' .
+                var_export($name, true) . '. It should have one of the following values: ' .
+                $strValues . '; but it had the following value: ' . var_export($ret, true)
             );
         }
 
@@ -887,7 +895,7 @@ public function getArray($name, $default = self::REQUIRED_OPTION)
         }
 
         if (!is_array($ret)) {
-            throw new \Exception($this->location.': The option '.var_export($name, true).' is not an array.');
+            throw new \Exception($this->location . ': The option ' . var_export($name, true) . ' is not an array.');
         }
 
         return $ret;
@@ -953,7 +961,7 @@ public function getArrayizeString($name, $default = self::REQUIRED_OPTION)
         foreach ($ret as $value) {
             if (!is_string($value)) {
                 throw new \Exception(
-                    $this->location.': The option '.var_export($name, true).
+                    $this->location . ': The option ' . var_export($name, true) .
                     ' must be a string or an array of strings.'
                 );
             }
@@ -973,33 +981,35 @@ public function getArrayizeString($name, $default = self::REQUIRED_OPTION)
      * is given.
      *
      * @param string $name The name of the option.
-     * @param mixed  $default A default value which will be returned if the option isn't found. The option will be
-     *                        required if this parameter isn't given. The default value can be any value, including
-     *                        null.
+     * @param array|null $default A default value which will be used if the option isn't found. An empty Configuration
+     *                        object will be returned if this parameter isn't given and the option doesn't exist.
+     *                        This function will only return null if $default is set to null and the option
+     *                        doesn't exist.
      *
      * @return mixed The option with the given name, or $default if the option isn't found and $default is specified.
      *
      * @throws \Exception If the option is not an array.
      */
-    public function getConfigItem($name, $default = self::REQUIRED_OPTION)
+    public function getConfigItem($name, $default = [])
     {
         assert(is_string($name));
 
         $ret = $this->getValue($name, $default);
 
-        if ($ret === $default) {
-            // the option wasn't found, or it matches the default value. In any case, return this value
-            return $ret;
+        if ($ret === null) {
+            // the option wasn't found, or it is explicitly null
+            // do not instantiate a new Configuration instance, but just return null
+            return null;
         }
 
         if (!is_array($ret)) {
             throw new \Exception(
-                $this->location.': The option '.var_export($name, true).
+                $this->location . ': The option ' . var_export($name, true) .
                 ' is not an array.'
             );
         }
 
-        return self::loadFromArray($ret, $this->location.'['.var_export($name, true).']');
+        return self::loadFromArray($ret, $this->location . '[' . var_export($name, true) . ']');
     }
 
 
@@ -1014,38 +1024,32 @@ public function getConfigItem($name, $default = self::REQUIRED_OPTION)
      * default value is given.
      *
      * @param string $name The name of the option.
-     * @param mixed  $default A default value which will be returned if the option isn't found. The option will be
-     *                        required if this parameter isn't given. The default value can be any value, including
-     *                        null.
      *
-     * @return mixed The option with the given name, or $default if the option isn't found and $default is specified.
+     * @return array The array of \SimpleSAML\Configuration objects.
      *
      * @throws \Exception If the value of this element is not an array.
+     *
+     * @deprecated Very specific function, will be removed in a future release; use getConfigItem or getArray instead
      */
-    public function getConfigList($name, $default = self::REQUIRED_OPTION)
+    public function getConfigList($name)
     {
         assert(is_string($name));
 
-        $ret = $this->getValue($name, $default);
-
-        if ($ret === $default) {
-            // the option wasn't found, or it matches the default value. In any case, return this value
-            return $ret;
-        }
+        $ret = $this->getValue($name, []);
 
         if (!is_array($ret)) {
             throw new \Exception(
-                $this->location.': The option '.var_export($name, true).
+                $this->location . ': The option ' . var_export($name, true) .
                 ' is not an array.'
             );
         }
 
         $out = [];
         foreach ($ret as $index => $config) {
-            $newLoc = $this->location.'['.var_export($name, true).']['.
-                var_export($index, true).']';
+            $newLoc = $this->location . '[' . var_export($name, true) . '][' .
+                var_export($index, true) . ']';
             if (!is_array($config)) {
-                throw new \Exception($newLoc.': The value of this element was expected to be an array.');
+                throw new \Exception($newLoc . ': The value of this element was expected to be an array.');
             }
             $out[$index] = self::loadFromArray($config, $newLoc);
         }
@@ -1096,21 +1100,21 @@ private function getDefaultBinding($endpointType)
         assert(is_string($endpointType));
 
         $set = $this->getString('metadata-set');
-        switch ($set.':'.$endpointType) {
+        switch ($set . ':' . $endpointType) {
             case 'saml20-idp-remote:SingleSignOnService':
             case 'saml20-idp-remote:SingleLogoutService':
             case 'saml20-sp-remote:SingleLogoutService':
-                return \SAML2\Constants::BINDING_HTTP_REDIRECT;
+                return Constants::BINDING_HTTP_REDIRECT;
             case 'saml20-sp-remote:AssertionConsumerService':
-                return \SAML2\Constants::BINDING_HTTP_POST;
+                return Constants::BINDING_HTTP_POST;
             case 'saml20-idp-remote:ArtifactResolutionService':
-                return \SAML2\Constants::BINDING_SOAP;
+                return Constants::BINDING_SOAP;
             case 'shib13-idp-remote:SingleSignOnService':
                 return 'urn:mace:shibboleth:1.0:profiles:AuthnRequest';
             case 'shib13-sp-remote:AssertionConsumerService':
                 return 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post';
             default:
-                throw new \Exception('Missing default binding for '.$endpointType.' in '.$set);
+                throw new \Exception('Missing default binding for ' . $endpointType . ' in ' . $set);
         }
     }
 
@@ -1128,7 +1132,7 @@ public function getEndpoints($endpointType)
     {
         assert(is_string($endpointType));
 
-        $loc = $this->location.'['.var_export($endpointType, true).']:';
+        $loc = $this->location . '[' . var_export($endpointType, true) . ']:';
 
         if (!array_key_exists($endpointType, $this->configuration)) {
             // no endpoints of the given type
@@ -1141,12 +1145,12 @@ public function getEndpoints($endpointType)
             // for backwards-compatibility
             $eps = [$eps];
         } elseif (!is_array($eps)) {
-            throw new \Exception($loc.': Expected array or string.');
+            throw new \Exception($loc . ': Expected array or string.');
         }
 
 
         foreach ($eps as $i => &$ep) {
-            $iloc = $loc.'['.var_export($i, true).']';
+            $iloc = $loc . '[' . var_export($i, true) . ']';
 
             if (is_string($ep)) {
                 // for backwards-compatibility
@@ -1154,37 +1158,37 @@ public function getEndpoints($endpointType)
                     'Location' => $ep,
                     'Binding'  => $this->getDefaultBinding($endpointType),
                 ];
-                $responseLocation = $this->getString($endpointType.'Response', null);
+                $responseLocation = $this->getString($endpointType . 'Response', null);
                 if ($responseLocation !== null) {
                     $ep['ResponseLocation'] = $responseLocation;
                 }
             } elseif (!is_array($ep)) {
-                throw new \Exception($iloc.': Expected a string or an array.');
+                throw new \Exception($iloc . ': Expected a string or an array.');
             }
 
             if (!array_key_exists('Location', $ep)) {
-                throw new \Exception($iloc.': Missing Location.');
+                throw new \Exception($iloc . ': Missing Location.');
             }
             if (!is_string($ep['Location'])) {
-                throw new \Exception($iloc.': Location must be a string.');
+                throw new \Exception($iloc . ': Location must be a string.');
             }
 
             if (!array_key_exists('Binding', $ep)) {
-                throw new \Exception($iloc.': Missing Binding.');
+                throw new \Exception($iloc . ': Missing Binding.');
             }
             if (!is_string($ep['Binding'])) {
-                throw new \Exception($iloc.': Binding must be a string.');
+                throw new \Exception($iloc . ': Binding must be a string.');
             }
 
             if (array_key_exists('ResponseLocation', $ep)) {
                 if (!is_string($ep['ResponseLocation'])) {
-                    throw new \Exception($iloc.': ResponseLocation must be a string.');
+                    throw new \Exception($iloc . ': ResponseLocation must be a string.');
                 }
             }
 
             if (array_key_exists('index', $ep)) {
                 if (!is_int($ep['index'])) {
-                    throw new \Exception($iloc.': index must be an integer.');
+                    throw new \Exception($iloc . ': index must be an integer.');
                 }
             }
         }
@@ -1220,8 +1224,8 @@ public function getEndpointPrioritizedByBinding($endpointType, array $bindings,
         }
 
         if ($default === self::REQUIRED_OPTION) {
-            $loc = $this->location.'['.var_export($endpointType, true).']:';
-            throw new \Exception($loc.'Could not find a supported '.$endpointType.' endpoint.');
+            $loc = $this->location . '[' . var_export($endpointType, true) . ']:';
+            throw new \Exception($loc . 'Could not find a supported ' . $endpointType . ' endpoint.');
         }
 
         return $default;
@@ -1236,9 +1240,9 @@ public function getEndpointPrioritizedByBinding($endpointType, array $bindings,
      * @param mixed  $default The default value to return if no matching endpoint is found. If no default is provided,
      *     an exception will be thrown.
      *
-     * @return array|null The default endpoint, or null if no acceptable endpoints are used.
+     * @return mixed The default endpoint, or the $default parameter if no acceptable endpoints are used.
      *
-     * @throws \Exception If no supported endpoint is found.
+     * @throws \Exception If no supported endpoint is found and no $default parameter is specified.
      */
     public function getDefaultEndpoint($endpointType, array $bindings = null, $default = self::REQUIRED_OPTION)
     {
@@ -1252,8 +1256,8 @@ public function getDefaultEndpoint($endpointType, array $bindings = null, $defau
         }
 
         if ($default === self::REQUIRED_OPTION) {
-            $loc = $this->location.'['.var_export($endpointType, true).']:';
-            throw new \Exception($loc.'Could not find a supported '.$endpointType.' endpoint.');
+            $loc = $this->location . '[' . var_export($endpointType, true) . ']:';
+            throw new \Exception($loc . 'Could not find a supported ' . $endpointType . ' endpoint.');
         }
 
         return $default;
@@ -1269,7 +1273,7 @@ public function getDefaultEndpoint($endpointType, array $bindings = null, $defau
      * @param mixed  $default The default value. If no default is given, and the option isn't found, an exception will
      *     be thrown.
      *
-     * @return array Associative array with language => string pairs.
+     * @return mixed Associative array with language => string pairs, or the provided default value.
      *
      * @throws \Exception If the translation is not an array or a string, or its index or value are not strings.
      */
@@ -1283,22 +1287,22 @@ public function getLocalizedString($name, $default = self::REQUIRED_OPTION)
             return $ret;
         }
 
-        $loc = $this->location.'['.var_export($name, true).']';
+        $loc = $this->location . '[' . var_export($name, true) . ']';
 
         if (is_string($ret)) {
             $ret = ['en' => $ret];
         }
 
         if (!is_array($ret)) {
-            throw new \Exception($loc.': Must be an array or a string.');
+            throw new \Exception($loc . ': Must be an array or a string.');
         }
 
         foreach ($ret as $k => $v) {
             if (!is_string($k)) {
-                throw new \Exception($loc.': Invalid language code: '.var_export($k, true));
+                throw new \Exception($loc . ': Invalid language code: ' . var_export($k, true));
             }
             if (!is_string($v)) {
-                throw new \Exception($loc.'['.var_export($v, true).']: Must be a string.');
+                throw new \Exception($loc . '[' . var_export($v, true) . ']: Must be a string.');
             }
         }
 
@@ -1326,9 +1330,9 @@ public function getPublicKeys($use = null, $required = false, $prefix = '')
         assert(is_bool($required));
         assert(is_string($prefix));
 
-        if ($this->hasValue($prefix.'keys')) {
+        if ($this->hasValue($prefix . 'keys')) {
             $ret = [];
-            foreach ($this->getArray($prefix.'keys') as $key) {
+            foreach ($this->getArray($prefix . 'keys') as $key) {
                 if ($use !== null && isset($key[$use]) && !$key[$use]) {
                     continue;
                 }
@@ -1339,8 +1343,8 @@ public function getPublicKeys($use = null, $required = false, $prefix = '')
                 $ret[] = $key;
             }
             return $ret;
-        } elseif ($this->hasValue($prefix.'certData')) {
-            $certData = $this->getString($prefix.'certData');
+        } elseif ($this->hasValue($prefix . 'certData')) {
+            $certData = $this->getString($prefix . 'certData');
             $certData = preg_replace('/\s+/', '', $certData);
             return [
                 [
@@ -1350,20 +1354,22 @@ public function getPublicKeys($use = null, $required = false, $prefix = '')
                     'X509Certificate' => $certData,
                 ],
             ];
-        } elseif ($this->hasValue($prefix.'certificate')) {
-            $file = $this->getString($prefix.'certificate');
+        } elseif ($this->hasValue($prefix . 'certificate')) {
+            $file = $this->getString($prefix . 'certificate');
             $file = Utils\Config::getCertPath($file);
             $data = @file_get_contents($file);
 
             if ($data === false) {
-                throw new \Exception($this->location.': Unable to load certificate/public key from file "'.$file.'".');
+                throw new \Exception(
+                    $this->location . ': Unable to load certificate/public key from file "' . $file . '".'
+                );
             }
 
             // extract certificate data (if this is a certificate)
             $pattern = '/^-----BEGIN CERTIFICATE-----([^-]*)^-----END CERTIFICATE-----/m';
             if (!preg_match($pattern, $data, $matches)) {
                 throw new \SimpleSAML\Error\Exception(
-                    $this->location.': Could not find PEM encoded certificate in "'.$file.'".'
+                    $this->location . ': Could not find PEM encoded certificate in "' . $file . '".'
                 );
             }
             $certData = preg_replace('/\s+/', '', $matches[1]);
@@ -1377,7 +1383,7 @@ public function getPublicKeys($use = null, $required = false, $prefix = '')
                 ],
             ];
         } elseif ($required === true) {
-            throw new \SimpleSAML\Error\Exception($this->location.': Missing certificate in metadata.');
+            throw new \SimpleSAML\Error\Exception($this->location . ': Missing certificate in metadata.');
         } else {
             return [];
         }
@@ -1387,6 +1393,8 @@ public function getPublicKeys($use = null, $required = false, $prefix = '')
      * Clear any configuration information cached.
      * Allows for configuration files to be changed and reloaded during a given request. Most useful
      * when running phpunit tests and needing to alter config.php between test cases
+     *
+     * @return void
      */
     public static function clearInternalState()
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Database.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Database.php
index 94c9b788f1..59b108f2e0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Database.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Database.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML;
 
+use PDO;
+use PDOException;
+
 /**
  * This file implements functions to read and write to a group of database servers.
  *
@@ -77,7 +80,7 @@ private function __construct($config)
     {
         $driverOptions = $config->getArray('database.driver_options', []);
         if ($config->getBoolean('database.persistent', true)) {
-            $driverOptions = [\PDO::ATTR_PERSISTENT => true];
+            $driverOptions = [PDO::ATTR_PERSISTENT => true];
         }
 
         // connect to the master
@@ -144,12 +147,12 @@ private static function generateInstanceId($config)
     private function connect($dsn, $username, $password, $options)
     {
         try {
-            $db = new \PDO($dsn, $username, $password, $options);
-            $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+            $db = new PDO($dsn, $username, $password, $options);
+            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
             return $db;
-        } catch (\PDOException $e) {
-            throw new \Exception("Database error: ".$e->getMessage());
+        } catch (PDOException $e) {
+            throw new \Exception("Database error: " . $e->getMessage());
         }
     }
 
@@ -180,7 +183,7 @@ private function getSlave()
      */
     public function applyPrefix($table)
     {
-        return $this->tablePrefix.$table;
+        return $this->tablePrefix . $table;
     }
 
 
@@ -192,7 +195,7 @@ public function applyPrefix($table)
      * @param array  $params Parameters
      *
      * @throws \Exception If an error happens while trying to execute the query.
-     * @return bool|\PDOStatement object
+     * @return \PDOStatement object
      */
     private function query($db, $stmt, $params)
     {
@@ -205,18 +208,18 @@ private function query($db, $stmt, $params)
 
             foreach ($params as $param => $value) {
                 if (is_array($value)) {
-                    $query->bindValue(":$param", $value[0], ($value[1]) ? $value[1] : \PDO::PARAM_STR);
+                    $query->bindValue(":$param", $value[0], ($value[1]) ? $value[1] : PDO::PARAM_STR);
                 } else {
-                    $query->bindValue(":$param", $value, \PDO::PARAM_STR);
+                    $query->bindValue(":$param", $value, PDO::PARAM_STR);
                 }
             }
 
             $query->execute();
 
             return $query;
-        } catch (\PDOException $e) {
+        } catch (PDOException $e) {
             $this->lastError = $db->errorInfo();
-            throw new \Exception("Database error: ".$e->getMessage());
+            throw new \Exception("Database error: " . $e->getMessage());
         }
     }
 
@@ -237,9 +240,9 @@ private function exec($db, $stmt)
 
         try {
             return $db->exec($stmt);
-        } catch (\PDOException $e) {
+        } catch (PDOException $e) {
             $this->lastError = $db->errorInfo();
-            throw new \Exception("Database error: ".$e->getMessage());
+            throw new \Exception("Database error: " . $e->getMessage());
         }
     }
 
@@ -250,7 +253,7 @@ private function exec($db, $stmt)
      * @param string $stmt Prepared SQL statement
      * @param array  $params Parameters
      *
-     * @return int The number of rows affected by the query.
+     * @return int|false The number of rows affected by the query or false on error.
      */
     public function write($stmt, $params = [])
     {
@@ -258,7 +261,7 @@ public function write($stmt, $params = [])
 
         if (is_array($params)) {
             $obj = $this->query($db, $stmt, $params);
-            return $obj->rowCount();
+            return ($obj === false) ? $obj : $obj->rowCount();
         } else {
             return $this->exec($db, $stmt);
         }
@@ -271,7 +274,7 @@ public function write($stmt, $params = [])
      * @param string $stmt Prepared SQL statement
      * @param array  $params Parameters
      *
-     * @return \PDOStatement|bool object
+     * @return \PDOStatement object
      */
     public function read($stmt, $params = [])
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Assertion.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Assertion.php
index c16f61164c..4a26240afa 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Assertion.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Assertion.php
@@ -30,7 +30,7 @@ public function __construct($assertion = null)
     {
         assert($assertion === null || is_string($assertion));
 
-        $msg = 'Assertion failed: '.var_export($assertion, true);
+        $msg = 'Assertion failed: ' . var_export($assertion, true);
         parent::__construct($msg);
 
         $this->assertion = $assertion;
@@ -53,13 +53,14 @@ public function getAssertion()
      *
      * This function will register this assertion handler. If will not enable assertions if they are
      * disabled.
+     * @return void
      */
     public static function installHandler()
     {
 
         assert_options(ASSERT_WARNING, 0);
         assert_options(ASSERT_QUIET_EVAL, 0);
-        assert_options(ASSERT_CALLBACK, ['\SimpleSAML\Error\Assertion', 'onAssertion']);
+        assert_options(ASSERT_CALLBACK, [Assertion::class, 'onAssertion']);
     }
 
 
@@ -71,6 +72,7 @@ public static function installHandler()
      * @param string $file  The file assert was called from.
      * @param int $line  The line assert was called from.
      * @param mixed $message  The expression which was passed to the assert-function.
+     * @return void
      */
     public static function onAssertion($file, $line, $message)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/AuthSource.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/AuthSource.php
index e075aa7bc4..3f53115eca 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/AuthSource.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/AuthSource.php
@@ -12,13 +12,15 @@
 class AuthSource extends Error
 {
     /**
-     * Authsource module name.
+     * Authsource module name
+     * @var string
      */
     private $authsource;
 
 
     /**
      * Reason why this request was invalid.
+     * @var string
      */
     private $reason;
 
@@ -28,6 +30,7 @@ class AuthSource extends Error
      *
      * @param string $authsource  Authsource module name from where this error was thrown.
      * @param string $reason  Description of the error.
+     * @param \Exception|null $cause
      */
     public function __construct($authsource, $reason, $cause = null)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/BadRequest.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/BadRequest.php
index 1deb08c0bf..418f184b4f 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/BadRequest.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/BadRequest.php
@@ -16,6 +16,7 @@ class BadRequest extends Error
 {
     /**
      * Reason why this request was invalid.
+     * @var string
      */
     private $reason;
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ConfigurationError.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ConfigurationError.php
index 128093dad5..044771574a 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ConfigurationError.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ConfigurationError.php
@@ -40,17 +40,17 @@ public function __construct($reason = null, $file = null, array $config = null)
         $params = ['CONFIG'];
         if ($file !== null) {
             $params['%FILE%'] = $file;
-            $basepath = dirname(dirname(dirname(dirname(__FILE__)))).'/';
-            $file_str = '('.str_replace($basepath, '', $file).') ';
+            $basepath = dirname(dirname(dirname(dirname(__FILE__)))) . '/';
+            $file_str = '(' . str_replace($basepath, '', $file) . ') ';
         }
         if ($reason !== null) {
             $params['%REASON%'] = $reason;
-            $reason_str = ': '.$reason;
+            $reason_str = ': ' . $reason;
         }
         $this->reason = $reason;
         $this->config_file = $file;
         parent::__construct($params);
-        $this->message = 'The configuration '.$file_str.'is invalid'.$reason_str;
+        $this->message = 'The configuration ' . $file_str . 'is invalid' . $reason_str;
     }
 
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/CriticalConfigurationError.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/CriticalConfigurationError.php
index d41367fbf0..f078ee6957 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/CriticalConfigurationError.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/CriticalConfigurationError.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Error;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
+
 /**
  * This exception represents a configuration error that we cannot recover from.
  *
@@ -30,7 +34,7 @@ class CriticalConfigurationError extends ConfigurationError
      */
     private static $minimum_config = [
         'logging.handler' => 'errorlog',
-        'logging.level'  => \SimpleSAML\Logger::DEBUG,
+        'logging.level'  => Logger::DEBUG,
         'errorreporting' => false,
         'debug'          => true,
     ];
@@ -47,10 +51,10 @@ public function __construct($reason = null, $file = null, $config = null)
     {
         if ($config === null) {
             $config = self::$minimum_config;
-            $config['baseurlpath'] = \SimpleSAML\Utils\HTTP::guessBasePath();
+            $config['baseurlpath'] = Utils\HTTP::guessBasePath();
         }
 
-        \SimpleSAML\Configuration::loadFromArray(
+        Configuration::loadFromArray(
             $config,
             '',
             'simplesaml'
@@ -60,7 +64,7 @@ public function __construct($reason = null, $file = null, $config = null)
 
 
     /**
-     * @param ConfigurationError $exception
+     * @param \Exception $exception
      *
      * @return CriticalConfigurationError
      */
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Error.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Error.php
index 615da09c01..1a83f95806 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Error.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Error.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\Error;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
+
 /**
  * Class that wraps SimpleSAMLphp errors in exceptions.
  *
@@ -91,15 +97,15 @@ public function __construct($errorCode, \Exception $cause = null, $httpCode = nu
         $this->dictDescr = ErrorCodes::getErrorCodeDescription($this->errorCode);
 
         if (!empty($this->parameters)) {
-            $msg = $this->errorCode.'(';
+            $msg = $this->errorCode . '(';
             foreach ($this->parameters as $k => $v) {
                 if ($k === 0) {
                     continue;
                 }
 
-                $msg .= var_export($k, true).' => '.var_export($v, true).', ';
+                $msg .= var_export($k, true) . ' => ' . var_export($v, true) . ', ';
             }
-            $msg = substr($msg, 0, -2).')';
+            $msg = substr($msg, 0, -2) . ')';
         } else {
             $msg = $this->errorCode;
         }
@@ -155,6 +161,7 @@ public function getDictDescr()
      * Set the HTTP return code for this error.
      *
      * This should be overridden by subclasses who want a different return code than 500 Internal Server Error.
+     * @return void
      */
     protected function setHTTPCode()
     {
@@ -174,10 +181,10 @@ protected function saveError()
         $etrace = implode("\n", $data);
 
         $reportId = bin2hex(openssl_random_pseudo_bytes(4));
-        \SimpleSAML\Logger::error('Error report with id '.$reportId.' generated.');
+        Logger::error('Error report with id ' . $reportId . ' generated.');
 
-        $config = \SimpleSAML\Configuration::getInstance();
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $config = Configuration::getInstance();
+        $session = Session::getSessionFromRequest();
 
         if (isset($_SERVER['HTTP_REFERER'])) {
             $referer = $_SERVER['HTTP_REFERER'];
@@ -194,7 +201,7 @@ protected function saveError()
             'exceptionTrace' => $etrace,
             'reportId'       => $reportId,
             'trackId'        => $session->getTrackID(),
-            'url'            => \SimpleSAML\Utils\HTTP::getSelfURLNoQuery(),
+            'url'            => Utils\HTTP::getSelfURLNoQuery(),
             'version'        => $config->getVersion(),
             'referer'        => $referer,
         ];
@@ -208,6 +215,7 @@ protected function saveError()
      * Display this error.
      *
      * This method displays a standard SimpleSAMLphp error page and exits.
+     * @return void
      */
     public function show()
     {
@@ -217,7 +225,7 @@ public function show()
         $this->logError();
 
         $errorData = $this->saveError();
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
 
         $data = [];
         $data['showerrors'] = $config->getBoolean('showerrors', true);
@@ -231,16 +239,17 @@ public function show()
         $data['clipboard.js'] = true;
 
         // check if there is a valid technical contact email address
-        if ($config->getBoolean('errorreporting', true) &&
-            $config->getString('technicalcontact_email', 'na@example.org') !== 'na@example.org'
+        if (
+            $config->getBoolean('errorreporting', true)
+            && $config->getString('technicalcontact_email', 'na@example.org') !== 'na@example.org'
         ) {
             // enable error reporting
-            $baseurl = \SimpleSAML\Utils\HTTP::getBaseURL();
-            $data['errorReportAddress'] = $baseurl.'errorreport.php';
+            $baseurl = Utils\HTTP::getBaseURL();
+            $data['errorReportAddress'] = $baseurl . 'errorreport.php';
         }
 
         $data['email'] = '';
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $authorities = $session->getAuthorities();
         foreach ($authorities as $authority) {
             $attributes = $session->getAuthData($authority, 'Attributes');
@@ -256,10 +265,11 @@ public function show()
             call_user_func($show_function, $config, $data);
             assert(false);
         } else {
-            $t = new \SimpleSAML\XHTML\Template($config, 'error.php', 'errors');
+            $t = new Template($config, 'error.php', 'errors');
+            $translator = $t->getTranslator();
             $t->data = array_merge($t->data, $data);
-            $t->data['dictTitleTranslated'] = $t->getTranslator()->t($t->data['dictTitle']);
-            $t->data['dictDescrTranslated'] = $t->getTranslator()->t($t->data['dictDescr'], $t->data['parameters']);
+            $t->data['dictTitleTranslated'] = $translator->t($t->data['dictTitle']);
+            $t->data['dictDescrTranslated'] = $translator->t($t->data['dictDescr'], $t->data['parameters']);
             $t->show();
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ErrorCodes.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ErrorCodes.php
index d15f8c46ff..75e7f1b856 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ErrorCodes.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/ErrorCodes.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Error;
 
+use SimpleSAML\Locale\Translate;
+
 /**
  * Class that maps SimpleSAMLphp error codes to translateable strings.
  *
@@ -19,39 +21,39 @@ class ErrorCodes
     final public static function defaultGetAllErrorCodeTitles()
     {
         return [
-            'ACSPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:title_ACSPARAMS}'),
-            'ARSPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:title_ARSPARAMS}'),
-            'AUTHSOURCEERROR' => \SimpleSAML\Locale\Translate::noop('{errors:title_AUTHSOURCEERROR}'),
-            'BADREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:title_BADREQUEST}'),
-            'CASERROR' => \SimpleSAML\Locale\Translate::noop('{errors:title_CASERROR}'),
-            'CONFIG' => \SimpleSAML\Locale\Translate::noop('{errors:title_CONFIG}'),
-            'CREATEREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:title_CREATEREQUEST}'),
-            'DISCOPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:title_DISCOPARAMS}'),
-            'GENERATEAUTHNRESPONSE' => \SimpleSAML\Locale\Translate::noop('{errors:title_GENERATEAUTHNRESPONSE}'),
-            'INVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{errors:title_INVALIDCERT}'),
-            'LDAPERROR' => \SimpleSAML\Locale\Translate::noop('{errors:title_LDAPERROR}'),
-            'LOGOUTINFOLOST' => \SimpleSAML\Locale\Translate::noop('{errors:title_LOGOUTINFOLOST}'),
-            'LOGOUTREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:title_LOGOUTREQUEST}'),
-            'MEMCACHEDOWN' => \SimpleSAML\Locale\Translate::noop('{errors:title_MEMCACHEDOWN}'),
-            'METADATA' => \SimpleSAML\Locale\Translate::noop('{errors:title_METADATA}'),
-            'METADATANOTFOUND' => \SimpleSAML\Locale\Translate::noop('{errors:title_METADATANOTFOUND}'),
-            'NOACCESS' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOACCESS}'),
-            'NOCERT' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOCERT}'),
-            'NORELAYSTATE' => \SimpleSAML\Locale\Translate::noop('{errors:title_NORELAYSTATE}'),
-            'NOSTATE' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOSTATE}'),
-            'NOTFOUND' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOTFOUND}'),
-            'NOTFOUNDREASON' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOTFOUNDREASON}'),
-            'NOTSET' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOTSET}'),
-            'NOTVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{errors:title_NOTVALIDCERT}'),
-            'PROCESSASSERTION' => \SimpleSAML\Locale\Translate::noop('{errors:title_PROCESSASSERTION}'),
-            'PROCESSAUTHNREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:title_PROCESSAUTHNREQUEST}'),
-            'RESPONSESTATUSNOSUCCESS' => \SimpleSAML\Locale\Translate::noop('{errors:title_RESPONSESTATUSNOSUCCESS}'),
-            'SLOSERVICEPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:title_SLOSERVICEPARAMS}'),
-            'SSOPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:title_SSOPARAMS}'),
-            'UNHANDLEDEXCEPTION' => \SimpleSAML\Locale\Translate::noop('{errors:title_UNHANDLEDEXCEPTION}'),
-            'UNKNOWNCERT' => \SimpleSAML\Locale\Translate::noop('{errors:title_UNKNOWNCERT}'),
-            'USERABORTED' => \SimpleSAML\Locale\Translate::noop('{errors:title_USERABORTED}'),
-            'WRONGUSERPASS' => \SimpleSAML\Locale\Translate::noop('{errors:title_WRONGUSERPASS}'),
+            'ACSPARAMS' => Translate::noop('{errors:title_ACSPARAMS}'),
+            'ARSPARAMS' => Translate::noop('{errors:title_ARSPARAMS}'),
+            'AUTHSOURCEERROR' => Translate::noop('{errors:title_AUTHSOURCEERROR}'),
+            'BADREQUEST' => Translate::noop('{errors:title_BADREQUEST}'),
+            'CASERROR' => Translate::noop('{errors:title_CASERROR}'),
+            'CONFIG' => Translate::noop('{errors:title_CONFIG}'),
+            'CREATEREQUEST' => Translate::noop('{errors:title_CREATEREQUEST}'),
+            'DISCOPARAMS' => Translate::noop('{errors:title_DISCOPARAMS}'),
+            'GENERATEAUTHNRESPONSE' => Translate::noop('{errors:title_GENERATEAUTHNRESPONSE}'),
+            'INVALIDCERT' => Translate::noop('{errors:title_INVALIDCERT}'),
+            'LDAPERROR' => Translate::noop('{errors:title_LDAPERROR}'),
+            'LOGOUTINFOLOST' => Translate::noop('{errors:title_LOGOUTINFOLOST}'),
+            'LOGOUTREQUEST' => Translate::noop('{errors:title_LOGOUTREQUEST}'),
+            'MEMCACHEDOWN' => Translate::noop('{errors:title_MEMCACHEDOWN}'),
+            'METADATA' => Translate::noop('{errors:title_METADATA}'),
+            'METADATANOTFOUND' => Translate::noop('{errors:title_METADATANOTFOUND}'),
+            'NOACCESS' => Translate::noop('{errors:title_NOACCESS}'),
+            'NOCERT' => Translate::noop('{errors:title_NOCERT}'),
+            'NORELAYSTATE' => Translate::noop('{errors:title_NORELAYSTATE}'),
+            'NOSTATE' => Translate::noop('{errors:title_NOSTATE}'),
+            'NOTFOUND' => Translate::noop('{errors:title_NOTFOUND}'),
+            'NOTFOUNDREASON' => Translate::noop('{errors:title_NOTFOUNDREASON}'),
+            'NOTSET' => Translate::noop('{errors:title_NOTSET}'),
+            'NOTVALIDCERT' => Translate::noop('{errors:title_NOTVALIDCERT}'),
+            'PROCESSASSERTION' => Translate::noop('{errors:title_PROCESSASSERTION}'),
+            'PROCESSAUTHNREQUEST' => Translate::noop('{errors:title_PROCESSAUTHNREQUEST}'),
+            'RESPONSESTATUSNOSUCCESS' => Translate::noop('{errors:title_RESPONSESTATUSNOSUCCESS}'),
+            'SLOSERVICEPARAMS' => Translate::noop('{errors:title_SLOSERVICEPARAMS}'),
+            'SSOPARAMS' => Translate::noop('{errors:title_SSOPARAMS}'),
+            'UNHANDLEDEXCEPTION' => Translate::noop('{errors:title_UNHANDLEDEXCEPTION}'),
+            'UNKNOWNCERT' => Translate::noop('{errors:title_UNKNOWNCERT}'),
+            'USERABORTED' => Translate::noop('{errors:title_USERABORTED}'),
+            'WRONGUSERPASS' => Translate::noop('{errors:title_WRONGUSERPASS}'),
         ];
     }
 
@@ -77,39 +79,39 @@ public static function getAllErrorCodeTitles()
     final public static function defaultGetAllErrorCodeDescriptions()
     {
         return [
-            'ACSPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_ACSPARAMS}'),
-            'ARSPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_ARSPARAMS}'),
-            'AUTHSOURCEERROR' => \SimpleSAML\Locale\Translate::noop('{errors:descr_AUTHSOURCEERROR}'),
-            'BADREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:descr_BADREQUEST}'),
-            'CASERROR' => \SimpleSAML\Locale\Translate::noop('{errors:descr_CASERROR}'),
-            'CONFIG' => \SimpleSAML\Locale\Translate::noop('{errors:descr_CONFIG}'),
-            'CREATEREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:descr_CREATEREQUEST}'),
-            'DISCOPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_DISCOPARAMS}'),
-            'GENERATEAUTHNRESPONSE' => \SimpleSAML\Locale\Translate::noop('{errors:descr_GENERATEAUTHNRESPONSE}'),
-            'INVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{errors:descr_INVALIDCERT}'),
-            'LDAPERROR' => \SimpleSAML\Locale\Translate::noop('{errors:descr_LDAPERROR}'),
-            'LOGOUTINFOLOST' => \SimpleSAML\Locale\Translate::noop('{errors:descr_LOGOUTINFOLOST}'),
-            'LOGOUTREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:descr_LOGOUTREQUEST}'),
-            'MEMCACHEDOWN' => \SimpleSAML\Locale\Translate::noop('{errors:descr_MEMCACHEDOWN}'),
-            'METADATA' => \SimpleSAML\Locale\Translate::noop('{errors:descr_METADATA}'),
-            'METADATANOTFOUND' => \SimpleSAML\Locale\Translate::noop('{errors:descr_METADATANOTFOUND}'),
-            'NOACCESS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOACCESS}'),
-            'NOCERT' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOCERT}'),
-            'NORELAYSTATE' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NORELAYSTATE}'),
-            'NOSTATE' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOSTATE}'),
-            'NOTFOUND' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOTFOUND}'),
-            'NOTFOUNDREASON' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOTFOUNDREASON}'),
-            'NOTSET' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOTSET}'),
-            'NOTVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{errors:descr_NOTVALIDCERT}'),
-            'PROCESSASSERTION' => \SimpleSAML\Locale\Translate::noop('{errors:descr_PROCESSASSERTION}'),
-            'PROCESSAUTHNREQUEST' => \SimpleSAML\Locale\Translate::noop('{errors:descr_PROCESSAUTHNREQUEST}'),
-            'RESPONSESTATUSNOSUCCESS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_RESPONSESTATUSNOSUCCESS}'),
-            'SLOSERVICEPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_SLOSERVICEPARAMS}'),
-            'SSOPARAMS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_SSOPARAMS}'),
-            'UNHANDLEDEXCEPTION' => \SimpleSAML\Locale\Translate::noop('{errors:descr_UNHANDLEDEXCEPTION}'),
-            'UNKNOWNCERT' => \SimpleSAML\Locale\Translate::noop('{errors:descr_UNKNOWNCERT}'),
-            'USERABORTED' => \SimpleSAML\Locale\Translate::noop('{errors:descr_USERABORTED}'),
-            'WRONGUSERPASS' => \SimpleSAML\Locale\Translate::noop('{errors:descr_WRONGUSERPASS}'),
+            'ACSPARAMS' => Translate::noop('{errors:descr_ACSPARAMS}'),
+            'ARSPARAMS' => Translate::noop('{errors:descr_ARSPARAMS}'),
+            'AUTHSOURCEERROR' => Translate::noop('{errors:descr_AUTHSOURCEERROR}'),
+            'BADREQUEST' => Translate::noop('{errors:descr_BADREQUEST}'),
+            'CASERROR' => Translate::noop('{errors:descr_CASERROR}'),
+            'CONFIG' => Translate::noop('{errors:descr_CONFIG}'),
+            'CREATEREQUEST' => Translate::noop('{errors:descr_CREATEREQUEST}'),
+            'DISCOPARAMS' => Translate::noop('{errors:descr_DISCOPARAMS}'),
+            'GENERATEAUTHNRESPONSE' => Translate::noop('{errors:descr_GENERATEAUTHNRESPONSE}'),
+            'INVALIDCERT' => Translate::noop('{errors:descr_INVALIDCERT}'),
+            'LDAPERROR' => Translate::noop('{errors:descr_LDAPERROR}'),
+            'LOGOUTINFOLOST' => Translate::noop('{errors:descr_LOGOUTINFOLOST}'),
+            'LOGOUTREQUEST' => Translate::noop('{errors:descr_LOGOUTREQUEST}'),
+            'MEMCACHEDOWN' => Translate::noop('{errors:descr_MEMCACHEDOWN}'),
+            'METADATA' => Translate::noop('{errors:descr_METADATA}'),
+            'METADATANOTFOUND' => Translate::noop('{errors:descr_METADATANOTFOUND}'),
+            'NOACCESS' => Translate::noop('{errors:descr_NOACCESS}'),
+            'NOCERT' => Translate::noop('{errors:descr_NOCERT}'),
+            'NORELAYSTATE' => Translate::noop('{errors:descr_NORELAYSTATE}'),
+            'NOSTATE' => Translate::noop('{errors:descr_NOSTATE}'),
+            'NOTFOUND' => Translate::noop('{errors:descr_NOTFOUND}'),
+            'NOTFOUNDREASON' => Translate::noop('{errors:descr_NOTFOUNDREASON}'),
+            'NOTSET' => Translate::noop('{errors:descr_NOTSET}'),
+            'NOTVALIDCERT' => Translate::noop('{errors:descr_NOTVALIDCERT}'),
+            'PROCESSASSERTION' => Translate::noop('{errors:descr_PROCESSASSERTION}'),
+            'PROCESSAUTHNREQUEST' => Translate::noop('{errors:descr_PROCESSAUTHNREQUEST}'),
+            'RESPONSESTATUSNOSUCCESS' => Translate::noop('{errors:descr_RESPONSESTATUSNOSUCCESS}'),
+            'SLOSERVICEPARAMS' => Translate::noop('{errors:descr_SLOSERVICEPARAMS}'),
+            'SSOPARAMS' => Translate::noop('{errors:descr_SSOPARAMS}'),
+            'UNHANDLEDEXCEPTION' => Translate::noop('{errors:descr_UNHANDLEDEXCEPTION}'),
+            'UNKNOWNCERT' => Translate::noop('{errors:descr_UNKNOWNCERT}'),
+            'USERABORTED' => Translate::noop('{errors:descr_USERABORTED}'),
+            'WRONGUSERPASS' => Translate::noop('{errors:descr_WRONGUSERPASS}'),
         ];
     }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Exception.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Exception.php
index 5ab59f4821..4133e513c4 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Exception.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/Exception.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Error;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+
 /**
  * Base class for SimpleSAMLphp Exceptions
  *
@@ -21,15 +24,15 @@ class Exception extends \Exception
      *
      * @var array
      */
-    private $backtrace;
+    private $backtrace = [];
 
 
     /**
      * The cause of this exception.
      *
-     * @var Exception
+     * @var Exception|null
      */
-    private $cause;
+    private $cause = null;
 
 
     /**
@@ -77,30 +80,31 @@ public static function fromException(\Exception $e)
      * Load the backtrace from the given exception.
      *
      * @param \Exception $exception The exception we should fetch the backtrace from.
+     * @return void
      */
     protected function initBacktrace(\Exception $exception)
     {
         $this->backtrace = [];
 
         // position in the top function on the stack
-        $pos = $exception->getFile().':'.$exception->getLine();
+        $pos = $exception->getFile() . ':' . $exception->getLine();
 
         foreach ($exception->getTrace() as $t) {
             $function = $t['function'];
             if (array_key_exists('class', $t)) {
-                $function = $t['class'].'::'.$function;
+                $function = $t['class'] . '::' . $function;
             }
 
-            $this->backtrace[] = $pos.' ('.$function.')';
+            $this->backtrace[] = $pos . ' (' . $function . ')';
 
             if (array_key_exists('file', $t)) {
-                $pos = $t['file'].':'.$t['line'];
+                $pos = $t['file'] . ':' . $t['line'];
             } else {
                 $pos = '[builtin]';
             }
         }
 
-        $this->backtrace[] = $pos.' (N/A)';
+        $this->backtrace[] = $pos . ' (N/A)';
     }
 
 
@@ -149,7 +153,7 @@ public function getClass()
     public function format($anonymize = false)
     {
         $ret = [
-            $this->getClass().': '.$this->getMessage(),
+            $this->getClass() . ': ' . $this->getMessage(),
         ];
         return array_merge($ret, $this->formatBacktrace($anonymize));
     }
@@ -167,12 +171,12 @@ public function format($anonymize = false)
     public function formatBacktrace($anonymize = false)
     {
         $ret = [];
-        $basedir = \SimpleSAML\Configuration::getInstance()->getBaseDir();
+        $basedir = Configuration::getInstance()->getBaseDir();
 
         $e = $this;
         do {
             if ($e !== $this) {
-                $ret[] = 'Caused by: '.$e->getClass().': '.$e->getMessage();
+                $ret[] = 'Caused by: ' . $e->getClass() . ': ' . $e->getMessage();
             }
             $ret[] = 'Backtrace:';
 
@@ -182,7 +186,7 @@ public function formatBacktrace($anonymize = false)
                     $trace = str_replace($basedir, '', $trace);
                 }
 
-                $ret[] = ($depth - $i - 1).' '.$trace;
+                $ret[] = ($depth - $i - 1) . ' ' . $trace;
             }
             $e = $e->cause;
         } while ($e !== null);
@@ -193,29 +197,25 @@ public function formatBacktrace($anonymize = false)
 
     /**
      * Print the backtrace to the log if the 'debug' option is enabled in the configuration.
+     * @param int $level
+     * @return void
      */
-    protected function logBacktrace($level = \SimpleSAML\Logger::DEBUG)
+    protected function logBacktrace($level = Logger::DEBUG)
     {
-        // see if debugging is enabled for backtraces
-        $debug = \SimpleSAML\Configuration::getInstance()->getArrayize('debug', ['backtraces' => false]);
-
-        if (!(in_array('backtraces', $debug, true) // implicitly enabled
-            || (array_key_exists('backtraces', $debug) && $debug['backtraces'] === true)
-            // explicitly set
-            // TODO: deprecate the old style and remove it in 2.0
-            || (array_key_exists(0, $debug) && $debug[0] === true) // old style 'debug' configuration option
-        )) {
+        // Do nothing if backtraces have been disabled in config.
+        $debug = Configuration::getInstance()->getArrayize('debug', ['backtraces' => true]);
+        if (array_key_exists('backtraces', $debug) && $debug['backtraces'] === false) {
             return;
         }
 
         $backtrace = $this->formatBacktrace();
 
-        $callback = ['\SimpleSAML\Logger'];
+        $callback = [Logger::class];
         $functions = [
-            \SimpleSAML\Logger::ERR     => 'error',
-            \SimpleSAML\Logger::WARNING => 'warning',
-            \SimpleSAML\Logger::INFO    => 'info',
-            \SimpleSAML\Logger::DEBUG   => 'debug',
+            Logger::ERR     => 'error',
+            Logger::WARNING => 'warning',
+            Logger::INFO    => 'info',
+            Logger::DEBUG   => 'debug',
         ];
         $callback[] = $functions[$level];
 
@@ -231,14 +231,15 @@ protected function logBacktrace($level = \SimpleSAML\Logger::DEBUG)
      * Override to allow errors extending this class to specify the log level themselves.
      *
      * @param int $default_level The log level to use if this method was not overridden.
+     * @return void
      */
     public function log($default_level)
     {
         $fn = [
-            \SimpleSAML\Logger::ERR     => 'logError',
-            \SimpleSAML\Logger::WARNING => 'logWarning',
-            \SimpleSAML\Logger::INFO    => 'logInfo',
-            \SimpleSAML\Logger::DEBUG   => 'logDebug',
+            Logger::ERR     => 'logError',
+            Logger::WARNING => 'logWarning',
+            Logger::INFO    => 'logInfo',
+            Logger::DEBUG   => 'logDebug',
         ];
         call_user_func([$this, $fn[$default_level]], $default_level);
     }
@@ -248,11 +249,12 @@ public function log($default_level)
      * Print the exception to the log with log level error.
      *
      * This function will write this exception to the log, including a full backtrace.
+     * @return void
      */
     public function logError()
     {
-        \SimpleSAML\Logger::error($this->getClass().': '.$this->getMessage());
-        $this->logBacktrace(\SimpleSAML\Logger::ERR);
+        Logger::error($this->getClass() . ': ' . $this->getMessage());
+        $this->logBacktrace(Logger::ERR);
     }
 
 
@@ -260,11 +262,12 @@ public function logError()
      * Print the exception to the log with log level warning.
      *
      * This function will write this exception to the log, including a full backtrace.
+     * @return void
      */
     public function logWarning()
     {
-        \SimpleSAML\Logger::warning($this->getClass().': '.$this->getMessage());
-        $this->logBacktrace(\SimpleSAML\Logger::WARNING);
+        Logger::warning($this->getClass() . ': ' . $this->getMessage());
+        $this->logBacktrace(Logger::WARNING);
     }
 
 
@@ -272,11 +275,12 @@ public function logWarning()
      * Print the exception to the log with log level info.
      *
      * This function will write this exception to the log, including a full backtrace.
+     * @return void
      */
     public function logInfo()
     {
-        \SimpleSAML\Logger::info($this->getClass().': '.$this->getMessage());
-        $this->logBacktrace(\SimpleSAML\Logger::INFO);
+        Logger::info($this->getClass() . ': ' . $this->getMessage());
+        $this->logBacktrace(Logger::INFO);
     }
 
 
@@ -284,11 +288,12 @@ public function logInfo()
      * Print the exception to the log with log level debug.
      *
      * This function will write this exception to the log, including a full backtrace.
+     * @return void
      */
     public function logDebug()
     {
-        \SimpleSAML\Logger::debug($this->getClass().': '.$this->getMessage());
-        $this->logBacktrace(\SimpleSAML\Logger::DEBUG);
+        Logger::debug($this->getClass() . ': ' . $this->getMessage());
+        $this->logBacktrace(Logger::DEBUG);
     }
 
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/NotFound.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/NotFound.php
index 0e61852696..ed556a38cf 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/NotFound.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/NotFound.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Error;
 
+use SimpleSAML\Utils;
+
 /**
  * Exception which will show a 404 Not Found error page.
  *
@@ -29,14 +31,14 @@ public function __construct($reason = null)
     {
         assert($reason === null || is_string($reason));
 
-        $url = \SimpleSAML\Utils\HTTP::getSelfURL();
+        $url = Utils\HTTP::getSelfURL();
 
         if ($reason === null) {
             parent::__construct(['NOTFOUND', '%URL%' => $url]);
             $this->message = "The requested page '$url' could not be found.";
         } else {
             parent::__construct(['NOTFOUNDREASON', '%URL%' => $url, '%REASON%' => $reason]);
-            $this->message = "The requested page '$url' could not be found. ".$reason;
+            $this->message = "The requested page '$url' could not be found. " . $reason;
         }
 
         $this->reason = $reason;
@@ -66,7 +68,7 @@ public function getReason()
     public function format($anonymize = false)
     {
         return [
-            $this->getClass().': '.$this->getMessage(),
+            $this->getClass() . ': ' . $this->getMessage(),
         ];
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/UnserializableException.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/UnserializableException.php
index 54f4eb34fe..6ac5b39fff 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/UnserializableException.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Error/UnserializableException.php
@@ -37,7 +37,7 @@ public function __construct(\Exception $original)
         $msg = $original->getMessage();
         $code = $original->getCode();
 
-        if (!is_int($code)) {
+        if ($original instanceof \PDOException) {
             // PDOException uses a string as the code. Filter it out here.
             $code = -1;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/Router.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/Router.php
index e537092a9e..48d0155e0d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/Router.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/Router.php
@@ -3,8 +3,8 @@
 namespace SimpleSAML\HTTP;
 
 use SimpleSAML\Configuration;
+use SimpleSAML\Module\ControllerResolver;
 use SimpleSAML\Session;
-
 use Symfony\Component\EventDispatcher\EventDispatcher;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
@@ -20,29 +20,29 @@
  */
 class Router
 {
-
+    /** @var \Symfony\Component\HttpKernel\Controller\ArgumentResolver */
     protected $arguments;
 
-    /** @var \SimpleSAML\Configuration */
-    protected $config;
+    /** @var \SimpleSAML\Configuration|null */
+    protected $config = null;
 
-    /** @var RequestContext */
+    /** @var \Symfony\Component\Routing\RequestContext */
     protected $context;
 
-    /** @var EventDispatcher */
+    /** @var \Symfony\Component\EventDispatcher\EventDispatcher */
     protected $dispatcher;
 
-    /** @var Request */
-    protected $request;
+    /** @var \Symfony\Component\HttpFoundation\Request|null */
+    protected $request = null;
 
     /** @var \SimpleSAML\Module\ControllerResolver */
     protected $resolver;
 
-    /** @var \SimpleSAML\Session */
-    protected $session;
+    /** @var \SimpleSAML\Session|null */
+    protected $session = null;
 
-    /** @var RequestStack */
-    protected $stack;
+    /** @var \Symfony\Component\HttpFoundation\RequestStack|null */
+    protected $stack = null;
 
 
     /**
@@ -54,7 +54,7 @@ public function __construct($module)
     {
         $this->arguments = new ArgumentResolver();
         $this->context = new RequestContext();
-        $this->resolver = new \SimpleSAML\Module\ControllerResolver($module);
+        $this->resolver = new ControllerResolver($module);
         $this->dispatcher = new EventDispatcher();
     }
 
@@ -64,9 +64,10 @@ public function __construct($module)
      *
      * If no specific arguments are given, the default instances will be used (configuration, session, etc).
      *
-     * @param Request|null $request The request to process. Defaults to the current one.
+     * @param \Symfony\Component\HttpFoundation\Request|null $request
+     *     The request to process. Defaults to the current one.
      *
-     * @return Response A response suitable for the given request.
+     * @return \Symfony\Component\HttpFoundation\Response A response suitable for the given request.
      *
      * @throws \Exception If an error occurs.
      */
@@ -78,10 +79,13 @@ public function process(Request $request = null)
         if ($this->session === null) {
             $this->setSession(Session::getSessionFromRequest());
         }
-        $this->request = $request;
+
         if ($request === null) {
             $this->request = Request::createFromGlobals();
+        } else {
+            $this->request = $request;
         }
+
         $stack = new RequestStack();
         $stack->push($this->request);
         $this->context->fromRequest($this->request);
@@ -93,10 +97,14 @@ public function process(Request $request = null)
     /**
      * Send a given response to the browser.
      *
-     * @param Response $response The response to send.
+     * @param \Symfony\Component\HttpFoundation\Response $response The response to send.
+     * @return void
      */
     public function send(Response $response)
     {
+        if ($this->request === null) {
+            throw new \Exception("No request found to respond to");
+        }
         $response->prepare($this->request);
         $response->send();
     }
@@ -106,6 +114,7 @@ public function send(Response $response)
      * Set the configuration to use by the controller.
      *
      * @param \SimpleSAML\Configuration $config
+     * @return void
      */
     public function setConfiguration(Configuration $config)
     {
@@ -118,6 +127,7 @@ public function setConfiguration(Configuration $config)
      * Set the session to use by the controller.
      *
      * @param \SimpleSAML\Session $session
+     * @return void
      */
     public function setSession(Session $session)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/RunnableResponse.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/RunnableResponse.php
index ab9fc6c5f1..e019bd15d5 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/RunnableResponse.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/HTTP/RunnableResponse.php
@@ -31,6 +31,7 @@ public function __construct(callable $callable, $args = [])
     {
         $this->arguments = $args;
         $this->callable = $callable;
+        $this->charset = 'UTF-8';
         parent::__construct();
     }
 
@@ -60,9 +61,9 @@ public function getArguments()
     /**
      * "Send" this response by actually running the callable.
      *
-     * @return mixed
+     * @return self
      */
-    public function send()
+    public function sendContent()
     {
         return call_user_func_array($this->callable, $this->arguments);
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP.php
index 8c7f219926..e11926a78f 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP.php
@@ -3,8 +3,11 @@
 namespace SimpleSAML;
 
 use SAML2\Constants as SAML2;
-
-use SimpleSAML\Error\Exception;
+use SimpleSAML\Auth;
+use SimpleSAML\Error;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Module\saml\Error\NoPassive;
+use SimpleSAML\Utils;
 
 /**
  * IdP class.
@@ -59,53 +62,50 @@ class IdP
      *
      * @param string $id The identifier of this IdP.
      *
-     * @throws Exception If the IdP is disabled or no such auth source was found.
+     * @throws \SimpleSAML\Error\Exception If the IdP is disabled or no such auth source was found.
      */
     private function __construct($id)
     {
         assert(is_string($id));
 
         $this->id = $id;
+        $this->associationGroup = $id;
 
-        $metadata = Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $globalConfig = Configuration::getInstance();
 
         if (substr($id, 0, 6) === 'saml2:') {
             if (!$globalConfig->getBoolean('enable.saml20-idp', false)) {
-                throw new Exception('enable.saml20-idp disabled in config.php.');
+                throw new Error\Exception('enable.saml20-idp disabled in config.php.');
             }
             $this->config = $metadata->getMetaDataConfig(substr($id, 6), 'saml20-idp-hosted');
         } elseif (substr($id, 0, 6) === 'saml1:') {
             if (!$globalConfig->getBoolean('enable.shib13-idp', false)) {
-                throw new Exception('enable.shib13-idp disabled in config.php.');
+                throw new Error\Exception('enable.shib13-idp disabled in config.php.');
             }
             $this->config = $metadata->getMetaDataConfig(substr($id, 6), 'shib13-idp-hosted');
         } elseif (substr($id, 0, 5) === 'adfs:') {
             if (!$globalConfig->getBoolean('enable.adfs-idp', false)) {
-                throw new Exception('enable.adfs-idp disabled in config.php.');
+                throw new Error\Exception('enable.adfs-idp disabled in config.php.');
             }
             $this->config = $metadata->getMetaDataConfig(substr($id, 5), 'adfs-idp-hosted');
 
             try {
                 // this makes the ADFS IdP use the same SP associations as the SAML 2.0 IdP
                 $saml2EntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
-                $this->associationGroup = 'saml2:'.$saml2EntityId;
+                $this->associationGroup = 'saml2:' . $saml2EntityId;
             } catch (\Exception $e) {
                 // probably no SAML 2 IdP configured for this host. Ignore the error
             }
         } else {
-            assert(false);
-        }
-
-        if ($this->associationGroup === null) {
-            $this->associationGroup = $this->id;
+            throw new \Exception("Protocol not implemented.");
         }
 
         $auth = $this->config->getString('auth');
         if (Auth\Source::getById($auth) !== null) {
             $this->authSource = new Auth\Simple($auth);
         } else {
-            throw new Exception('No such "'.$auth.'" auth source found.');
+            throw new Error\Exception('No such "' . $auth . '" auth source found.');
         }
     }
 
@@ -181,7 +181,7 @@ public function getSPName($assocId)
 
         $prefix = substr($assocId, 0, 4);
         $spEntityId = substr($assocId, strlen($prefix) + 1);
-        $metadata = Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
 
         if ($prefix === 'saml') {
             try {
@@ -215,6 +215,7 @@ public function getSPName($assocId)
      * Add an SP association.
      *
      * @param array $association The SP association.
+     * @return void
      */
     public function addAssociation(array $association)
     {
@@ -244,6 +245,7 @@ public function getAssociations()
      * Remove an SP association.
      *
      * @param string $assocId The association id.
+     * @return void
      */
     public function terminateAssociation($assocId)
     {
@@ -269,16 +271,17 @@ public function isAuthenticated()
      * Called after authproc has run.
      *
      * @param array $state The authentication request state array.
+     * @return void
      */
     public static function postAuthProc(array $state)
     {
         assert(is_callable($state['Responder']));
 
         if (isset($state['core:SP'])) {
-            $session = \SimpleSAML\Session::getSessionFromRequest();
+            $session = Session::getSessionFromRequest();
             $session->setData(
                 'core:idp-ssotime',
-                $state['core:IdP'].';'.$state['core:SP'],
+                $state['core:IdP'] . ';' . $state['core:SP'],
                 time(),
                 Session::DATA_TIMEOUT_SESSION_END
             );
@@ -294,14 +297,15 @@ public static function postAuthProc(array $state)
      *
      * @param array $state The authentication request state array.
      *
-     * @throws Exception If we are not authenticated.
+     * @throws \SimpleSAML\Error\Exception If we are not authenticated.
+     * @return void
      */
     public static function postAuth(array $state)
     {
         $idp = IdP::getByState($state);
 
         if (!$idp->isAuthenticated()) {
-            throw new Exception('Not authenticated.');
+            throw new Error\Exception('Not authenticated.');
         }
 
         $state['Attributes'] = $idp->authSource->getAttributes();
@@ -314,7 +318,7 @@ public static function postAuth(array $state)
 
         if (isset($state['core:SP'])) {
             $session = Session::getSessionFromRequest();
-            $previousSSOTime = $session->getData('core:idp-ssotime', $state['core:IdP'].';'.$state['core:SP']);
+            $previousSSOTime = $session->getData('core:idp-ssotime', $state['core:IdP'] . ';' . $state['core:SP']);
             if ($previousSSOTime !== null) {
                 $state['PreviousSSOTimestamp'] = $previousSSOTime;
             }
@@ -341,12 +345,13 @@ public static function postAuth(array $state)
      *
      * @param array &$state The authentication request state.
      *
-     * @throws Module\saml\Error\NoPassive If we were asked to do passive authentication.
+     * @throws \SimpleSAML\Module\saml\Error\NoPassive If we were asked to do passive authentication.
+     * @return void
      */
     private function authenticate(array &$state)
     {
         if (isset($state['isPassive']) && (bool) $state['isPassive']) {
-            throw new Module\saml\Error\NoPassive(SAML2::STATUS_RESPONDER, 'Passive authentication not supported.');
+            throw new NoPassive(SAML2::STATUS_RESPONDER, 'Passive authentication not supported.');
         }
 
         $this->authSource->login($state);
@@ -363,15 +368,12 @@ private function authenticate(array &$state)
      *
      * @param array &$state The authentication request state.
      *
-     * @throws Exception If there is no auth source defined for this IdP.
+     * @throws \Exception If there is no auth source defined for this IdP.
+     * @return void
      */
     private function reauthenticate(array &$state)
     {
         $sourceImpl = $this->authSource->getAuthSource();
-        if ($sourceImpl === null) {
-            throw new Exception('No such auth source defined.');
-        }
-
         $sourceImpl->reauthenticate($state);
     }
 
@@ -380,6 +382,7 @@ private function reauthenticate(array &$state)
      * Process authentication requests.
      *
      * @param array &$state The authentication request state.
+     * @return void
      */
     public function handleAuthenticationRequest(array &$state)
     {
@@ -415,8 +418,8 @@ public function handleAuthenticationRequest(array &$state)
                 $this->reauthenticate($state);
             }
             $this->postAuth($state);
-        } catch (Exception $e) {
-            \SimpleSAML\Auth\State::throwException($state, $e);
+        } catch (Error\Exception $e) {
+            Auth\State::throwException($state, $e);
         } catch (\Exception $e) {
             $e = new Error\UnserializableException($e);
             Auth\State::throwException($state, $e);
@@ -428,8 +431,7 @@ public function handleAuthenticationRequest(array &$state)
      * Find the logout handler of this IdP.
      *
      * @return IdP\LogoutHandlerInterface The logout handler class.
-     *
-     * @throws Exception If we cannot find a logout handler.
+     * @throws \Exception If we cannot find a logout handler.
      */
     public function getLogoutHandler()
     {
@@ -443,9 +445,10 @@ public function getLogoutHandler()
                 $handler = '\SimpleSAML\IdP\IFrameLogoutHandler';
                 break;
             default:
-                throw new Exception('Unknown logout handler: '.var_export($logouttype, true));
+                throw new Error\Exception('Unknown logout handler: ' . var_export($logouttype, true));
         }
 
+        /** @var IdP\LogoutHandlerInterface */
         return new $handler($this);
     }
 
@@ -456,6 +459,7 @@ public function getLogoutHandler()
      * This function will never return.
      *
      * @param array &$state The logout request state.
+     * @return void
      */
     public function finishLogout(array &$state)
     {
@@ -475,6 +479,7 @@ public function finishLogout(array &$state)
      * @param array       &$state The logout request state.
      * @param string|null $assocId The association we received the logout request from, or null if there was no
      * association.
+     * @return void
      */
     public function handleLogoutRequest(array &$state, $assocId)
     {
@@ -487,7 +492,7 @@ public function handleLogoutRequest(array &$state, $assocId)
         if ($assocId !== null) {
             $this->terminateAssociation($assocId);
             $session = Session::getSessionFromRequest();
-            $session->deleteData('core:idp-ssotime', $this->id.';'.$state['saml:SPEntityId']);
+            $session->deleteData('core:idp-ssotime', $this->id . ';' . $state['saml:SPEntityId']);
         }
 
         // terminate the local session
@@ -496,8 +501,10 @@ public function handleLogoutRequest(array &$state, $assocId)
 
         $this->authSource->logout($returnTo);
 
-        $handler = $this->getLogoutHandler();
-        $handler->startLogout($state, $assocId);
+        if ($assocId !== null) {
+            $handler = $this->getLogoutHandler();
+            $handler->startLogout($state, $assocId);
+        }
         assert(false);
     }
 
@@ -509,15 +516,19 @@ public function handleLogoutRequest(array &$state, $assocId)
      *
      * @param string                 $assocId The association that is terminated.
      * @param string|null            $relayState The RelayState from the start of the logout.
-     * @param Exception|null $error  The error that occurred during session termination (if any).
+     * @param \SimpleSAML\Error\Exception|null $error  The error that occurred during session termination (if any).
+     * @return void
      */
-    public function handleLogoutResponse($assocId, $relayState, Exception $error = null)
+    public function handleLogoutResponse($assocId, $relayState, Error\Exception $error = null)
     {
         assert(is_string($assocId));
         assert(is_string($relayState) || $relayState === null);
 
+        $index = strpos($assocId, ':');
+        assert(is_int($index));
+
         $session = Session::getSessionFromRequest();
-        $session->deleteData('core:idp-ssotime', $this->id.';'.substr($assocId, strpos($assocId, ':') + 1));
+        $session->deleteData('core:idp-ssotime', $this->id . ';' . substr($assocId, $index + 1));
 
         $handler = $this->getLogoutHandler();
         $handler->onResponse($assocId, $relayState, $error);
@@ -532,6 +543,7 @@ public function handleLogoutResponse($assocId, $relayState, Exception $error = n
      * This function never returns.
      *
      * @param string $url The URL the user should be returned to after logout.
+     * @return void
      */
     public function doLogoutRedirect($url)
     {
@@ -554,6 +566,7 @@ public function doLogoutRedirect($url)
      *
      * @param IdP      $idp Deprecated. Will be removed.
      * @param array    &$state The logout state from doLogoutRedirect().
+     * @return void
      */
     public static function finishLogoutRedirect(IdP $idp, array $state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/IFrameLogoutHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/IFrameLogoutHandler.php
index df84a413b5..2597fdbabf 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/IFrameLogoutHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/IFrameLogoutHandler.php
@@ -2,9 +2,12 @@
 
 namespace SimpleSAML\IdP;
 
+use SimpleSAML\Auth;
 use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\IdP;
 use SimpleSAML\Module;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Utils;
 use SimpleSAML\XHTML\Template;
 
 /**
@@ -27,7 +30,7 @@ class IFrameLogoutHandler implements LogoutHandlerInterface
      *
      * @param \SimpleSAML\IdP $idp The IdP to log out from.
      */
-    public function __construct(\SimpleSAML\IdP $idp)
+    public function __construct(IdP $idp)
     {
         $this->idp = $idp;
     }
@@ -37,6 +40,7 @@ public function __construct(\SimpleSAML\IdP $idp)
      *
      * @param array &$state The logout state.
      * @param string|null $assocId The SP we are logging out from.
+     * @return void
      */
     public function startLogout(array &$state, $assocId)
     {
@@ -49,7 +53,7 @@ public function startLogout(array &$state, $assocId)
         }
 
         foreach ($associations as $id => &$association) {
-            $idp = \SimpleSAML\IdP::getByState($association);
+            $idp = IdP::getByState($association);
             $association['core:Logout-IFrame:Name'] = $idp->getSPName($id);
             $association['core:Logout-IFrame:State'] = 'onhold';
         }
@@ -67,14 +71,14 @@ public function startLogout(array &$state, $assocId)
         }
 
         $params = [
-            'id' => \SimpleSAML\Auth\State::saveState($state, 'core:Logout-IFrame'),
+            'id' => Auth\State::saveState($state, 'core:Logout-IFrame'),
         ];
         if (isset($state['core:Logout-IFrame:InitType'])) {
             $params['type'] = $state['core:Logout-IFrame:InitType'];
         }
 
         $url = Module::getModuleURL('core/idp/logout-iframe.php', $params);
-        HTTP::redirectTrustedURL($url);
+        Utils\HTTP::redirectTrustedURL($url);
     }
 
 
@@ -86,8 +90,9 @@ public function startLogout(array &$state, $assocId)
      * @param string $assocId The association that is terminated.
      * @param string|null $relayState The RelayState from the start of the logout.
      * @param \SimpleSAML\Error\Exception|null $error The error that occurred during session termination (if any).
+     * @return void
      */
-    public function onResponse($assocId, $relayState, \SimpleSAML\Error\Exception $error = null)
+    public function onResponse($assocId, $relayState, Error\Exception $error = null)
     {
         assert(is_string($assocId));
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/LogoutHandlerInterface.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/LogoutHandlerInterface.php
index 773bda6947..fe52c00415 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/LogoutHandlerInterface.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/LogoutHandlerInterface.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\IdP;
 
+use SimpleSAML\Error;
+use SimpleSAML\IdP;
+
 /**
  * Interface that all logout handlers must implement.
  *
@@ -15,7 +18,7 @@ interface LogoutHandlerInterface
      *
      * @param \SimpleSAML\IdP $idp The IdP we are logging out from.
      */
-    public function __construct(\SimpleSAML\IdP $idp);
+    public function __construct(IdP $idp);
 
 
     /**
@@ -24,7 +27,8 @@ public function __construct(\SimpleSAML\IdP $idp);
      * This function must never return.
      *
      * @param array &$state The logout state.
-     * @param string|null $assocId The association that started the logout.
+     * @param string $assocId The association that started the logout.
+     * @return void
      */
     public function startLogout(array &$state, $assocId);
 
@@ -37,6 +41,7 @@ public function startLogout(array &$state, $assocId);
      * @param string $assocId The association that is terminated.
      * @param string|null $relayState The RelayState from the start of the logout.
      * @param \SimpleSAML\Error\Exception|null $error The error that occurred during session termination (if any).
+     * @return void
      */
-    public function onResponse($assocId, $relayState, \SimpleSAML\Error\Exception $error = null);
+    public function onResponse($assocId, $relayState, Error\Exception $error = null);
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/TraditionalLogoutHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/TraditionalLogoutHandler.php
index 32652b5617..9c18499364 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/TraditionalLogoutHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/IdP/TraditionalLogoutHandler.php
@@ -2,8 +2,11 @@
 
 namespace SimpleSAML\IdP;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Error;
+use SimpleSAML\IdP;
 use SimpleSAML\Logger;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Utils;
 
 /**
  * Class that handles traditional logout.
@@ -26,7 +29,7 @@ class TraditionalLogoutHandler implements LogoutHandlerInterface
      *
      * @param \SimpleSAML\IdP $idp The IdP to log out from.
      */
-    public function __construct(\SimpleSAML\IdP $idp)
+    public function __construct(IdP $idp)
     {
         $this->idp = $idp;
     }
@@ -38,6 +41,7 @@ public function __construct(\SimpleSAML\IdP $idp)
      * This function never returns.
      *
      * @param array &$state The logout state.
+     * @return void
      */
     private function logoutNextSP(array &$state)
     {
@@ -46,17 +50,17 @@ private function logoutNextSP(array &$state)
             $this->idp->finishLogout($state);
         }
 
-        $relayState = \SimpleSAML\Auth\State::saveState($state, 'core:LogoutTraditional', true);
+        $relayState = Auth\State::saveState($state, 'core:LogoutTraditional', true);
 
         $id = $association['id'];
-        Logger::info('Logging out of '.var_export($id, true).'.');
+        Logger::info('Logging out of ' . var_export($id, true) . '.');
 
         try {
-            $idp = \SimpleSAML\IdP::getByState($association);
+            $idp = IdP::getByState($association);
             $url = call_user_func([$association['Handler'], 'getLogoutURL'], $idp, $association, $relayState);
-            HTTP::redirectTrustedURL($url);
+            Utils\HTTP::redirectTrustedURL($url);
         } catch (\Exception $e) {
-            Logger::warning('Unable to initialize logout to '.var_export($id, true).'.');
+            Logger::warning('Unable to initialize logout to ' . var_export($id, true) . '.');
             $this->idp->terminateAssociation($id);
             $state['core:Failed'] = true;
 
@@ -74,6 +78,7 @@ private function logoutNextSP(array &$state)
      *
      * @param array  &$state The logout state.
      * @param string $assocId The association that started the logout.
+     * @return void
      */
     public function startLogout(array &$state, $assocId)
     {
@@ -91,25 +96,26 @@ public function startLogout(array &$state, $assocId)
      * @param string $assocId The association that is terminated.
      * @param string|null $relayState The RelayState from the start of the logout.
      * @param \SimpleSAML\Error\Exception|null $error The error that occurred during session termination (if any).
+     * @return void
      *
      * @throws \SimpleSAML\Error\Exception If the RelayState was lost during logout.
      */
-    public function onResponse($assocId, $relayState, \SimpleSAML\Error\Exception $error = null)
+    public function onResponse($assocId, $relayState, Error\Exception $error = null)
     {
         assert(is_string($assocId));
         assert(is_string($relayState) || $relayState === null);
 
         if ($relayState === null) {
-            throw new \SimpleSAML\Error\Exception('RelayState lost during logout.');
+            throw new Error\Exception('RelayState lost during logout.');
         }
 
-        $state = \SimpleSAML\Auth\State::loadState($relayState, 'core:LogoutTraditional');
+        $state = Auth\State::loadState($relayState, 'core:LogoutTraditional');
 
         if ($error === null) {
-            Logger::info('Logged out of '.var_export($assocId, true).'.');
+            Logger::info('Logged out of ' . var_export($assocId, true) . '.');
             $this->idp->terminateAssociation($assocId);
         } else {
-            Logger::warning('Error received from '.var_export($assocId, true).' during logout:');
+            Logger::warning('Error received from ' . var_export($assocId, true) . ' during logout:');
             $error->logWarning();
             $state['core:Failed'] = true;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Language.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Language.php
index 858dad86ce..7dd64dc07e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Language.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Language.php
@@ -10,7 +10,9 @@
 
 namespace SimpleSAML\Locale;
 
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
 
 class Language
 {
@@ -77,7 +79,7 @@ class Language
      *
      * @var array
      */
-    private $language_names = [
+    public static $language_names = [
         'no'    => 'Bokmål', // Norwegian Bokmål
         'nn'    => 'Nynorsk', // Norwegian Nynorsk
         'se'    => 'Sámegiella', // Northern Sami
@@ -138,7 +140,7 @@ class Language
      *
      * @param \SimpleSAML\Configuration $configuration Configuration object
      */
-    public function __construct(\SimpleSAML\Configuration $configuration)
+    public function __construct(Configuration $configuration)
     {
         $this->configuration = $configuration;
         $this->availableLanguages = $this->getInstalledLanguages();
@@ -158,17 +160,17 @@ public function __construct(\SimpleSAML\Configuration $configuration)
     /**
      * Filter configured (available) languages against installed languages.
      *
-     * @return array The set of languages both in 'language.available' and $this->language_names.
+     * @return array The set of languages both in 'language.available' and self::$language_names.
      */
     private function getInstalledLanguages()
     {
         $configuredAvailableLanguages = $this->configuration->getArray('language.available', ['en']);
         $availableLanguages = [];
         foreach ($configuredAvailableLanguages as $code) {
-            if (array_key_exists($code, $this->language_names) && isset($this->language_names[$code])) {
+            if (array_key_exists($code, self::$language_names) && isset(self::$language_names[$code])) {
                 $availableLanguages[] = $code;
             } else {
-                \SimpleSAML\Logger::error("Language \"$code\" not installed. Check config.");
+                Logger::error("Language \"$code\" not installed. Check config.");
             }
         }
         return $availableLanguages;
@@ -196,6 +198,7 @@ public function getPosixLanguage($language)
      *
      * @param string  $language Language code for the language to set.
      * @param boolean $setLanguageCookie Whether to set the language cookie or not. Defaults to true.
+     * @return void
      */
     public function setLanguage($language, $setLanguageCookie = true)
     {
@@ -255,14 +258,14 @@ public function getLanguage()
      *
      * @param string $code The ISO 639-2 code of the language.
      *
-     * @return string The localized name of the language.
+     * @return string|null The localized name of the language.
      */
     public function getLanguageLocalizedName($code)
     {
-        if (array_key_exists($code, $this->language_names) && isset($this->language_names[$code])) {
-            return $this->language_names[$code];
+        if (array_key_exists($code, self::$language_names) && isset(self::$language_names[$code])) {
+            return self::$language_names[$code];
         }
-        \SimpleSAML\Logger::error("Name for language \"$code\" not found. Check config.");
+        Logger::error("Name for language \"$code\" not found. Check config.");
         return null;
     }
 
@@ -281,12 +284,12 @@ public function getLanguageParameterName()
     /**
      * This method returns the preferred language for the user based on the Accept-Language HTTP header.
      *
-     * @return string The preferred language based on the Accept-Language HTTP header, or null if none of the languages
-     * in the header is available.
+     * @return string|null The preferred language based on the Accept-Language HTTP header,
+     * or null if none of the languages in the header is available.
      */
     private function getHTTPLanguage()
     {
-        $languageScore = HTTP::getAcceptLanguage();
+        $languageScore = Utils\HTTP::getAcceptLanguage();
 
         // for now we only use the default language map. We may use a configurable language map in the future
         $languageMap = self::$defaultLanguageMap;
@@ -334,7 +337,8 @@ public function getDefaultLanguage()
     /**
      * Return an alias for a language code, if any.
      *
-     * @return string The alias, or null if the alias was not found.
+     * @param string $langcode
+     * @return string|null The alias, or null if the alias was not found.
      */
     public function getLanguageCodeAlias($langcode)
     {
@@ -379,7 +383,7 @@ public function isLanguageRTL()
      */
     public static function getLanguageCookie()
     {
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
         $availableLanguages = $config->getArray('language.available', ['en']);
         $name = $config->getString('language.cookie.name', 'language');
 
@@ -399,13 +403,14 @@ public static function getLanguageCookie()
      * specified is not in the list of available languages, or the headers have already been sent to the browser.
      *
      * @param string $language The language set by the user.
+     * @return void
      */
     public static function setLanguageCookie($language)
     {
         assert(is_string($language));
 
         $language = strtolower($language);
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
         $availableLanguages = $config->getArray('language.available', ['en']);
 
         if (!in_array($language, $availableLanguages, true) || headers_sent()) {
@@ -422,6 +427,6 @@ public static function setLanguageCookie($language)
             'samesite' => ($config->getString('language.cookie.samesite', null)),
         ];
 
-        HTTP::setCookie($name, $language, $params, false);
+        Utils\HTTP::setCookie($name, $language, $params, false);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Localization.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Localization.php
index 822a71f96f..7e73ca7805 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Localization.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Localization.php
@@ -11,6 +11,8 @@
 
 use Gettext\Translations;
 use Gettext\Translator;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
 
 class Localization
 {
@@ -90,13 +92,19 @@ class Localization
      *
      * @param \SimpleSAML\Configuration $configuration Configuration object
      */
-    public function __construct(\SimpleSAML\Configuration $configuration)
+    public function __construct(Configuration $configuration)
     {
         $this->configuration = $configuration;
-        $this->localeDir = $this->configuration->resolvePath('locales');
+        /** @var string $locales */
+        $locales =  $this->configuration->resolvePath('locales');
+        $this->localeDir = $locales;
         $this->language = new Language($configuration);
         $this->langcode = $this->language->getPosixLanguage($this->language->getLanguage());
-        $this->i18nBackend = ($this->configuration->getBoolean('usenewui', false) ? self::GETTEXT_I18N_BACKEND : self::SSP_I18N_BACKEND);
+        $this->i18nBackend = (
+            $this->configuration->getBoolean('usenewui', false)
+            ? self::GETTEXT_I18N_BACKEND
+            : self::SSP_I18N_BACKEND
+        );
         $this->setupL10N();
     }
 
@@ -121,7 +129,9 @@ public function getLocaleDir()
      */
     public function getDomainLocaleDir($domain)
     {
-        $localeDir = $this->configuration->resolvePath('modules').'/'.$domain.'/locales';
+        /** @var string $base */
+        $base = $this->configuration->resolvePath('modules');
+        $localeDir = $base . '/' . $domain . '/locales';
         return $localeDir;
     }
 
@@ -132,6 +142,7 @@ public function getDomainLocaleDir($domain)
      *
      * @param string $module Module name
      * @param string $localeDir Absolute path if the module is housed elsewhere
+     * @return void
      */
     public function addModuleDomain($module, $localeDir = null)
     {
@@ -148,19 +159,20 @@ public function addModuleDomain($module, $localeDir = null)
      *
      * @param string $localeDir Location of translations
      * @param string $domain Domain at location
+     * @return void
      */
     public function addDomain($localeDir, $domain)
     {
         $this->localeDomainMap[$domain] = $localeDir;
-        \SimpleSAML\Logger::debug("Localization: load domain '$domain' at '$localeDir'");
+        Logger::debug("Localization: load domain '$domain' at '$localeDir'");
         $this->loadGettextGettextFromPO($domain);
     }
 
-    /*
+    /**
      * Get and check path of localization file
      *
      * @param string $domain Name of localization domain
-     * @throws Exception If the path does not exist even for the default, fallback language
+     * @throws \Exception If the path does not exist even for the default, fallback language
      *
      * @return string
      */
@@ -169,8 +181,8 @@ public function getLangPath($domain = self::DEFAULT_DOMAIN)
         $langcode = explode('_', $this->langcode);
         $langcode = $langcode[0];
         $localeDir = $this->localeDomainMap[$domain];
-        $langPath = $localeDir.'/'.$langcode.'/LC_MESSAGES/';
-        \SimpleSAML\Logger::debug("Trying langpath for '$langcode' as '$langPath'");
+        $langPath = $localeDir . '/' . $langcode . '/LC_MESSAGES/';
+        Logger::debug("Trying langpath for '$langcode' as '$langPath'");
         if (is_dir($langPath) && is_readable($langPath)) {
             return $langPath;
         }
@@ -178,8 +190,8 @@ public function getLangPath($domain = self::DEFAULT_DOMAIN)
         // Some langcodes have aliases..
         $alias = $this->language->getLanguageCodeAlias($langcode);
         if (isset($alias)) {
-            $langPath = $localeDir.'/'.$alias.'/LC_MESSAGES/';
-            \SimpleSAML\Logger::debug("Trying langpath for alternative '$alias' as '$langPath'");
+            $langPath = $localeDir . '/' . $alias . '/LC_MESSAGES/';
+            Logger::debug("Trying langpath for alternative '$alias' as '$langPath'");
             if (is_dir($langPath) && is_readable($langPath)) {
                 return $langPath;
             }
@@ -187,24 +199,25 @@ public function getLangPath($domain = self::DEFAULT_DOMAIN)
 
         // Language not found, fall back to default
         $defLangcode = $this->language->getDefaultLanguage();
-        $langPath = $localeDir.'/'.$defLangcode.'/LC_MESSAGES/';
+        $langPath = $localeDir . '/' . $defLangcode . '/LC_MESSAGES/';
         if (is_dir($langPath) && is_readable($langPath)) {
             // Report that the localization for the preferred language is missing
-            $error = "Localization not found for langcode '$langcode' at '$langPath', falling back to langcode '".
-                $defLangcode."'";
-            \SimpleSAML\Logger::error($_SERVER['PHP_SELF'].' - '.$error);
+            $error = "Localization not found for langcode '$langcode' at '$langPath', falling back to langcode '" .
+                $defLangcode . "'";
+            Logger::error($_SERVER['PHP_SELF'] . ' - ' . $error);
             return $langPath;
         }
 
         // Locale for default language missing even, error out
         $error = "Localization directory missing/broken for langcode '$langcode' and domain '$domain'";
-        \SimpleSAML\Logger::critical($_SERVER['PHP_SELF'].' - '.$error);
+        Logger::critical($_SERVER['PHP_SELF'] . ' - ' . $error);
         throw new \Exception($error);
     }
 
 
     /**
      * Setup the translator
+     * @return void
      */
     private function setupTranslator()
     {
@@ -221,6 +234,7 @@ private function setupTranslator()
      *
      * @param string $domain Name of domain
      * @param boolean $catchException Whether to catch an exception on error or return early
+     * @return void
      *
      * @throws \Exception If something is wrong with the locale file for the domain and activated language
      */
@@ -230,7 +244,7 @@ private function loadGettextGettextFromPO($domain = self::DEFAULT_DOMAIN, $catch
             $langPath = $this->getLangPath($domain);
         } catch (\Exception $e) {
             $error = "Something went wrong when trying to get path to language file, cannot load domain '$domain'.";
-            \SimpleSAML\Logger::error($_SERVER['PHP_SELF'].' - '.$error);
+            Logger::debug($_SERVER['PHP_SELF'] . ' - ' . $error);
             if ($catchException) {
                 // bail out!
                 return;
@@ -238,14 +252,14 @@ private function loadGettextGettextFromPO($domain = self::DEFAULT_DOMAIN, $catch
                 throw $e;
             }
         }
-        $poFile = $domain.'.po';
-        $poPath = $langPath.$poFile;
+        $poFile = $domain . '.po';
+        $poPath = $langPath . $poFile;
         if (file_exists($poPath) && is_readable($poPath)) {
             $translations = Translations::fromPoFile($poPath);
             $this->translator->loadTranslations($translations);
         } else {
             $error = "Localization file '$poFile' not found in '$langPath', falling back to default";
-            \SimpleSAML\Logger::error($_SERVER['PHP_SELF'].' - '.$error);
+            Logger::debug($_SERVER['PHP_SELF'] . ' - ' . $error);
         }
     }
 
@@ -268,11 +282,12 @@ public function isI18NBackendDefault()
 
     /**
      * Set up L18N if configured or fallback to old system
+     * @return void
      */
     private function setupL10N()
     {
         if ($this->i18nBackend === self::SSP_I18N_BACKEND) {
-            \SimpleSAML\Logger::debug("Localization: using old system");
+            Logger::debug("Localization: using old system");
             return;
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Translate.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Translate.php
index 54b56e1a9a..0d0475edfe 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Translate.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Locale/Translate.php
@@ -10,6 +10,11 @@
 
 namespace SimpleSAML\Locale;
 
+use Gettext\BaseTranslator;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+
 class Translate
 {
     /**
@@ -53,7 +58,7 @@ class Translate
      * @param \SimpleSAML\Configuration $configuration Configuration object
      * @param string|null               $defaultDictionary The default dictionary where tags will come from.
      */
-    public function __construct(\SimpleSAML\Configuration $configuration, $defaultDictionary = null)
+    public function __construct(Configuration $configuration, $defaultDictionary = null)
     {
         $this->configuration = $configuration;
         $this->language = new Language($configuration);
@@ -62,9 +67,9 @@ public function __construct(\SimpleSAML\Configuration $configuration, $defaultDi
             // TODO: drop this entire if clause for 2.0
             // for backwards compatibility - print warning
             $backtrace = debug_backtrace();
-            $where = $backtrace[0]['file'].':'.$backtrace[0]['line'];
-            \SimpleSAML\Logger::warning(
-                'Deprecated use of new SimpleSAML\Locale\Translate(...) at '.$where.
+            $where = $backtrace[0]['file'] . ':' . $backtrace[0]['line'];
+            Logger::warning(
+                'Deprecated use of new SimpleSAML\Locale\Translate(...) at ' . $where .
                 '. The last parameter is now a dictionary name, which should not end in ".php".'
             );
 
@@ -101,13 +106,13 @@ private function getDictionary($name)
             if ($sepPos !== false) {
                 $module = substr($name, 0, $sepPos);
                 $fileName = substr($name, $sepPos + 1);
-                $dictDir = \SimpleSAML\Module::getModuleDir($module).'/dictionaries/';
+                $dictDir = Module::getModuleDir($module) . '/dictionaries/';
             } else {
-                $dictDir = $this->configuration->getPathValue('dictionarydir', 'dictionaries/');
+                $dictDir = $this->configuration->getPathValue('dictionarydir', 'dictionaries/') ?: 'dictionaries/';
                 $fileName = $name;
             }
 
-            $this->dictionaries[$name] = $this->readDictionaryFile($dictDir.$fileName);
+            $this->dictionaries[$name] = $this->readDictionaryFile($dictDir . $fileName);
         }
 
         return $this->dictionaries[$name];
@@ -214,8 +219,8 @@ public function getAttributeTranslation($name)
 
         // search the default attribute dictionary
         $dict = $this->getDictionary('attributes');
-        if (array_key_exists('attribute_'.$normName, $dict)) {
-            return $this->getPreferredTranslation($dict['attribute_'.$normName]);
+        if (array_key_exists('attribute_' . $normName, $dict)) {
+            return $this->getPreferredTranslation($dict['attribute_' . $normName]);
         }
 
         // no translations found
@@ -252,9 +257,11 @@ public static function noop($tag)
      * @param array        $replacements An associative array of keys that should be replaced with values in the
      *     translated string.
      * @param boolean      $fallbackdefault Default translation to use as a fallback if no valid translation was found.
+     * @param array $oldreplacements
+     * @param bool $striptags
      * @deprecated Not used in twig, gettext
      *
-     * @return string  The translated tag, or a placeholder value if the tag wasn't found.
+     * @return string|null  The translated tag, or a placeholder value if the tag wasn't found.
      */
     public function t(
         $tag,
@@ -267,11 +274,11 @@ public function t(
         $striptags = false
     ) {
         $backtrace = debug_backtrace();
-        $where = $backtrace[0]['file'].':'.$backtrace[0]['line'];
+        $where = $backtrace[0]['file'] . ':' . $backtrace[0]['line'];
         if (!$fallbackdefault) {
-            \SimpleSAML\Logger::warning(
-                'Deprecated use of new SimpleSAML\Locale\Translate::t(...) at '.$where.
-                '. This parameter will go away, the fallback will become'.
+            Logger::warning(
+                'Deprecated use of new SimpleSAML\Locale\Translate::t(...) at ' . $where .
+                '. This parameter will go away, the fallback will become' .
                 ' identical to the $tag in 2.0.'
             );
         }
@@ -279,14 +286,15 @@ public function t(
             // TODO: remove this entire if for 2.0
 
             // old style call to t(...). Print warning to log
-            \SimpleSAML\Logger::warning(
-                'Deprecated use of SimpleSAML\Locale\Translate::t(...) at '.$where.
+            Logger::warning(
+                'Deprecated use of SimpleSAML\Locale\Translate::t(...) at ' . $where .
                 '. Please update the code to use the new style of parameters.'
             );
 
             // for backwards compatibility
-            if (!$replacements && $this->getTag($tag) === null) {
-                \SimpleSAML\Logger::warning(
+            /** @psalm-suppress PossiblyInvalidArgument */
+            if (!$replacements && ($this->getTag($tag) === null)) {
+                Logger::warning(
                     'Code which uses $fallbackdefault === FALSE should be updated to use the getTag() method instead.'
                 );
                 return null;
@@ -297,15 +305,15 @@ public function t(
 
         if (is_array($tag)) {
             $tagData = $tag;
-            \SimpleSAML\Logger::warning(
-                'Deprecated use of new SimpleSAML\Locale\Translate::t(...) at '.$where.
+            Logger::warning(
+                'Deprecated use of new SimpleSAML\Locale\Translate::t(...) at ' . $where .
                 '. The $tag-parameter can only be a string in 2.0.'
             );
         } else {
             $tagData = $this->getTag($tag);
             if ($tagData === null) {
                 // tag not found
-                \SimpleSAML\Logger::info('Translate: Looking up ['.$tag.']: not translated at all.');
+                Logger::info('Translate: Looking up [' . $tag . ']: not translated at all.');
                 return $this->getStringNotTranslated($tag, $fallbackdefault);
             }
         }
@@ -334,7 +342,7 @@ public function t(
     private function getStringNotTranslated($tag, $fallbacktag)
     {
         if ($fallbacktag) {
-            return 'not translated ('.$tag.')';
+            return 'not translated (' . $tag . ')';
         } else {
             return $tag;
         }
@@ -349,16 +357,19 @@ private function getStringNotTranslated($tag, $fallbacktag)
      * @param array|string $translation The translation array
      *
      * @throws \Exception If $translation is neither a string nor an array.
+     * @return void
      */
     public function includeInlineTranslation($tag, $translation)
     {
         if (is_string($translation)) {
             $translation = ['en' => $translation];
         } elseif (!is_array($translation)) {
-            throw new \Exception("Inline translation should be string or array. Is ".gettype($translation)." now!");
+            throw new \Exception(
+                "Inline translation should be string or array. Is " . gettype($translation) . " now!"
+            );
         }
 
-        \SimpleSAML\Logger::debug('Translate: Adding inline language translation for tag ['.$tag.']');
+        Logger::debug('Translate: Adding inline language translation for tag [' . $tag . ']');
         $this->langtext[$tag] = $translation;
     }
 
@@ -370,6 +381,7 @@ public function includeInlineTranslation($tag, $translation)
      * one provided in the constructor to be used to find the directory of the dictionary. This allows to combine
      * dictionaries inside the SimpleSAMLphp main code distribution together with external dictionaries. Defaults to
      * null.
+     * @return void
      */
     public function includeLanguageFile($file, $otherConfig = null)
     {
@@ -378,9 +390,10 @@ public function includeLanguageFile($file, $otherConfig = null)
         } else {
             $filebase = $this->configuration->getPathValue('dictionarydir', 'dictionaries/');
         }
+        $filebase = $filebase ?: 'dictionaries/';
 
-        $lang = $this->readDictionaryFile($filebase.$file);
-        \SimpleSAML\Logger::debug('Translate: Merging language array. Loading ['.$file.']');
+        $lang = $this->readDictionaryFile($filebase . $file);
+        Logger::debug('Translate: Merging language array. Loading [' . $file . ']');
         $this->langtext = array_merge($this->langtext, $lang);
     }
 
@@ -393,18 +406,18 @@ public function includeLanguageFile($file, $otherConfig = null)
      */
     private function readDictionaryJSON($filename)
     {
-        $definitionFile = $filename.'.definition.json';
+        $definitionFile = $filename . '.definition.json';
         assert(file_exists($definitionFile));
 
         $fileContent = file_get_contents($definitionFile);
         $lang = json_decode($fileContent, true);
 
         if (empty($lang)) {
-            \SimpleSAML\Logger::error('Invalid dictionary definition file ['.$definitionFile.']');
+            Logger::error('Invalid dictionary definition file [' . $definitionFile . ']');
             return [];
         }
 
-        $translationFile = $filename.'.translation.json';
+        $translationFile = $filename . '.translation.json';
         if (file_exists($translationFile)) {
             $fileContent = file_get_contents($translationFile);
             $moreTrans = json_decode($fileContent, true);
@@ -425,7 +438,7 @@ private function readDictionaryJSON($filename)
      */
     private function readDictionaryPHP($filename)
     {
-        $phpFile = $filename.'.php';
+        $phpFile = $filename . '.php';
         assert(file_exists($phpFile));
 
         $lang = null;
@@ -448,20 +461,20 @@ private function readDictionaryFile($filename)
     {
         assert(is_string($filename));
 
-        \SimpleSAML\Logger::debug('Translate: Reading dictionary ['.$filename.']');
+        Logger::debug('Translate: Reading dictionary [' . $filename . ']');
 
-        $jsonFile = $filename.'.definition.json';
+        $jsonFile = $filename . '.definition.json';
         if (file_exists($jsonFile)) {
             return $this->readDictionaryJSON($filename);
         }
 
-        $phpFile = $filename.'.php';
+        $phpFile = $filename . '.php';
         if (file_exists($phpFile)) {
             return $this->readDictionaryPHP($filename);
         }
 
-        \SimpleSAML\Logger::error(
-            $_SERVER['PHP_SELF'].' - Translate: Could not find dictionary file at ['.$filename.']'
+        Logger::error(
+            $_SERVER['PHP_SELF'] . ' - Translate: Could not find dictionary file at [' . $filename . ']'
         );
         return [];
     }
@@ -475,7 +488,7 @@ private function readDictionaryFile($filename)
      */
     public static function translateSingularGettext($original)
     {
-        $text = \Gettext\BaseTranslator::$current->gettext($original);
+        $text = BaseTranslator::$current->gettext($original);
 
         if (func_num_args() === 1) {
             return $text;
@@ -497,7 +510,7 @@ public static function translateSingularGettext($original)
      */
     public static function translatePluralGettext($original, $plural, $value)
     {
-        $text = \Gettext\BaseTranslator::$current->ngettext($original, $plural, $value);
+        $text = BaseTranslator::$current->ngettext($original, $plural, $value);
 
         if (func_num_args() === 3) {
             return $text;
@@ -511,17 +524,17 @@ public static function translatePluralGettext($original, $plural, $value)
     /**
      * Pick a translation from a given array of translations for the current language.
      *
-     * @param array $context An array of options. The current language must be specified as an ISO 639 code accessible
-     * with the key "currentLanguage" in the array.
-     * @param array $translations An array of translations. Each translation has an ISO 639 code as its key, identifying
-     * the language it corresponds to.
+     * @param array|null $context An array of options. The current language must be specified
+     *     as an ISO 639 code accessible with the key "currentLanguage" in the array.
+     * @param array|null $translations An array of translations. Each translation has an
+     *     ISO 639 code as its key, identifying the language it corresponds to.
      *
      * @return null|string The translation appropriate for the current language, or null if none found. If the
      * $context or $translations arrays are null, or $context['currentLanguage'] is not defined, null is also returned.
      */
     public static function translateFromArray($context, $translations)
     {
-        if (!is_array($translations) || $translations === null) {
+        if (!is_array($translations)) {
             return null;
         }
 
@@ -534,12 +547,9 @@ public static function translateFromArray($context, $translations)
         }
 
         // we don't have a translation for the current language, load alternative priorities
-        $sspcfg = \SimpleSAML\Configuration::getInstance();
-        $langcfg = $sspcfg->getConfigItem('language', null);
-        $priorities = [];
-        if ($langcfg instanceof \SimpleSAML\Configuration) {
-            $priorities = $langcfg->getArray('priorities', []);
-        }
+        $sspcfg = Configuration::getInstance();
+        $langcfg = $sspcfg->getConfigItem('language');
+        $priorities = $langcfg->getArray('priorities', []);
 
         if (!empty($priorities[$context['currentLanguage']])) {
             foreach ($priorities[$context['currentLanguage']] as $lang) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger.php
index ace36e1a18..69d38ca699 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML;
 
+use SimpleSAML\Logger\ErrorLogLoggingHandler;
+
 /**
  * The main logger class for SimpleSAMLphp.
  *
@@ -13,9 +15,14 @@
 class Logger
 {
     /**
-     * @var \SimpleSAML\Logger\LoggingHandlerInterface|false|null
+     * @var \SimpleSAML\Logger\LoggingHandlerInterface
+     */
+    private static $loggingHandler;
+
+    /**
+     * @var bool
      */
-    private static $loggingHandler = null;
+    private static $initializing = false;
 
     /**
      * @var integer|null
@@ -61,12 +68,16 @@ class Logger
     /**
      * This constant defines the string we set the track ID to while we are fetching the track ID from the session
      * class. This is used to prevent infinite recursion.
+     *
+     * @var string
      */
     const NO_TRACKID = '_NOTRACKIDYET_';
 
     /**
      * This variable holds the track ID we have retrieved from the session class. It can also be NULL, in which case
      * we haven't fetched the track ID yet, or self::NO_TRACKID, which means that we are fetching the track ID now.
+     *
+     * @var string
      */
     private static $trackid = self::NO_TRACKID;
 
@@ -114,20 +125,36 @@ class Logger
      */
     private static $shuttingDown = false;
 
+    /** @var int */
     const EMERG = 0;
+
+    /** @var int */
     const ALERT = 1;
+
+    /** @var int */
     const CRIT = 2;
+
+    /** @var int */
     const ERR = 3;
+
+    /** @var int */
     const WARNING = 4;
+
+    /** @var int */
     const NOTICE = 5;
+
+    /** @var int */
     const INFO = 6;
+
+    /** @var int */
     const DEBUG = 7;
 
 
     /**
      * Log an emergency message.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function emergency($string)
     {
@@ -138,7 +165,8 @@ public static function emergency($string)
     /**
      * Log a critical message.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function critical($string)
     {
@@ -149,7 +177,8 @@ public static function critical($string)
     /**
      * Log an alert.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function alert($string)
     {
@@ -160,7 +189,8 @@ public static function alert($string)
     /**
      * Log an error.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function error($string)
     {
@@ -171,7 +201,8 @@ public static function error($string)
     /**
      * Log a warning.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function warning($string)
     {
@@ -182,7 +213,8 @@ public static function warning($string)
     /**
      * We reserve the notice level for statistics, so do not use this level for other kind of log messages.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function notice($string)
     {
@@ -193,7 +225,8 @@ public static function notice($string)
     /**
      * Info messages are a bit less verbose than debug messages. This is useful to trace a session.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function info($string)
     {
@@ -205,7 +238,8 @@ public static function info($string)
      * Debug messages are very verbose, and will contain more information than what is necessary for a production
      * system.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function debug($string)
     {
@@ -216,7 +250,8 @@ public static function debug($string)
     /**
      * Statistics.
      *
-     * @var string $string The message to log.
+     * @param string $string The message to log.
+     * @return void
      */
     public static function stats($string)
     {
@@ -227,7 +262,8 @@ public static function stats($string)
     /**
      * Set the logger to capture logs.
      *
-     * @var boolean $val Whether to capture logs or not. Defaults to TRUE.
+     * @param boolean $val Whether to capture logs or not. Defaults to TRUE.
+     * @return void
      */
     public static function setCaptureLog($val = true)
     {
@@ -237,6 +273,7 @@ public static function setCaptureLog($val = true)
 
     /**
      * Get the captured log.
+     * @return array
      */
     public static function getCapturedLog()
     {
@@ -247,7 +284,8 @@ public static function getCapturedLog()
     /**
      * Set the track identifier to use in all logs.
      *
-     * @param $trackId string The track identifier to use during this session.
+     * @param string $trackId The track identifier to use during this session.
+     * @return void
      */
     public static function setTrackId($trackId)
     {
@@ -276,6 +314,7 @@ public static function flush()
      * This method is intended to be registered as a shutdown handler, so that any pending messages that weren't sent
      * to the logging handler at that point, can still make it. It is therefore not intended to be called manually.
      *
+     * @return void
      */
     public static function shutdown()
     {
@@ -284,7 +323,6 @@ public static function shutdown()
                 $s = Session::getSessionFromRequest();
             } catch (\Exception $e) {
                 // loading session failed. We don't care why, at this point we have a transient session, so we use that
-                self::error('Cannot load or create session: '.$e->getMessage());
                 $s = Session::getSessionFromRequest();
             }
             self::$trackid = $s->getTrackID();
@@ -313,6 +351,7 @@ public static function isErrorMasked($errno)
      * Every call to this function must be followed by a call to popErrorMask().
      *
      * @param int $mask The log levels that should be masked.
+     * @return void
      */
     public static function maskErrors($mask)
     {
@@ -331,6 +370,8 @@ public static function maskErrors($mask)
      * Pop an error mask.
      *
      * This function restores the previous error mask.
+     *
+     * @return void
      */
     public static function popErrorMask()
     {
@@ -346,6 +387,7 @@ public static function popErrorMask()
      * @param int     $level The log level corresponding to this message.
      * @param string  $message The message itself to log.
      * @param boolean $stats Whether this is a stats message or a regular one.
+     * @return void
      */
     private static function defer($level, $message, $stats)
     {
@@ -360,16 +402,21 @@ private static function defer($level, $message, $stats)
     }
 
 
+    /**
+     * @param string|null $handler
+     * @return void
+     * @throws \Exception
+     */
     private static function createLoggingHandler($handler = null)
     {
-        // set to false to indicate that it is being initialized
-        self::$loggingHandler = false;
+        self::$initializing = true;
 
         // a set of known logging handlers
         $known_handlers = [
             'syslog'   => 'SimpleSAML\Logger\SyslogLoggingHandler',
             'file'     => 'SimpleSAML\Logger\FileLoggingHandler',
             'errorlog' => 'SimpleSAML\Logger\ErrorLogLoggingHandler',
+            'stderr' => 'SimpleSAML\Logger\StandardErrorLoggingHandler',
         ];
 
         // get the configuration
@@ -392,44 +439,58 @@ private static function createLoggingHandler($handler = null)
             $handler = strtolower($handler);
             if (!array_key_exists($handler, $known_handlers)) {
                 throw new \Exception(
-                    "Invalid value for the 'logging.handler' configuration option. Unknown handler '".$handler."''."
+                    "Invalid value for the 'logging.handler' configuration option. Unknown handler '" . $handler . "'."
                 );
             }
             $handler = $known_handlers[$handler];
         }
-        self::$loggingHandler = new $handler($config);
 
         self::$format = $config->getString('logging.format', self::$format);
-        self::$loggingHandler->setLogFormat(self::$format);
+
+        try {
+            /** @var \SimpleSAML\Logger\LoggingHandlerInterface */
+            self::$loggingHandler = new $handler($config);
+            self::$loggingHandler->setLogFormat(self::$format);
+            self::$initializing = false;
+        } catch (\Exception $e) {
+            self::$loggingHandler = new ErrorLogLoggingHandler($config);
+            self::$initializing = false;
+            self::log(self::CRIT, $e->getMessage(), false);
+        }
     }
 
 
+    /**
+     * @param int $level
+     * @param string $string
+     * @param bool $statsLog
+     * @return void
+     */
     private static function log($level, $string, $statsLog = false)
     {
-        if (self::$loggingHandler === false) {
+        if (self::$initializing) {
             // some error occurred while initializing logging
             self::defer($level, $string, $statsLog);
             return;
         } elseif (php_sapi_name() === 'cli' || defined('STDIN')) {
             // we are being executed from the CLI, nowhere to log
-            if (is_null(self::$loggingHandler)) {
-                self::createLoggingHandler('SimpleSAML\Logger\StandardErrorLoggingHandler');
+            if (!isset(self::$loggingHandler)) {
+                self::createLoggingHandler(\SimpleSAML\Logger\StandardErrorLoggingHandler::class);
             }
             $_SERVER['REMOTE_ADDR'] = "CLI";
             if (self::$trackid === self::NO_TRACKID) {
-                self::$trackid = 'CL'.bin2hex(openssl_random_pseudo_bytes(4));
+                self::$trackid = 'CL' . bin2hex(openssl_random_pseudo_bytes(4));
             }
-        } elseif (self::$loggingHandler === null) {
+        } elseif (!isset(self::$loggingHandler)) {
             // Initialize logging
             self::createLoggingHandler();
-            self::flush();
         }
 
         if (self::$captureLog) {
             $ts = microtime(true);
             $msecs = (int) (($ts - (int) $ts) * 1000);
-            $ts = gmdate('H:i:s', $ts).sprintf('.%03d', $msecs).'Z';
-            self::$capturedLog[] = $ts.' '.$string;
+            $ts = gmdate('H:i:s', $ts) . sprintf('.%03d', $msecs) . 'Z';
+            self::$capturedLog[] = $ts . ' ' . $string;
         }
 
         if (self::$logLevel >= $level || $statsLog) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/ErrorLogLoggingHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/ErrorLogLoggingHandler.php
index 355fe24d1d..07bfea093e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/ErrorLogLoggingHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/ErrorLogLoggingHandler.php
@@ -2,6 +2,7 @@
 
 namespace SimpleSAML\Logger;
 
+use SimpleSAML\Configuration;
 use SimpleSAML\Logger;
 
 /**
@@ -16,6 +17,8 @@ class ErrorLogLoggingHandler implements LoggingHandlerInterface
 {
     /**
      * This array contains the mappings from syslog log level to names.
+     *
+     * @var array
      */
     private static $levelNames = [
         Logger::EMERG   => 'EMERG',
@@ -41,7 +44,7 @@ class ErrorLogLoggingHandler implements LoggingHandlerInterface
      *
      * @param \SimpleSAML\Configuration $config The configuration object for this handler.
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         $this->processname = $config->getString('logging.processname', 'SimpleSAMLphp');
     }
@@ -51,6 +54,7 @@ public function __construct(\SimpleSAML\Configuration $config)
      * Set the format desired for the logs.
      *
      * @param string $format The format used for logs.
+     * @return void
      */
     public function setLogFormat($format)
     {
@@ -63,6 +67,7 @@ public function setLogFormat($format)
      *
      * @param int $level The log level.
      * @param string $string The formatted message to log.
+     * @return void
      */
     public function log($level, $string)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/FileLoggingHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/FileLoggingHandler.php
index 8e9202f55d..b7d041a03d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/FileLoggingHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/FileLoggingHandler.php
@@ -2,7 +2,9 @@
 
 namespace SimpleSAML\Logger;
 
+use SimpleSAML\Configuration;
 use SimpleSAML\Logger;
+use SimpleSAML\Utils;
 
 /**
  * A logging handler that dumps logs to files.
@@ -13,7 +15,6 @@
  */
 class FileLoggingHandler implements LoggingHandlerInterface
 {
-
     /**
      * A string with the path to the file where we should log our messages.
      *
@@ -24,6 +25,8 @@ class FileLoggingHandler implements LoggingHandlerInterface
     /**
      * This array contains the mappings from syslog log levels to names. Copied more or less directly from
      * SimpleSAML\Logger\ErrorLogLoggingHandler.
+     *
+     * @var array
      */
     private static $levelNames = [
         Logger::EMERG   => 'EMERGENCY',
@@ -35,34 +38,39 @@ class FileLoggingHandler implements LoggingHandlerInterface
         Logger::INFO    => 'INFO',
         Logger::DEBUG   => 'DEBUG',
     ];
+
+    /** @var string|null */
     protected $processname = null;
-    protected $format;
+
+    /** @var string */
+    protected $format = "%b %d %H:%M:%S";
 
 
     /**
      * Build a new logging handler based on files.
+     * @param \SimpleSAML\Configuration $config
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         // get the metadata handler option from the configuration
-        $this->logFile = $config->getPathValue('loggingdir', 'log/').
+        $this->logFile = $config->getPathValue('loggingdir', 'log/') .
             $config->getString('logging.logfile', 'simplesamlphp.log');
         $this->processname = $config->getString('logging.processname', 'SimpleSAMLphp');
 
         if (@file_exists($this->logFile)) {
             if (!@is_writeable($this->logFile)) {
-                throw new \Exception("Could not write to logfile: ".$this->logFile);
+                throw new \Exception("Could not write to logfile: " . $this->logFile);
             }
         } else {
             if (!@touch($this->logFile)) {
                 throw new \Exception(
-                    "Could not create logfile: ".$this->logFile.
+                    "Could not create logfile: " . $this->logFile .
                     " The logging directory is not writable for the web server user."
                 );
             }
         }
 
-        \SimpleSAML\Utils\Time::initTimezone();
+        Utils\Time::initTimezone();
     }
 
 
@@ -70,6 +78,7 @@ public function __construct(\SimpleSAML\Configuration $config)
      * Set the format desired for the logs.
      *
      * @param string $format The format used for logs.
+     * @return void
      */
     public function setLogFormat($format)
     {
@@ -82,6 +91,7 @@ public function setLogFormat($format)
      *
      * @param int    $level The log level.
      * @param string $string The formatted message to log.
+     * @return void
      */
     public function log($level, $string)
     {
@@ -107,7 +117,7 @@ public function log($level, $string)
             }
 
             $string = str_replace($formats, $replacements, $string);
-            file_put_contents($this->logFile, $string.\PHP_EOL, FILE_APPEND);
+            file_put_contents($this->logFile, $string . \PHP_EOL, FILE_APPEND);
         }
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/LoggingHandlerInterface.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/LoggingHandlerInterface.php
index a9b939ddd0..3d00324e5e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/LoggingHandlerInterface.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/LoggingHandlerInterface.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Logger;
 
+use SimpleSAML\Configuration;
+
 /**
  * The interface that must be implemented by any log handler.
  *
@@ -11,13 +13,12 @@
 
 interface LoggingHandlerInterface
 {
-
     /**
      * Constructor for log handlers. It must accept receiving a \SimpleSAML\Configuration object.
      *
      * @param \SimpleSAML\Configuration $config The configuration to use in this log handler.
      */
-    public function __construct(\SimpleSAML\Configuration $config);
+    public function __construct(Configuration $config);
 
 
     /**
@@ -25,6 +26,7 @@ public function __construct(\SimpleSAML\Configuration $config);
      *
      * @param int $level The log level.
      * @param string $string The message to log.
+     * @return void
      */
     public function log($level, $string);
 
@@ -33,6 +35,7 @@ public function log($level, $string);
      * Set the format desired for the logs.
      *
      * @param string $format The format used for logs.
+     * @return void
      */
     public function setLogFormat($format);
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/StandardErrorLoggingHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/StandardErrorLoggingHandler.php
index 3413e68cea..ecc028bf0e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/StandardErrorLoggingHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/StandardErrorLoggingHandler.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Logger;
 
+use SimpleSAML\Configuration;
+
 /**
  * A logging handler that outputs all messages to standard error.
  *
@@ -10,13 +12,14 @@
  */
 class StandardErrorLoggingHandler extends FileLoggingHandler
 {
-
     /**
      * StandardError constructor.
      *
      * It runs the parent constructor and sets the log file to be the standard error descriptor.
+     *
+     * @param \SimpleSAML\Configuration $config
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         $this->processname = $config->getString('logging.processname', 'SimpleSAMLphp');
         $this->logFile = 'php://stderr';
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/SyslogLoggingHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/SyslogLoggingHandler.php
index 8d6e21a396..a5cfa6bc06 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/SyslogLoggingHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Logger/SyslogLoggingHandler.php
@@ -2,7 +2,8 @@
 
 namespace SimpleSAML\Logger;
 
-use SimpleSAML\Utils\System;
+use SimpleSAML\Configuration;
+use SimpleSAML\Utils;
 
 /**
  * A logger that sends messages to syslog.
@@ -13,21 +14,25 @@
  */
 class SyslogLoggingHandler implements LoggingHandlerInterface
 {
+    /** @var bool */
     private $isWindows = false;
-    private $format;
+
+    /** @var string */
+    protected $format = "%b %d %H:%M:%S";
 
 
     /**
      * Build a new logging handler based on syslog.
+     * @param \SimpleSAML\Configuration $config
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         $facility = $config->getInteger('logging.facility', defined('LOG_LOCAL5') ? constant('LOG_LOCAL5') : LOG_USER);
 
         $processname = $config->getString('logging.processname', 'SimpleSAMLphp');
 
         // Setting facility to LOG_USER (only valid in Windows), enable log level rewrite on windows systems
-        if (System::getOS() === System::WINDOWS) {
+        if (Utils\System::getOS() === Utils\System::WINDOWS) {
             $this->isWindows = true;
             $facility = LOG_USER;
         }
@@ -40,6 +45,7 @@ public function __construct(\SimpleSAML\Configuration $config)
      * Set the format desired for the logs.
      *
      * @param string $format The format used for logs.
+     * @return void
      */
     public function setLogFormat($format)
     {
@@ -52,6 +58,7 @@ public function setLogFormat($format)
      *
      * @param int $level The log level.
      * @param string $string The formatted message to log.
+     * @return void
      */
     public function log($level, $string)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Memcache.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Memcache.php
index 227022c201..98337e63a0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Memcache.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Memcache.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML;
 
+use SimpleSAML\Utils;
+
 /**
  * This file implements functions to read and write to a group of memcache
  * servers.
@@ -24,7 +26,7 @@ class Memcache
     /**
      * Cache of the memcache servers we are using.
      *
-     * @var \Memcache[]|null
+     * @var \Memcache[]|\Memcached[]|null
      */
     private static $serverGroups = null;
 
@@ -69,6 +71,7 @@ public static function get($key)
             $allDown = false;
 
             // unserialize the object
+            /** @var string $serializedInfo */
             $info = unserialize($serializedInfo);
 
             /*
@@ -146,6 +149,7 @@ public static function get($key)
      * @param string       $key The key of the data.
      * @param mixed        $value The value of the data.
      * @param integer|null $expire The expiration timestamp of the data.
+     * @return void
      */
     public static function set($key, $value, $expire = null)
     {
@@ -163,7 +167,7 @@ public static function set($key, $value, $expire = null)
 
         // store this object to all groups of memcache servers
         foreach (self::getMemcacheServers() as $server) {
-            if (self::$extension === '\memcached') {
+            if (self::$extension === \Memcached::class) {
                 $server->set($key, $savedInfoSerialized, $expire);
             } else {
                 $server->set($key, $savedInfoSerialized, 0, $expire);
@@ -176,6 +180,7 @@ public static function set($key, $value, $expire = null)
      * Delete a key-value pair from the memcache servers.
      *
      * @param string $key The key we should delete.
+     * @return void
      */
     public static function delete($key)
     {
@@ -207,8 +212,9 @@ public static function delete($key)
      *    The timeout for contacting this server, in seconds.
      *    The default value is 3 seconds.
      *
-     * @param \Memcache $memcache The Memcache object we should add this server to.
+     * @param \Memcache|\Memcached $memcache The Memcache object we should add this server to.
      * @param array    $server An associative array with the configuration options for the server to add.
+     * @return void
      *
      * @throws \Exception If any configuration option for the server is invalid.
      */
@@ -226,7 +232,7 @@ private static function addMemcacheServer($memcache, $server)
         // the hostname must be a valid string
         if (!is_string($hostname)) {
             throw new \Exception(
-                "Invalid hostname for server in the 'memcache_store.servers' configuration option. The hostname is".
+                "Invalid hostname for server in the 'memcache_store.servers' configuration option. The hostname is" .
                 ' supposed to be a string.'
             );
         }
@@ -240,7 +246,7 @@ private static function addMemcacheServer($memcache, $server)
             $port = (int) $server['port'];
             if (($port <= 0) || ($port > 65535)) {
                 throw new \Exception(
-                    "Invalid port for server in the 'memcache_store.servers' configuration option. The port number".
+                    "Invalid port for server in the 'memcache_store.servers' configuration option. The port number" .
                     ' is supposed to be an integer between 0 and 65535.'
                 );
             }
@@ -259,7 +265,7 @@ private static function addMemcacheServer($memcache, $server)
             $weight = (int) $server['weight'];
             if ($weight <= 0) {
                 throw new \Exception(
-                    "Invalid weight for server in the 'memcache_store.servers' configuration option. The weight is".
+                    "Invalid weight for server in the 'memcache_store.servers' configuration option. The weight is" .
                     ' supposed to be a positive integer.'
                 );
             }
@@ -274,7 +280,7 @@ private static function addMemcacheServer($memcache, $server)
             $timeout = (int) $server['timeout'];
             if ($timeout <= 0) {
                 throw new \Exception(
-                    "Invalid timeout for server in the 'memcache_store.servers' configuration option. The timeout is".
+                    "Invalid timeout for server in the 'memcache_store.servers' configuration option. The timeout is" .
                     ' supposed to be a positive integer.'
                 );
             }
@@ -284,7 +290,7 @@ private static function addMemcacheServer($memcache, $server)
         }
 
         // add this server to the Memcache object
-        if (self::$extension === '\memcached') {
+        if ($memcache instanceof \Memcached) {
             $memcache->addServer($hostname, $port);
         } else {
             $memcache->addServer($hostname, $port, true, $weight, $timeout, $timeout, true);
@@ -297,31 +303,53 @@ private static function addMemcacheServer($memcache, $server)
      * creates a Memcache object from the servers in the group.
      *
      * @param array $group Array of servers which should be created as a group.
+     * @param string $index The index for this group. Specify if persistent connections are desired.
      *
-     * @return \Memcache A Memcache object of the servers in the group
+     * @return \Memcache|\Memcached A Memcache object of the servers in the group
      *
      * @throws \Exception If the servers configuration is invalid.
      */
-    private static function loadMemcacheServerGroup(array $group)
+    private static function loadMemcacheServerGroup(array $group, $index = null)
     {
-        $class = class_exists('\Memcache') ? '\Memcache' : (class_exists('\Memcached') ? '\Memcached' : false);
-        if (!$class) {
+        if (class_exists(\Memcached::class)) {
+            if (is_string($index)) {
+                $memcache = new \Memcached($index);
+            } else {
+                $memcache = new \Memcached();
+            }
+            if (array_key_exists('options', $group)) {
+                $memcache->setOptions($group['options']);
+                unset($group['options']);
+            }
+            self::$extension = \Memcached::class;
+
+            $servers = $memcache->getServerList();
+            if (count($servers) === count($group) && !$memcache->isPristine()) {
+                return $memcache;
+            }
+            $memcache->resetServerList();
+        } elseif (class_exists(\Memcache::class)) {
+            $memcache = new \Memcache();
+            self::$extension = \Memcache::class;
+        } else {
             throw new \Exception(
                 'Missing Memcached implementation. You must install either the Memcache or Memcached extension.'
             );
         }
-        self::$extension = strtolower($class);
 
-        // create the \Memcache object
-        $memcache = new $class();
+        if (self::$extension === \Memcache::class) {
+            Logger::warning(
+                "The use of PHP-extension memcache is deprecated. Please migrate to the memcached extension."
+            );
+        }
 
         // iterate over all the servers in the group and add them to the Memcache object
         foreach ($group as $index => $server) {
             // make sure that we don't have an index. An index would be a sign of invalid configuration
             if (!is_int($index)) {
                 throw new \Exception(
-                    "Invalid index on element in the 'memcache_store.servers' configuration option. Perhaps you".
-                    ' have forgotten to add an array(...) around one of the server groups? The invalid index was: '.
+                    "Invalid index on element in the 'memcache_store.servers' configuration option. Perhaps you" .
+                    ' have forgotten to add an array(...) around one of the server groups? The invalid index was: ' .
                     $index
                 );
             }
@@ -329,8 +357,8 @@ private static function loadMemcacheServerGroup(array $group)
             // make sure that the server object is an array. Each server is an array with name-value pairs
             if (!is_array($server)) {
                 throw new \Exception(
-                    'Invalid value for the server with index '.$index.
-                    '. Remeber that the \'memcache_store.servers\' configuration option'.
+                    'Invalid value for the server with index ' . $index .
+                    '. Remeber that the \'memcache_store.servers\' configuration option' .
                     ' contains an array of arrays of arrays.'
                 );
             }
@@ -338,6 +366,7 @@ private static function loadMemcacheServerGroup(array $group)
             self::addMemcacheServer($memcache, $server);
         }
 
+        /** @var \Memcache|\Memcached */
         return $memcache;
     }
 
@@ -346,7 +375,7 @@ private static function loadMemcacheServerGroup(array $group)
      * This function gets a list of all configured memcache servers. This list is initialized based
      * on the content of 'memcache_store.servers' in the configuration.
      *
-     * @return \Memcache[] Array with Memcache objects.
+     * @return \Memcache[]|\Memcached[] Array with Memcache objects.
      *
      * @throws \Exception If the servers configuration is invalid.
      */
@@ -368,29 +397,25 @@ private static function getMemcacheServers()
 
         // iterate over all the groups in the 'memcache_store.servers' configuration option
         foreach ($groups as $index => $group) {
-            // make sure that the group doesn't have an index. An index would be a sign of invalid configuration
-            if (!is_int($index)) {
-                throw new \Exception(
-                    "Invalid index on element in the 'memcache_store.servers'".
-                    ' configuration option. Perhaps you have forgotten to add an array(...)'.
-                    ' around one of the server groups? The invalid index was: '.$index
-                );
-            }
-
             /*
              * Make sure that the group is an array. Each group is an array of servers. Each server is
              * an array of name => value pairs for that server.
              */
             if (!is_array($group)) {
                 throw new \Exception(
-                    "Invalid value for the server with index ".$index.
-                    ". Remeber that the 'memcache_store.servers' configuration option".
+                    "Invalid value for the server with index " . $index .
+                    ". Remeber that the 'memcache_store.servers' configuration option" .
                     ' contains an array of arrays of arrays.'
                 );
             }
 
+            // make sure that the group doesn't have an index. An index would be a sign of invalid configuration
+            if (is_int($index)) {
+                $index = null;
+            }
+
             // parse and add this group to the server group list
-            self::$serverGroups[] = self::loadMemcacheServerGroup($group);
+            self::$serverGroups[] = self::loadMemcacheServerGroup($group, $index);
         }
 
         return self::$serverGroups;
@@ -413,7 +438,7 @@ private static function getExpireTime()
     {
         // get the configuration instance
         $config = Configuration::getInstance();
-        assert($config instanceof \SimpleSAML\Configuration);
+        assert($config instanceof Configuration);
 
         // get the expire-value from the configuration
         $expire = $config->getInteger('memcache_store.expires', 0);
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php
index 6e712ea3a3..5e77a43bbb 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandler.php
@@ -2,7 +2,13 @@
 
 namespace SimpleSAML\Metadata;
 
+use SAML2\Constants;
 use SAML2\XML\saml\Issuer;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
+use SimpleSAML\Error\MetadataNotFound;
 use SimpleSAML\Utils\ClearableState;
 
 /**
@@ -12,14 +18,14 @@
  * @package SimpleSAMLphp
  */
 
-class MetaDataStorageHandler implements ClearableState
+class MetaDataStorageHandler implements \SimpleSAML\Utils\ClearableState
 {
     /**
      * This static variable contains a reference to the current
      * instance of the metadata handler. This variable will be null if
      * we haven't instantiated a metadata handler yet.
      *
-     * @var MetaDataStorageHandler
+     * @var MetaDataStorageHandler|null
      */
     private static $metadataHandler = null;
 
@@ -56,7 +62,7 @@ public static function getMetadataHandler()
      */
     protected function __construct()
     {
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
 
         $sourcesConfig = $config->getArray('metadata.sources', null);
 
@@ -70,7 +76,7 @@ protected function __construct()
             $this->sources = MetaDataStorageSource::parseSources($sourcesConfig);
         } catch (\Exception $e) {
             throw new \Exception(
-                "Invalid configuration of the 'metadata.sources' configuration option: ".$e->getMessage()
+                "Invalid configuration of the 'metadata.sources' configuration option: " . $e->getMessage()
             );
         }
     }
@@ -98,36 +104,36 @@ public function getGenerated($property, $set)
         }
 
         // get the configuration
-        $config = \SimpleSAML\Configuration::getInstance();
-        assert($config instanceof \SimpleSAML\Configuration);
+        $config = Configuration::getInstance();
+        assert($config instanceof Configuration);
 
-        $baseurl = \SimpleSAML\Utils\HTTP::getSelfURLHost().$config->getBasePath();
+        $baseurl = Utils\HTTP::getSelfURLHost() . $config->getBasePath();
 
         if ($set == 'saml20-sp-hosted') {
             if ($property === 'SingleLogoutServiceBinding') {
-                return \SAML2\Constants::BINDING_HTTP_REDIRECT;
+                return Constants::BINDING_HTTP_REDIRECT;
             }
         } elseif ($set == 'saml20-idp-hosted') {
             switch ($property) {
                 case 'SingleSignOnService':
-                    return $baseurl.'saml2/idp/SSOService.php';
+                    return $baseurl . 'saml2/idp/SSOService.php';
 
                 case 'SingleSignOnServiceBinding':
-                    return \SAML2\Constants::BINDING_HTTP_REDIRECT;
+                    return Constants::BINDING_HTTP_REDIRECT;
 
                 case 'SingleLogoutService':
-                    return $baseurl.'saml2/idp/SingleLogoutService.php';
+                    return $baseurl . 'saml2/idp/SingleLogoutService.php';
 
                 case 'SingleLogoutServiceBinding':
-                    return \SAML2\Constants::BINDING_HTTP_REDIRECT;
+                    return Constants::BINDING_HTTP_REDIRECT;
             }
         } elseif ($set == 'shib13-idp-hosted') {
             if ($property === 'SingleSignOnService') {
-                return $baseurl.'shib13/idp/SSOService.php';
+                return $baseurl . 'shib13/idp/SSOService.php';
             }
         }
 
-        throw new \Exception('Could not generate metadata property '.$property.' for set '.$set.'.');
+        throw new \Exception('Could not generate metadata property ' . $property . ' for set ' . $set . '.');
     }
 
 
@@ -136,10 +142,11 @@ public function getGenerated($property, $set)
      * where the key is the entity id.
      *
      * @param string $set The set we want to list metadata from.
+     * @param bool $showExpired A boolean specifying whether expired entities should be returned
      *
      * @return array An associative array with the metadata from from the given set.
      */
-    public function getList($set = 'saml20-idp-remote')
+    public function getList($set = 'saml20-idp-remote', $showExpired = false)
     {
         assert(is_string($set));
 
@@ -148,13 +155,13 @@ public function getList($set = 'saml20-idp-remote')
         foreach ($this->sources as $source) {
             $srcList = $source->getMetadataSet($set);
 
-            foreach ($srcList as $key => $le) {
-                if (array_key_exists('expire', $le)) {
-                    if ($le['expire'] < time()) {
+            if ($showExpired === false) {
+                foreach ($srcList as $key => $le) {
+                    if (array_key_exists('expire', $le) && ($le['expire'] < time())) {
                         unset($srcList[$key]);
-                        \SimpleSAML\Logger::warning(
-                            "Dropping metadata entity ".var_export($key, true).", expired ".
-                            \SimpleSAML\Utils\Time::generateTimestamp($le['expire'])."."
+                        Logger::warning(
+                            "Dropping metadata entity " . var_export($key, true) . ", expired " .
+                            Utils\Time::generateTimestamp($le['expire']) . "."
                         );
                     }
                 }
@@ -199,7 +206,7 @@ public function getMetaDataCurrentEntityID($set, $type = 'entityid')
         assert(is_string($set));
 
         // first we look for the hostname/path combination
-        $currenthostwithpath = \SimpleSAML\Utils\HTTP::getSelfHostWithPath(); // sp.example.org/university
+        $currenthostwithpath = Utils\HTTP::getSelfHostWithPath(); // sp.example.org/university
 
         foreach ($this->sources as $source) {
             $index = $source->getEntityIdFromHostPath($currenthostwithpath, $set, $type);
@@ -209,7 +216,7 @@ public function getMetaDataCurrentEntityID($set, $type = 'entityid')
         }
 
         // then we look for the hostname
-        $currenthost = \SimpleSAML\Utils\HTTP::getSelfHost(); // sp.example.org
+        $currenthost = Utils\HTTP::getSelfHost(); // sp.example.org
 
         foreach ($this->sources as $source) {
             $index = $source->getEntityIdFromHostPath($currenthost, $set, $type);
@@ -228,8 +235,8 @@ public function getMetaDataCurrentEntityID($set, $type = 'entityid')
 
         // we were unable to find the hostname/path in any metadata source
         throw new \Exception(
-            'Could not find any default metadata entities in set ['.$set.'] for host ['.$currenthost.' : '.
-            $currenthostwithpath.']'
+            'Could not find any default metadata entities in set [' . $set . '] for host [' . $currenthost . ' : ' .
+            $currenthostwithpath . ']'
         );
     }
 
@@ -241,7 +248,7 @@ public function getMetaDataCurrentEntityID($set, $type = 'entityid')
      * @param string $set Which set of metadata we are looking it up in.
      * @param string $ip IP address
      *
-     * @return string The entity id of a entity which have a CIDR hint where the provided
+     * @return string|null The entity id of a entity which have a CIDR hint where the provided
      *        IP address match.
      */
     public function getPreferredEntityIdFromCIDRhint($set, $ip)
@@ -256,12 +263,43 @@ public function getPreferredEntityIdFromCIDRhint($set, $ip)
         return null;
     }
 
+    /**
+     * This function loads the metadata for entity IDs in $entityIds. It is returned as an associative array
+     * where the key is the entity id. An empty array may be returned if no matching entities were found
+     * @param array $entityIds The entity ids to load
+     * @param string $set The set we want to get metadata from.
+     * @return array An associative array with the metadata for the requested entities, if found.
+     */
+    public function getMetaDataForEntities(array $entityIds, $set)
+    {
+        $result = [];
+        foreach ($this->sources as $source) {
+            $srcList = $source->getMetaDataForEntities($entityIds, $set);
+            foreach ($srcList as $key => $le) {
+                if (array_key_exists('expire', $le)) {
+                    if ($le['expire'] < time()) {
+                        unset($srcList[$key]);
+                        \SimpleSAML\Logger::warning(
+                            "Dropping metadata entity " . var_export($key, true) . ", expired " .
+                            \SimpleSAML\Utils\Time::generateTimestamp($le['expire']) . "."
+                        );
+                        continue;
+                    }
+                }
+                // We found the entity id so remove it from the list that needs resolving
+                unset($entityIds[array_search($key, $entityIds)]);
+            }
+            $result = array_merge($srcList, $result);
+        }
+
+        return $result;
+    }
 
     /**
      * This function looks up the metadata for the given entity id in the given set. It will throw an
      * exception if it is unable to locate the metadata.
      *
-     * @param string $index The entity id we are looking up. This parameter may be NULL, in which case we look up
+     * @param string|null $index The entity id we are looking up. This parameter may be NULL, in which case we look up
      * the current entity id based on the current hostname/path.
      * @param string $set The set of metadata we are looking up the entity id in.
      *
@@ -286,8 +324,8 @@ public function getMetaData($index, $set)
                 if (array_key_exists('expire', $metadata)) {
                     if ($metadata['expire'] < time()) {
                         throw new \Exception(
-                            'Metadata for the entity ['.$index.'] expired '.
-                            (time() - $metadata['expire']).' seconds ago.'
+                            'Metadata for the entity [' . $index . '] expired ' .
+                            (time() - $metadata['expire']) . ' seconds ago.'
                         );
                     }
                 }
@@ -299,7 +337,7 @@ public function getMetaData($index, $set)
             }
         }
 
-        throw new \SimpleSAML\Error\MetadataNotFound($index);
+        throw new Error\MetadataNotFound($index);
     }
 
 
@@ -320,7 +358,7 @@ public function getMetaDataConfig($entityId, $set)
         assert(is_string($set));
 
         $metadata = $this->getMetaData($entityId, $set);
-        return \SimpleSAML\Configuration::loadFromArray($metadata, $set.'/'.var_export($entityId, true));
+        return Configuration::loadFromArray($metadata, $set . '/' . var_export($entityId, true));
     }
 
 
@@ -352,9 +390,9 @@ public function getMetaDataConfigForSha1($sha1, $set)
             if (sha1($remote_provider['entityid']) == $sha1) {
                 $remote_provider['metadata-set'] = $set;
 
-                return \SimpleSAML\Configuration::loadFromArray(
+                return Configuration::loadFromArray(
                     $remote_provider,
-                    $set.'/'.var_export($remote_provider['entityid'], true)
+                    $set . '/' . var_export($remote_provider['entityid'], true)
                 );
             }
         }
@@ -362,10 +400,12 @@ public function getMetaDataConfigForSha1($sha1, $set)
         return null;
     }
 
+
     /**
      * Clear any metadata cached.
      * Allows for metadata configuration to be changed and reloaded during a given request. Most useful
      * when running phpunit tests and needing to alter config.php and metadata sources between test cases
+     * @return void
      */
     public static function clearInternalState()
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatFile.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatFile.php
index 55336a04d5..9f15a11f3a 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatFile.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerFlatFile.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Metadata;
 
+use SimpleSAML\Configuration;
+
 /**
  * This file defines a flat file metadata source.
  * Instantiation of session handler objects should be done through
@@ -19,7 +21,7 @@ class MetaDataStorageHandlerFlatFile extends MetaDataStorageSource
      *
      * @var string
      */
-    private $directory;
+    private $directory = '/';
 
 
     /**
@@ -44,11 +46,11 @@ protected function __construct($config)
         assert(is_array($config));
 
         // get the configuration
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
 
         // find the path to the directory we should search for metadata in
         if (array_key_exists('directory', $config)) {
-            $this->directory = $config['directory'];
+            $this->directory = $config['directory'] ?: 'metadata/';
         } else {
             $this->directory = $globalConfig->getString('metadatadir', 'metadata/');
         }
@@ -56,7 +58,10 @@ protected function __construct($config)
         /* Resolve this directory relative to the SimpleSAMLphp directory (unless it is
          * an absolute path).
          */
-        $this->directory = $globalConfig->resolvePath($this->directory).'/';
+
+        /** @var string $base */
+        $base = $globalConfig->resolvePath($this->directory);
+        $this->directory = $base . '/';
     }
 
 
@@ -66,13 +71,13 @@ protected function __construct($config)
      *
      * @param string $set The set of metadata we are loading.
      *
-     * @return array An associative array with the metadata, or null if we are unable to load metadata from the given
-     *     file.
+     * @return array|null An associative array with the metadata,
+     *     or null if we are unable to load metadata from the given file.
      * @throws \Exception If the metadata set cannot be loaded.
      */
     private function load($set)
     {
-        $metadatasetfile = $this->directory.$set.'.php';
+        $metadatasetfile = $this->directory . $set . '.php';
 
         if (!file_exists($metadatasetfile)) {
             return null;
@@ -83,7 +88,7 @@ private function load($set)
         include($metadatasetfile);
 
         if (!is_array($metadata)) {
-            throw new \Exception('Could not load metadata set ['.$set.'] from file: '.$metadatasetfile);
+            throw new \Exception('Could not load metadata set [' . $set . '] from file: ' . $metadatasetfile);
         }
 
         return $metadata;
@@ -105,6 +110,7 @@ public function getMetadataSet($set)
             return $this->cachedMetadata[$set];
         }
 
+        /** @var array|null $metadataSet */
         $metadataSet = $this->load($set);
         if ($metadataSet === null) {
             $metadataSet = [];
@@ -116,7 +122,6 @@ public function getMetadataSet($set)
         }
 
         $this->cachedMetadata[$set] = $metadataSet;
-
         return $metadataSet;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php
index 95f1417a1b..c6f6c3aed4 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerPdo.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Metadata;
 
+use SimpleSAML\Database;
+use SimpleSAML\Error;
+
 /**
  * Class for handling metadata files stored in a database.
  *
@@ -41,9 +44,7 @@ class MetaDataStorageHandlerPdo extends MetaDataStorageSource
         'shib13-idp-hosted',
         'shib13-idp-remote',
         'shib13-sp-hosted',
-        'shib13-sp-remote',
-        'wsfed-idp-remote',
-        'wsfed-sp-hosted'
+        'shib13-sp-remote'
     ];
 
 
@@ -62,7 +63,7 @@ public function __construct($config)
     {
         assert(is_array($config));
 
-        $this->db = \SimpleSAML\Database::getInstance();
+        $this->db = Database::getInstance();
     }
 
 
@@ -72,8 +73,8 @@ public function __construct($config)
      *
      * @param string $set The set of metadata we are loading.
      *
-     * @return array $metadata Associative array with the metadata, or NULL if we are unable to load metadata from the
-     *     given file.
+     * @return array|null $metadata Associative array with the metadata, or NULL if we are unable to load
+     *     metadata from the given file.
      *
      * @throws \Exception If a database error occurs.
      * @throws \SimpleSAML\Error\Exception If the metadata can be retrieved from the database, but cannot be decoded.
@@ -95,7 +96,7 @@ private function load($set)
             while ($d = $stmt->fetch()) {
                 $data = json_decode($d['entity_data'], true);
                 if ($data === null) {
-                    throw new \SimpleSAML\Error\Exception("Cannot decode metadata for entity '${d['entity_id']}'");
+                    throw new Error\Exception("Cannot decode metadata for entity '${d['entity_id']}'");
                 }
                 if (!array_key_exists('entityid', $data)) {
                     $data['entityid'] = $d['entity_id'];
@@ -105,7 +106,9 @@ private function load($set)
 
             return $metadata;
         } else {
-            throw new \Exception('PDO metadata handler: Database error: '.var_export($this->db->getLastError(), true));
+            throw new \Exception(
+                'PDO metadata handler: Database error: ' . var_export($this->db->getLastError(), true)
+            );
         }
     }
 
@@ -145,7 +148,7 @@ public function getMetadataSet($set)
      * @param string $entityId The entityId we are looking up.
      * @param string $set The set we are looking for metadata in.
      *
-     * @return array An associative array with metadata for the given entity, or NULL if we are unable to
+     * @return array|null An associative array with metadata for the given entity, or NULL if we are unable to
      *         locate the entity.
      */
     public function getMetaData($entityId, $set)
@@ -171,12 +174,12 @@ public function getMetaData($entityId, $set)
         // any dynamic entries to see if the dynamic hosted entity id matches
         if (substr($set, -10) == 'idp-hosted') {
             $stmt = $this->db->read(
-                "SELECT entity_id, entity_data FROM {$tableName} WHERE (entity_id LIKE :dynamicId OR entity_id = :entityId)",
+                "SELECT entity_id, entity_data FROM {$tableName} "
+                . "WHERE (entity_id LIKE :dynamicId OR entity_id = :entityId)",
                 ['dynamicId' => '__DYNAMIC%', 'entityId' => $entityId]
             );
-        }
-        // other metadata types should be able to match on entity id
-        else {
+        } else {
+            // other metadata types should be able to match on entity id
             $stmt = $this->db->read(
                 "SELECT entity_id, entity_data FROM {$tableName} WHERE entity_id = :entityId",
                 ['entityId' => $entityId]
@@ -185,7 +188,9 @@ public function getMetaData($entityId, $set)
 
         // throw pdo exception upon execution failure
         if (!$stmt->execute()) {
-            throw new \Exception('PDO metadata handler: Database error: '.var_export($this->db->getLastError(), true));
+            throw new \Exception(
+                'PDO metadata handler: Database error: ' . var_export($this->db->getLastError(), true)
+            );
         }
 
         // load the metadata into an array
@@ -193,7 +198,9 @@ public function getMetaData($entityId, $set)
         while ($d = $stmt->fetch()) {
             $data = json_decode($d['entity_data'], true);
             if (json_last_error() != JSON_ERROR_NONE) {
-                throw new \SimpleSAML\Error\Exception("Cannot decode metadata for entity '${d['entity_id']}'");
+                throw new \SimpleSAML\Error\Exception(
+                    "Cannot decode metadata for entity '${d['entity_id']}'"
+                );
             }
 
             // update the entity id to either the key (if not dynamic or generate the dynamic hosted url)
@@ -272,7 +279,7 @@ private function getTableName($table)
     {
         assert(is_string($table));
 
-        return $this->db->applyPrefix(str_replace("-", "_", $this->tablePrefix.$table));
+        return $this->db->applyPrefix(str_replace("-", "_", $this->tablePrefix . $table));
     }
 
 
@@ -288,7 +295,7 @@ public function initDatabase()
         foreach ($this->supportedSets as $set) {
             $tableName = $this->getTableName($set);
             $rows = $this->db->write(
-                "CREATE TABLE IF NOT EXISTS $tableName (entity_id VARCHAR(255) PRIMARY KEY NOT NULL, entity_data ".
+                "CREATE TABLE IF NOT EXISTS $tableName (entity_id VARCHAR(255) PRIMARY KEY NOT NULL, entity_data " .
                 "TEXT NOT NULL)"
             );
             if ($rows === false) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerSerialize.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerSerialize.php
index 8c05077567..85c2440d15 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerSerialize.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerSerialize.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Metadata;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
+
 /**
  * Class for handling metadata files in serialized format.
  *
@@ -23,7 +27,7 @@ class MetaDataStorageHandlerSerialize extends MetaDataStorageSource
      *
      * @var string
      */
-    private $directory;
+    private $directory = '/';
 
 
     /**
@@ -37,16 +41,16 @@ public function __construct($config)
     {
         assert(is_array($config));
 
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
 
-        $cfgHelp = \SimpleSAML\Configuration::loadFromArray($config, 'serialize metadata source');
+        $cfgHelp = Configuration::loadFromArray($config, 'serialize metadata source');
 
         $this->directory = $cfgHelp->getString('directory');
 
         /* Resolve this directory relative to the SimpleSAMLphp directory (unless it is
          * an absolute path).
          */
-        $this->directory = $globalConfig->resolvePath($this->directory);
+        $this->directory = Utils\System::resolvePath($this->directory, $globalConfig->getBaseDir());
     }
 
 
@@ -63,7 +67,7 @@ private function getMetadataPath($entityId, $set)
         assert(is_string($entityId));
         assert(is_string($set));
 
-        return $this->directory.'/'.rawurlencode($set).'/'.rawurlencode($entityId).self::EXTENSION;
+        return $this->directory . '/' . rawurlencode($set) . '/' . rawurlencode($entityId) . self::EXTENSION;
     }
 
 
@@ -78,8 +82,8 @@ public function getMetadataSets()
 
         $dh = @opendir($this->directory);
         if ($dh === false) {
-            \SimpleSAML\Logger::warning(
-                'Serialize metadata handler: Unable to open directory: '.var_export($this->directory, true)
+            Logger::warning(
+                'Serialize metadata handler: Unable to open directory: ' . var_export($this->directory, true)
             );
             return $ret;
         }
@@ -90,12 +94,12 @@ public function getMetadataSets()
                 continue;
             }
 
-            $path = $this->directory.'/'.$entry;
+            $path = $this->directory . '/' . $entry;
 
             if (!is_dir($path)) {
-                \SimpleSAML\Logger::warning(
-                    'Serialize metadata handler: Metadata directory contained a file where only directories should '.
-                    'exist: '.var_export($path, true)
+                Logger::warning(
+                    'Serialize metadata handler: Metadata directory contained a file where only directories should ' .
+                    'exist: ' . var_export($path, true)
                 );
                 continue;
             }
@@ -122,7 +126,7 @@ public function getMetadataSet($set)
 
         $ret = [];
 
-        $dir = $this->directory.'/'.rawurlencode($set);
+        $dir = $this->directory . '/' . rawurlencode($set);
         if (!is_dir($dir)) {
             // probably some code asked for a metadata set which wasn't available
             return $ret;
@@ -130,8 +134,8 @@ public function getMetadataSet($set)
 
         $dh = @opendir($dir);
         if ($dh === false) {
-            \SimpleSAML\Logger::warning(
-                'Serialize metadata handler: Unable to open directory: '.var_export($dir, true)
+            Logger::warning(
+                'Serialize metadata handler: Unable to open directory: ' . var_export($dir, true)
             );
             return $ret;
         }
@@ -168,7 +172,7 @@ public function getMetadataSet($set)
      * @param string $entityId The entityId we are looking up.
      * @param string $set The set we are looking for metadata in.
      *
-     * @return array An associative array with metadata for the given entity, or NULL if we are unable to
+     * @return array|null An associative array with metadata for the given entity, or NULL if we are unable to
      *         locate the entity.
      */
     public function getMetaData($entityId, $set)
@@ -184,16 +188,17 @@ public function getMetaData($entityId, $set)
 
         $data = @file_get_contents($filePath);
         if ($data === false) {
+            /** @var array $error */
             $error = error_get_last();
-            \SimpleSAML\Logger::warning(
-                'Error reading file '.$filePath.': '.$error['message']
+            Logger::warning(
+                'Error reading file ' . $filePath . ': ' . $error['message']
             );
             return null;
         }
 
         $data = @unserialize($data);
         if ($data === false) {
-            \SimpleSAML\Logger::warning('Error unserializing file: '.$filePath);
+            Logger::warning('Error unserializing file: ' . $filePath);
             return null;
         }
 
@@ -212,7 +217,7 @@ public function getMetaData($entityId, $set)
      * @param string $set The metadata set this metadata entry belongs to.
      * @param array $metadata The metadata.
      *
-     * @return boolean True if successfully saved, false otherwise.
+     * @return bool True if successfully saved, false otherwise.
      */
     public function saveMetadata($entityId, $set, $metadata)
     {
@@ -221,34 +226,37 @@ public function saveMetadata($entityId, $set, $metadata)
         assert(is_array($metadata));
 
         $filePath = $this->getMetadataPath($entityId, $set);
-        $newPath = $filePath.'.new';
+        $newPath = $filePath . '.new';
 
         $dir = dirname($filePath);
         if (!is_dir($dir)) {
-            \SimpleSAML\Logger::info('Creating directory: '.$dir);
+            Logger::info('Creating directory: ' . $dir);
             $res = @mkdir($dir, 0777, true);
             if ($res === false) {
+                /** @var array $error */
                 $error = error_get_last();
-                \SimpleSAML\Logger::error('Failed to create directory '.$dir.': '.$error['message']);
+                Logger::error('Failed to create directory ' . $dir . ': ' . $error['message']);
                 return false;
             }
         }
 
         $data = serialize($metadata);
 
-        \SimpleSAML\Logger::debug('Writing: '.$newPath);
+        Logger::debug('Writing: ' . $newPath);
 
         $res = file_put_contents($newPath, $data);
         if ($res === false) {
+            /** @var array $error */
             $error = error_get_last();
-            \SimpleSAML\Logger::error('Error saving file '.$newPath.': '.$error['message']);
+            Logger::error('Error saving file ' . $newPath . ': ' . $error['message']);
             return false;
         }
 
         $res = rename($newPath, $filePath);
         if ($res === false) {
+            /** @var array $error */
             $error = error_get_last();
-            \SimpleSAML\Logger::error('Error renaming '.$newPath.' to '.$filePath.': '.$error['message']);
+            Logger::error('Error renaming ' . $newPath . ' to ' . $filePath . ': ' . $error['message']);
             return false;
         }
 
@@ -261,6 +269,7 @@ public function saveMetadata($entityId, $set, $metadata)
      *
      * @param string $entityId The entityId of the metadata entry.
      * @param string $set The metadata set this metadata entry belongs to.
+     * @return void
      */
     public function deleteMetadata($entityId, $set)
     {
@@ -270,20 +279,33 @@ public function deleteMetadata($entityId, $set)
         $filePath = $this->getMetadataPath($entityId, $set);
 
         if (!file_exists($filePath)) {
-            \SimpleSAML\Logger::warning(
-                'Attempted to erase nonexistent metadata entry '.
-                var_export($entityId, true).' in set '.var_export($set, true).'.'
+            Logger::warning(
+                'Attempted to erase nonexistent metadata entry ' .
+                var_export($entityId, true) . ' in set ' . var_export($set, true) . '.'
             );
             return;
         }
 
         $res = unlink($filePath);
         if ($res === false) {
+            /** @var array $error */
             $error = error_get_last();
-            \SimpleSAML\Logger::error(
-                'Failed to delete file '.$filePath.
-                ': '.$error['message']
+            Logger::error(
+                'Failed to delete file ' . $filePath .
+                ': ' . $error['message']
             );
         }
     }
+
+    /**
+     * This function loads the metadata for entity IDs in $entityIds. It is returned as an associative array
+     * where the key is the entity id. An empty array may be returned if no matching entities were found
+     * @param array $entityIds The entity ids to load
+     * @param string $set The set we want to get metadata from.
+     * @return array An associative array with the metadata for the requested entities, if found.
+     */
+    public function getMetaDataForEntities(array $entityIds, $set)
+    {
+        return $this->getMetaDataForEntitiesIndividually($entityIds, $set);
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerXML.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerXML.php
index 9430781b6c..913397412f 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerXML.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageHandlerXML.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Metadata;
 
+use SimpleSAML\Configuration;
+
 /**
  * This class implements a metadata source which loads metadata from XML files.
  * The XML files should be in the SAML 2.0 metadata format.
@@ -12,7 +14,6 @@
 
 class MetaDataStorageHandlerXML extends MetaDataStorageSource
 {
-
     /**
      * This variable contains an associative array with the parsed metadata.
      *
@@ -30,14 +31,14 @@ class MetaDataStorageHandlerXML extends MetaDataStorageSource
      *
      * @param array $config The configuration for this instance of the XML metadata source.
      *
-     * @throws Exception If neither the 'file' or 'url' options are defined in the configuration.
+     * @throws \Exception If neither the 'file' or 'url' options are defined in the configuration.
      */
     protected function __construct($config)
     {
         $src = $srcXml = null;
         if (array_key_exists('file', $config)) {
             // get the configuration
-            $globalConfig = \SimpleSAML\Configuration::getInstance();
+            $globalConfig = Configuration::getInstance();
             $src = $globalConfig->resolvePath($config['file']);
         } elseif (array_key_exists('url', $config)) {
             $src = $config['url'];
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageSource.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageSource.php
index a08db89b96..5ba3fd19ff 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageSource.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/MetaDataStorageSource.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Metadata;
 
+use SimpleSAML\Error;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+
 /**
  * This abstract class defines an interface for metadata storage sources.
  *
@@ -53,7 +57,7 @@ public static function parseSources($sourcesConfig)
      *
      * @param array $sourceConfig Associative array with the configuration for this metadata source.
      *
-     * @return mixed An instance of a metadata source with the given configuration.
+     * @return \SimpleSAML\Metadata\MetaDataStorageSource An instance of a metadata source with the given configuration.
      *
      * @throws \Exception If the metadata source type is invalid.
      */
@@ -82,17 +86,19 @@ public static function getSource($sourceConfig)
             default:
                 // metadata store from module
                 try {
-                    $className = \SimpleSAML\Module::resolveClass(
+                    $className = Module::resolveClass(
                         $type,
                         'MetadataStore',
                         '\SimpleSAML\Metadata\MetaDataStorageSource'
                     );
                 } catch (\Exception $e) {
-                    throw new \SimpleSAML\Error\CriticalConfigurationError(
+                    throw new Error\CriticalConfigurationError(
                         "Invalid 'type' for metadata source. Cannot find store '$type'.",
                         null
                     );
                 }
+
+                /** @var \SimpleSAML\Metadata\MetaDataStorageSource */
                 return new $className($sourceConfig);
         }
     }
@@ -133,6 +139,7 @@ public function getEntityIdFromHostPath($hostPath, $set, $type = 'entityid')
     {
 
         $metadataSet = $this->getMetadataSet($set);
+        /** @psalm-suppress DocblockTypeContradiction */
         if ($metadataSet === null) {
             // this metadata source does not have this metadata set
             return null;
@@ -167,12 +174,11 @@ public function getEntityIdFromHostPath($hostPath, $set, $type = 'entityid')
      * @param string $ip IP address
      * @param string $type Do you want to return the metaindex or the entityID. [entityid|metaindex]
      *
-     * @return string The entity id of a entity which have a CIDR hint where the provided
+     * @return string|null The entity id of a entity which have a CIDR hint where the provided
      *        IP address match.
      */
     public function getPreferredEntityIdFromCIDRhint($set, $ip, $type = 'entityid')
     {
-
         $metadataSet = $this->getMetadataSet($set);
 
         foreach ($metadataSet as $index => $entry) {
@@ -184,9 +190,11 @@ public function getPreferredEntityIdFromCIDRhint($set, $ip, $type = 'entityid')
             }
 
             // support discohints in idp metadata for idp discovery
-            if (array_key_exists('DiscoHints', $entry)
+            if (
+                array_key_exists('DiscoHints', $entry)
                 && array_key_exists('IPHint', $entry['DiscoHints'])
-                && is_array($entry['DiscoHints']['IPHint'])) {
+                && is_array($entry['DiscoHints']['IPHint'])
+            ) {
                 // merge with hints derived from discohints, but prioritize hint.cidr in case it is used
                 $cidrHints = array_merge($entry['DiscoHints']['IPHint'], $cidrHints);
             }
@@ -196,7 +204,7 @@ public function getPreferredEntityIdFromCIDRhint($set, $ip, $type = 'entityid')
             }
 
             foreach ($cidrHints as $hint_entry) {
-                if (\SimpleSAML\Utils\Net::ipCIDRcheck($hint_entry, $ip)) {
+                if (Utils\Net::ipCIDRcheck($hint_entry, $ip)) {
                     if ($type === 'entityid') {
                         return $entry['entityid'];
                     } else {
@@ -241,6 +249,44 @@ public function getMetaData($index, $set)
         return null;
     }
 
+    /**
+     * This function loads the metadata for entity IDs in $entityIds. It is returned as an associative array
+     * where the key is the entity id. An empty array may be returned if no matching entities were found.
+     * Subclasses should override if their getMetadataSet returns nothing or is slow. Subclasses may want to
+     * delegate to getMetaDataForEntitiesIndividually if loading entities one at a time is faster.
+     * @param array $entityIds The entity ids to load
+     * @param string $set The set we want to get metadata from.
+     * @return array An associative array with the metadata for the requested entities, if found.
+     */
+    public function getMetaDataForEntities(array $entityIds, $set)
+    {
+        if (count($entityIds) === 1) {
+            return $this->getMetaDataForEntitiesIndividually($entityIds, $set);
+        }
+        $entities = $this->getMetadataSet($set);
+        return array_intersect_key($entities, array_flip($entityIds));
+    }
+
+    /**
+     * Loads metadata entities one at a time, rather than the default implementation of loading all entities
+     * and filtering.
+     * @see MetaDataStorageSource::getMetaDataForEntities()
+     * @param array $entityIds The entity ids to load
+     * @param string $set The set we want to get metadata from.
+     * @return array An associative array with the metadata for the requested entities, if found.
+     */
+    protected function getMetaDataForEntitiesIndividually(array $entityIds, $set)
+    {
+        $entities = [];
+        foreach ($entityIds as $entityId) {
+            $metadata = $this->getMetaData($entityId, $set);
+            if ($metadata !== null) {
+                $entities[$entityId] = $metadata;
+            }
+        }
+        return $entities;
+    }
+
     /**
      * This method returns the full metadata set for a given entity id or null if the entity id cannot be found
      * in the given metadata set.
@@ -255,7 +301,7 @@ protected function lookupIndexFromEntityId($entityId, array $metadataSet)
         assert(is_array($metadataSet));
 
         // check for hostname
-        $currentHost = \SimpleSAML\Utils\HTTP::getSelfHost(); // sp.example.org
+        $currentHost = Utils\HTTP::getSelfHost(); // sp.example.org
 
         foreach ($metadataSet as $index => $entry) {
             // explicit index match
@@ -283,28 +329,20 @@ private function getDynamicHostedUrl($set)
         assert(is_string($set));
 
         // get the configuration
-        $baseUrl = \SimpleSAML\Utils\HTTP::getBaseURL();
+        $baseUrl = Utils\HTTP::getBaseURL();
 
         if ($set === 'saml20-idp-hosted') {
-            return $baseUrl.'saml2/idp/metadata.php';
-        }
-        else if ($set === 'saml20-sp-hosted') {
-            return $baseUrl.'saml2/sp/metadata.php';
-        }
-        else if ($set === 'shib13-idp-hosted') {
-            return $baseUrl.'shib13/idp/metadata.php';
-        }
-        else if ($set === 'shib13-sp-hosted') {
-            return $baseUrl.'shib13/sp/metadata.php';
-        }
-        else if ($set === 'wsfed-sp-hosted') {
-            return 'urn:federation:'.\SimpleSAML\Utils\HTTP::getSelfHost();
-        }
-        else if ($set === 'adfs-idp-hosted') {
-            return 'urn:federation:'.\SimpleSAML\Utils\HTTP::getSelfHost().':idp';
-        }
-        else {
-            throw new \Exception('Can not generate dynamic EntityID for metadata of this type: ['.$set.']');
+            return $baseUrl . 'saml2/idp/metadata.php';
+        } elseif ($set === 'saml20-sp-hosted') {
+            return $baseUrl . 'saml2/sp/metadata.php';
+        } elseif ($set === 'shib13-idp-hosted') {
+            return $baseUrl . 'shib13/idp/metadata.php';
+        } elseif ($set === 'shib13-sp-hosted') {
+            return $baseUrl . 'shib13/sp/metadata.php';
+        } elseif ($set === 'adfs-idp-hosted') {
+            return 'urn:federation:' . Utils\HTTP::getSelfHost() . ':idp';
+        } else {
+            throw new \Exception('Can not generate dynamic EntityID for metadata of this type: [' . $set . ']');
         }
     }
 
@@ -316,9 +354,8 @@ private function getDynamicHostedUrl($set)
      * @param string $metadataSet a metadata set (saml20-idp-hosted, saml20-sp-remote, etc)
      * @param string $entityId the entity id we are modifying
      * @param array $metadataEntry the fully populated metadata entry
+     * @return array modified metadata to include the valid entityid
      *
-     * @return array An associative array with metadata for the given entity, or NULL if we are unable to
-     *         locate the entity.
      * @throws \Exception
      */
     protected function updateEntityID($metadataSet, $entityId, array $metadataEntry)
@@ -332,9 +369,8 @@ protected function updateEntityID($metadataSet, $entityId, array $metadataEntry)
         // generate a dynamic hosted url
         if (preg_match('/__DYNAMIC(:[0-9]+)?__/', $entityId)) {
             $modifiedMetadataEntry['entityid'] = $this->getDynamicHostedUrl($metadataSet);
-        }
-        // set the entityid metadata array key to the provided entity id
-        else {
+        } else {
+            // set the entityid metadata array key to the provided entity id
             $modifiedMetadataEntry['entityid'] = $entityId;
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLBuilder.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLBuilder.php
index 929cb5ebf0..0752591beb 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLBuilder.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLBuilder.php
@@ -2,6 +2,31 @@
 
 namespace SimpleSAML\Metadata;
 
+use SAML2\Constants;
+use SAML2\XML\md\AttributeAuthorityDescriptor;
+use SAML2\XML\md\AttributeConsumingService;
+use SAML2\XML\md\EndpointType;
+use SAML2\XML\md\EntityDescriptor;
+use SAML2\XML\md\IDPSSODescriptor;
+use SAML2\XML\md\IndexedEndpointType;
+use SAML2\XML\md\Organization;
+use SAML2\XML\md\RequestedAttribute;
+use SAML2\XML\md\RoleDescriptor;
+use SAML2\XML\md\SPSSODescriptor;
+use SAML2\XML\mdattr\EntityAttributes;
+use SAML2\XML\mdrpi\RegistrationInfo;
+use SAML2\XML\mdui\DiscoHints;
+use SAML2\XML\mdui\Keywords;
+use SAML2\XML\mdui\Logo;
+use SAML2\XML\mdui\UIInfo;
+use SAML2\XML\saml\Attribute;
+use SAML2\XML\saml\AttributeValue;
+use SAML2\XML\shibmd\Scope;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Module\adfs\SAML2\XML\fed\SecurityTokenServiceType;
+use SimpleSAML\Utils;
+
 /**
  * Class for generating SAML 2.0 metadata from SimpleSAMLphp metadata arrays.
  *
@@ -40,9 +65,10 @@ class SAMLBuilder
      * Initialize the SAML builder.
      *
      * @param string   $entityId The entity id of the entity.
-     * @param double|null $maxCache The maximum time in seconds the metadata should be cached. Defaults to null
-     * @param double|null $maxDuration The maximum time in seconds this metadata should be considered valid. Defaults
+     * @param int|null $maxCache The maximum time in seconds the metadata should be cached. Defaults to null
+     * @param int|null $maxDuration The maximum time in seconds this metadata should be considered valid. Defaults
      * to null.
+     * @return void
      */
     public function __construct($entityId, $maxCache = null, $maxDuration = null)
     {
@@ -51,11 +77,15 @@ public function __construct($entityId, $maxCache = null, $maxDuration = null)
         $this->maxCache = $maxCache;
         $this->maxDuration = $maxDuration;
 
-        $this->entityDescriptor = new \SAML2\XML\md\EntityDescriptor();
+        $this->entityDescriptor = new EntityDescriptor();
         $this->entityDescriptor->setEntityID($entityId);
     }
 
 
+    /**
+     * @param array $metadata
+     * @return void
+     */
     private function setExpiration($metadata)
     {
         if (array_key_exists('expire', $metadata)) {
@@ -65,7 +95,7 @@ private function setExpiration($metadata)
         }
 
         if ($this->maxCache !== null) {
-            $this->entityDescriptor->setCacheDuration('PT'.$this->maxCache.'S');
+            $this->entityDescriptor->setCacheDuration('PT' . $this->maxCache . 'S');
         }
         if ($this->maxDuration !== null) {
             $this->entityDescriptor->setValidUntil(time() + $this->maxDuration);
@@ -102,7 +132,7 @@ public function getEntityDescriptorText($formatted = true)
 
         $xml = $this->getEntityDescriptor();
         if ($formatted) {
-            \SimpleSAML\Utils\XML::formatDOMElement($xml);
+            Utils\XML::formatDOMElement($xml);
         }
 
         return $xml->ownerDocument->saveXML();
@@ -113,6 +143,7 @@ public function getEntityDescriptorText($formatted = true)
      * Add a SecurityTokenServiceType for ADFS metadata.
      *
      * @param array $metadata The metadata with the information about the SecurityTokenServiceType.
+     * @return void
      */
     public function addSecurityTokenServiceType($metadata)
     {
@@ -120,9 +151,9 @@ public function addSecurityTokenServiceType($metadata)
         assert(isset($metadata['entityid']));
         assert(isset($metadata['metadata-set']));
 
-        $metadata = \SimpleSAML\Configuration::loadFromArray($metadata, $metadata['entityid']);
+        $metadata = Configuration::loadFromArray($metadata, $metadata['entityid']);
         $defaultEndpoint = $metadata->getDefaultEndpoint('SingleSignOnService');
-        $e = new \SimpleSAML\Module\adfs\SAML2\XML\fed\SecurityTokenServiceType();
+        $e = new SecurityTokenServiceType();
         $e->setLocation($defaultEndpoint['Location']);
 
         $this->addCertificate($e, $metadata);
@@ -136,30 +167,31 @@ public function addSecurityTokenServiceType($metadata)
      *
      * @param \SimpleSAML\Configuration    $metadata The metadata to get extensions from.
      * @param \SAML2\XML\md\RoleDescriptor $e Reference to the element where the Extensions element should be included.
+     * @return void
      */
-    private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\md\RoleDescriptor $e)
+    private function addExtensions(Configuration $metadata, RoleDescriptor $e)
     {
         if ($metadata->hasValue('tags')) {
-            $a = new \SAML2\XML\saml\Attribute();
+            $a = new Attribute();
             $a->setName('tags');
             foreach ($metadata->getArray('tags') as $tag) {
-                $a->addAttributeValue(new \SAML2\XML\saml\AttributeValue($tag));
+                $a->addAttributeValue(new AttributeValue($tag));
             }
             $e->setExtensions(array_merge($e->getExtensions(), [$a]));
         }
 
         if ($metadata->hasValue('hint.cidr')) {
-            $a = new \SAML2\XML\saml\Attribute();
+            $a = new Attribute();
             $a->setName('hint.cidr');
             foreach ($metadata->getArray('hint.cidr') as $hint) {
-                $a->addAttributeValue(new \SAML2\XML\saml\AttributeValue($hint));
+                $a->addAttributeValue(new AttributeValue($hint));
             }
             $e->setExtensions(array_merge($e->getExtensions(), [$a]));
         }
 
         if ($metadata->hasValue('scope')) {
             foreach ($metadata->getArray('scope') as $scopetext) {
-                $s = new \SAML2\XML\shibmd\Scope();
+                $s = new Scope();
                 $s->setScope($scopetext);
                 // Check whether $ ^ ( ) * | \ are in a scope -> assume regex.
                 if (1 === preg_match('/[\$\^\)\(\*\|\\\\]/', $scopetext)) {
@@ -172,9 +204,9 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
         }
 
         if ($metadata->hasValue('EntityAttributes')) {
-            $ea = new \SAML2\XML\mdattr\EntityAttributes();
+            $ea = new EntityAttributes();
             foreach ($metadata->getArray('EntityAttributes') as $attributeName => $attributeValues) {
-                $a = new \SAML2\XML\saml\Attribute();
+                $a = new Attribute();
                 $a->setName($attributeName);
                 $a->setNameFormat('urn:oasis:names:tc:SAML:2.0:attrname-format:uri');
 
@@ -182,12 +214,12 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
                 if (preg_match('/^\{(.*?)\}(.*)$/', $attributeName, $matches)) {
                     $a->setName($matches[2]);
                     $nameFormat = $matches[1];
-                    if ($nameFormat !== \SAML2\Constants::NAMEFORMAT_UNSPECIFIED) {
+                    if ($nameFormat !== Constants::NAMEFORMAT_UNSPECIFIED) {
                         $a->setNameFormat($nameFormat);
                     }
                 }
                 foreach ($attributeValues as $attributeValue) {
-                    $a->addAttributeValue(new \SAML2\XML\saml\AttributeValue($attributeValue));
+                    $a->addAttributeValue(new AttributeValue($attributeValue));
                 }
                 $ea->addChildren($a);
             }
@@ -197,7 +229,7 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
         }
 
         if ($metadata->hasValue('RegistrationInfo')) {
-            $ri = new \SAML2\XML\mdrpi\RegistrationInfo();
+            $ri = new RegistrationInfo();
             foreach ($metadata->getArray('RegistrationInfo') as $riName => $riValues) {
                 switch ($riName) {
                     case 'authority':
@@ -217,7 +249,7 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
         }
 
         if ($metadata->hasValue('UIInfo')) {
-            $ui = new \SAML2\XML\mdui\UIInfo();
+            $ui = new UIInfo();
             foreach ($metadata->getArray('UIInfo') as $uiName => $uiValues) {
                 switch ($uiName) {
                     case 'DisplayName':
@@ -234,7 +266,7 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
                         break;
                     case 'Keywords':
                         foreach ($uiValues as $lang => $keywords) {
-                            $uiItem = new \SAML2\XML\mdui\Keywords();
+                            $uiItem = new Keywords();
                             $uiItem->setLanguage($lang);
                             $uiItem->setKeywords($keywords);
                             $ui->addKeyword($uiItem);
@@ -242,7 +274,7 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
                         break;
                     case 'Logo':
                         foreach ($uiValues as $logo) {
-                            $uiItem = new \SAML2\XML\mdui\Logo();
+                            $uiItem = new Logo();
                             $uiItem->setUrl($logo['url']);
                             $uiItem->setWidth($logo['width']);
                             $uiItem->setHeight($logo['height']);
@@ -258,7 +290,7 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
         }
 
         if ($metadata->hasValue('DiscoHints')) {
-            $dh = new \SAML2\XML\mdui\DiscoHints();
+            $dh = new DiscoHints();
             foreach ($metadata->getArray('DiscoHints') as $dhName => $dhValues) {
                 switch ($dhName) {
                     case 'IPHint':
@@ -283,10 +315,11 @@ private function addExtensions(\SimpleSAML\Configuration $metadata, \SAML2\XML\m
      * @param array $orgName An array with the localized OrganizationName.
      * @param array $orgDisplayName An array with the localized OrganizationDisplayName.
      * @param array $orgURL An array with the localized OrganizationURL.
+     * @return void
      */
     public function addOrganization(array $orgName, array $orgDisplayName, array $orgURL)
     {
-        $org = new \SAML2\XML\md\Organization();
+        $org = new Organization();
 
         $org->setOrganizationName($orgName);
         $org->setOrganizationDisplayName($orgDisplayName);
@@ -300,10 +333,12 @@ public function addOrganization(array $orgName, array $orgDisplayName, array $or
      * Add an Organization element based on metadata array.
      *
      * @param array $metadata The metadata we should extract the organization information from.
+     * @return void
      */
     public function addOrganizationInfo(array $metadata)
     {
-        if (empty($metadata['OrganizationName']) ||
+        if (
+            empty($metadata['OrganizationName']) ||
             empty($metadata['OrganizationDisplayName']) ||
             empty($metadata['OrganizationURL'])
         ) {
@@ -311,9 +346,9 @@ public function addOrganizationInfo(array $metadata)
             return;
         }
 
-        $orgName = \SimpleSAML\Utils\Arrays::arrayize($metadata['OrganizationName'], 'en');
-        $orgDisplayName = \SimpleSAML\Utils\Arrays::arrayize($metadata['OrganizationDisplayName'], 'en');
-        $orgURL = \SimpleSAML\Utils\Arrays::arrayize($metadata['OrganizationURL'], 'en');
+        $orgName = Utils\Arrays::arrayize($metadata['OrganizationName'], 'en');
+        $orgDisplayName = Utils\Arrays::arrayize($metadata['OrganizationDisplayName'], 'en');
+        $orgURL = Utils\Arrays::arrayize($metadata['OrganizationURL'], 'en');
 
         $this->addOrganization($orgName, $orgDisplayName, $orgURL);
     }
@@ -336,25 +371,7 @@ private static function createEndpoints(array $endpoints, $indexed)
 
         foreach ($endpoints as &$ep) {
             if ($indexed) {
-                $t = new \SAML2\XML\md\IndexedEndpointType();
-            } else {
-                $t = new \SAML2\XML\md\EndpointType();
-            }
-
-            $t->setBinding($ep['Binding']);
-            $t->setLocation($ep['Location']);
-            if (isset($ep['ResponseLocation'])) {
-                $t->setResponseLocation($ep['ResponseLocation']);
-            }
-            if (isset($ep['hoksso:ProtocolBinding'])) {
-                $t->setAttributeNS(
-                    \SAML2\Constants::NS_HOK,
-                    'hoksso:ProtocolBinding',
-                    \SAML2\Constants::BINDING_HTTP_REDIRECT
-                );
-            }
-
-            if ($indexed) {
+                $t = new IndexedEndpointType();
                 if (!isset($ep['index'])) {
                     // Find the maximum index
                     $maxIndex = -1;
@@ -372,6 +389,21 @@ private static function createEndpoints(array $endpoints, $indexed)
                 }
 
                 $t->setIndex($ep['index']);
+            } else {
+                $t = new EndpointType();
+            }
+
+            $t->setBinding($ep['Binding']);
+            $t->setLocation($ep['Location']);
+            if (isset($ep['ResponseLocation'])) {
+                $t->setResponseLocation($ep['ResponseLocation']);
+            }
+            if (isset($ep['hoksso:ProtocolBinding'])) {
+                $t->setAttributeNS(
+                    Constants::NS_HOK,
+                    'hoksso:ProtocolBinding',
+                    Constants::BINDING_HTTP_REDIRECT
+                );
             }
 
             $ret[] = $t;
@@ -386,10 +418,11 @@ private static function createEndpoints(array $endpoints, $indexed)
      *
      * @param \SAML2\XML\md\SPSSODescriptor $spDesc The SPSSODescriptor element.
      * @param \SimpleSAML\Configuration     $metadata The metadata.
+     * @return void
      */
     private function addAttributeConsumingService(
-        \SAML2\XML\md\SPSSODescriptor $spDesc,
-        \SimpleSAML\Configuration $metadata
+        SPSSODescriptor $spDesc,
+        Configuration $metadata
     ) {
         $attributes = $metadata->getArray('attributes', []);
         $name = $metadata->getLocalizedString('name', null);
@@ -405,7 +438,7 @@ private function addAttributeConsumingService(
          * Add an AttributeConsumingService element with information as name and description and list
          * of requested attributes
          */
-        $attributeconsumer = new \SAML2\XML\md\AttributeConsumingService();
+        $attributeconsumer = new AttributeConsumingService();
 
         $attributeconsumer->setIndex($metadata->getInteger('attributes.index', 0));
 
@@ -416,14 +449,14 @@ private function addAttributeConsumingService(
         $attributeconsumer->setServiceName($name);
         $attributeconsumer->setServiceDescription($metadata->getLocalizedString('description', []));
 
-        $nameFormat = $metadata->getString('attributes.NameFormat', \SAML2\Constants::NAMEFORMAT_UNSPECIFIED);
+        $nameFormat = $metadata->getString('attributes.NameFormat', Constants::NAMEFORMAT_UNSPECIFIED);
         foreach ($attributes as $friendlyName => $attribute) {
-            $t = new \SAML2\XML\md\RequestedAttribute();
+            $t = new RequestedAttribute();
             $t->setName($attribute);
             if (!is_int($friendlyName)) {
                 $t->setFriendlyName($friendlyName);
             }
-            if ($nameFormat !== \SAML2\Constants::NAMEFORMAT_UNSPECIFIED) {
+            if ($nameFormat !== Constants::NAMEFORMAT_UNSPECIFIED) {
                 $t->setNameFormat($nameFormat);
             }
             if (in_array($attribute, $attributesrequired, true)) {
@@ -441,6 +474,7 @@ private function addAttributeConsumingService(
      *
      * @param string $set The metadata set this metadata comes from.
      * @param array  $metadata The metadata.
+     * @return void
      */
     public function addMetadata($set, $metadata)
     {
@@ -466,7 +500,7 @@ public function addMetadata($set, $metadata)
                 $this->addAttributeAuthority($metadata);
                 break;
             default:
-                \SimpleSAML\Logger::warning('Unable to generate metadata for unknown type \''.$set.'\'.');
+                Logger::warning('Unable to generate metadata for unknown type \'' . $set . '\'.');
         }
     }
 
@@ -476,17 +510,18 @@ public function addMetadata($set, $metadata)
      *
      * @param array $metadata The metadata.
      * @param array $protocols The protocols supported. Defaults to \SAML2\Constants::NS_SAMLP.
+     * @return void
      */
-    public function addMetadataSP20($metadata, $protocols = [\SAML2\Constants::NS_SAMLP])
+    public function addMetadataSP20($metadata, $protocols = [Constants::NS_SAMLP])
     {
         assert(is_array($metadata));
         assert(is_array($protocols));
         assert(isset($metadata['entityid']));
         assert(isset($metadata['metadata-set']));
 
-        $metadata = \SimpleSAML\Configuration::loadFromArray($metadata, $metadata['entityid']);
+        $metadata = Configuration::loadFromArray($metadata, $metadata['entityid']);
 
-        $e = new \SAML2\XML\md\SPSSODescriptor();
+        $e = new SPSSODescriptor();
         $e->setProtocolSupportEnumeration($protocols);
 
         if ($metadata->hasValue('saml20.sign.assertion')) {
@@ -510,7 +545,7 @@ public function addMetadataSP20($metadata, $protocols = [\SAML2\Constants::NS_SA
         $endpoints = $metadata->getEndpoints('AssertionConsumerService');
         foreach ($metadata->getArrayizeString('AssertionConsumerService.artifact', []) as $acs) {
             $endpoints[] = [
-                'Binding'  => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact',
+                'Binding'  => Constants::BINDING_HTTP_ARTIFACT,
                 'Location' => $acs,
             ];
         }
@@ -522,7 +557,7 @@ public function addMetadataSP20($metadata, $protocols = [\SAML2\Constants::NS_SA
 
         foreach ($metadata->getArray('contacts', []) as $contact) {
             if (array_key_exists('contactType', $contact) && array_key_exists('emailAddress', $contact)) {
-                $this->addContact($contact['contactType'], \SimpleSAML\Utils\Config\Metadata::getContact($contact));
+                $this->addContact($contact['contactType'], Utils\Config\Metadata::getContact($contact));
             }
         }
     }
@@ -532,6 +567,7 @@ public function addMetadataSP20($metadata, $protocols = [\SAML2\Constants::NS_SA
      * Add metadata of a SAML 2.0 identity provider.
      *
      * @param array $metadata The metadata.
+     * @return void
      */
     public function addMetadataIdP20($metadata)
     {
@@ -539,10 +575,10 @@ public function addMetadataIdP20($metadata)
         assert(isset($metadata['entityid']));
         assert(isset($metadata['metadata-set']));
 
-        $metadata = \SimpleSAML\Configuration::loadFromArray($metadata, $metadata['entityid']);
+        $metadata = Configuration::loadFromArray($metadata, $metadata['entityid']);
 
-        $e = new \SAML2\XML\md\IDPSSODescriptor();
-        $e->setProtocolSupportEnumeration(array_merge($e->getProtocolSupportEnumeration(), ['urn:oasis:names:tc:SAML:2.0:protocol']));
+        $e = new IDPSSODescriptor();
+        $e->setProtocolSupportEnumeration(array_merge($e->getProtocolSupportEnumeration(), [Constants::NS_SAMLP]));
 
         if ($metadata->hasValue('sign.authnrequest')) {
             $e->setWantAuthnRequestsSigned($metadata->getBoolean('sign.authnrequest'));
@@ -571,7 +607,7 @@ public function addMetadataIdP20($metadata)
 
         foreach ($metadata->getArray('contacts', []) as $contact) {
             if (array_key_exists('contactType', $contact) && array_key_exists('emailAddress', $contact)) {
-                $this->addContact($contact['contactType'], \SimpleSAML\Utils\Config\Metadata::getContact($contact));
+                $this->addContact($contact['contactType'], Utils\Config\Metadata::getContact($contact));
             }
         }
     }
@@ -581,6 +617,7 @@ public function addMetadataIdP20($metadata)
      * Add metadata of a SAML 1.1 service provider.
      *
      * @param array $metadata The metadata.
+     * @return void
      */
     public function addMetadataSP11($metadata)
     {
@@ -588,13 +625,15 @@ public function addMetadataSP11($metadata)
         assert(isset($metadata['entityid']));
         assert(isset($metadata['metadata-set']));
 
-        $metadata = \SimpleSAML\Configuration::loadFromArray($metadata, $metadata['entityid']);
+        $metadata = Configuration::loadFromArray($metadata, $metadata['entityid']);
 
-        $e = new \SAML2\XML\md\SPSSODescriptor();
-        $e->setProtocolSupportEnumeration(array_merge(
+        $e = new SPSSODescriptor();
+        $e->setProtocolSupportEnumeration(
+            array_merge(
                 $e->getProtocolSupportEnumeration(),
                 ['urn:oasis:names:tc:SAML:1.1:protocol']
-        ));
+            )
+        );
 
         $this->addCertificate($e, $metadata);
 
@@ -619,6 +658,7 @@ public function addMetadataSP11($metadata)
      * Add metadata of a SAML 1.1 identity provider.
      *
      * @param array $metadata The metadata.
+     * @return void
      */
     public function addMetadataIdP11($metadata)
     {
@@ -626,9 +666,9 @@ public function addMetadataIdP11($metadata)
         assert(isset($metadata['entityid']));
         assert(isset($metadata['metadata-set']));
 
-        $metadata = \SimpleSAML\Configuration::loadFromArray($metadata, $metadata['entityid']);
+        $metadata = Configuration::loadFromArray($metadata, $metadata['entityid']);
 
-        $e = new \SAML2\XML\md\IDPSSODescriptor();
+        $e = new IDPSSODescriptor();
         $e->setProtocolSupportEnumeration(
             array_merge($e->getProtocolSupportEnumeration(), [
                 'urn:oasis:names:tc:SAML:1.1:protocol',
@@ -651,6 +691,7 @@ public function addMetadataIdP11($metadata)
      *
      * @param array $metadata The AttributeAuthorityDescriptor, in the format returned by
      * \SimpleSAML\Metadata\SAMLParser.
+     * @return void
      */
     public function addAttributeAuthority(array $metadata)
     {
@@ -658,10 +699,10 @@ public function addAttributeAuthority(array $metadata)
         assert(isset($metadata['entityid']));
         assert(isset($metadata['metadata-set']));
 
-        $metadata = \SimpleSAML\Configuration::loadFromArray($metadata, $metadata['entityid']);
+        $metadata = Configuration::loadFromArray($metadata, $metadata['entityid']);
 
-        $e = new \SAML2\XML\md\AttributeAuthorityDescriptor();
-        $e->setProtocolSupportEnumeration($metadata->getArray('protocols', [\SAML2\Constants::NS_SAMLP]));
+        $e = new AttributeAuthorityDescriptor();
+        $e->setProtocolSupportEnumeration($metadata->getArray('protocols', [Constants::NS_SAMLP]));
 
         $this->addExtensions($metadata, $e);
         $this->addCertificate($e, $metadata);
@@ -688,6 +729,7 @@ public function addAttributeAuthority(array $metadata)
      * @param string $type The type of contact. Deprecated.
      * @param array  $details The details about the contact.
      *
+     * @return void
      * @todo Change the signature to remove $type.
      * @todo Remove the capability to pass a name and parse it inside the method.
      */
@@ -698,7 +740,7 @@ public function addContact($type, $details)
         assert(in_array($type, ['technical', 'support', 'administrative', 'billing', 'other'], true));
 
         // TODO: remove this check as soon as getContact() is called always before calling this function
-        $details = \SimpleSAML\Utils\Config\Metadata::getContact($details);
+        $details = Utils\Config\Metadata::getContact($details);
 
         $e = new \SAML2\XML\md\ContactPerson();
         $e->setContactType($type);
@@ -747,8 +789,9 @@ public function addContact($type, $details)
      * @param \SAML2\XML\md\RoleDescriptor $rd The RoleDescriptor the certificate should be added to.
      * @param string                      $use The value of the 'use' attribute.
      * @param string                      $x509data The certificate data.
+     * @return void
      */
-    private function addX509KeyDescriptor(\SAML2\XML\md\RoleDescriptor $rd, $use, $x509data)
+    private function addX509KeyDescriptor(RoleDescriptor $rd, $use, $x509data)
     {
         assert(in_array($use, ['encryption', 'signing'], true));
         assert(is_string($x509data));
@@ -766,8 +809,9 @@ private function addX509KeyDescriptor(\SAML2\XML\md\RoleDescriptor $rd, $use, $x
      *
      * @param \SAML2\XML\md\RoleDescriptor $rd The RoleDescriptor the certificate should be added to.
      * @param \SimpleSAML\Configuration    $metadata The metadata of the entity.
+     * @return void
      */
-    private function addCertificate(\SAML2\XML\md\RoleDescriptor $rd, \SimpleSAML\Configuration $metadata)
+    private function addCertificate(RoleDescriptor $rd, Configuration $metadata)
     {
         $keys = $metadata->getPublicKeys();
         foreach ($keys as $key) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLParser.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLParser.php
index cfced57c9e..2c8fb8fb9d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLParser.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLParser.php
@@ -2,7 +2,37 @@
 
 namespace SimpleSAML\Metadata;
 
+use DOMDocument;
+use RobRichards\XMLSecLibs\XMLSecurityDSig;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use SAML2\Constants;
+use SAML2\DOMDocumentFactory;
+use SAML2\XML\Chunk;
+use SAML2\XML\ds\X509Certificate;
+use SAML2\XML\ds\X509Data;
+use SAML2\XML\md\AttributeAuthorityDescriptor;
+use SAML2\XML\md\AttributeConsumingService;
+use SAML2\XML\md\ContactPerson;
+use SAML2\XML\md\EndpointType;
+use SAML2\XML\md\EntityDescriptor;
+use SAML2\XML\md\EntitiesDescriptor;
+use SAML2\XML\md\IDPSSODescriptor;
+use SAML2\XML\md\IndexedEndpointType;
+use SAML2\XML\md\KeyDescriptor;
+use SAML2\XML\md\Organization;
+use SAML2\XML\md\RoleDescriptor;
+use SAML2\XML\md\SPSSODescriptor;
+use SAML2\XML\md\SSODescriptorType;
+use SAML2\XML\mdattr\EntityAttributes;
+use SAML2\XML\mdrpi\RegistrationInfo;
+use SAML2\XML\mdui\DiscoHints;
+use SAML2\XML\mdui\Keywords;
+use SAML2\XML\mdui\Logo;
+use SAML2\XML\mdui\UIInfo;
+use SAML2\XML\saml\Attribute;
+use SAML2\XML\shibmd\Scope;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
 
 /**
  * This is class for parsing of SAML 1.x and SAML 2.0 metadata.
@@ -34,7 +64,7 @@ class SAMLParser
      * @var string[]
      */
     private static $SAML20Protocols = [
-        'urn:oasis:names:tc:SAML:2.0:protocol',
+        Constants::NS_SAMLP,
     ];
 
     /**
@@ -141,6 +171,7 @@ class SAMLParser
      */
     private $entityDescriptor;
 
+
     /**
      * This is the constructor for the SAMLParser class.
      *
@@ -151,7 +182,7 @@ class SAMLParser
      * @param array                         $parentExtensions An optional array of extensions from the parent element.
      */
     private function __construct(
-        \SAML2\XML\md\EntityDescriptor $entityElement,
+        EntityDescriptor $entityElement,
         $maxExpireTime,
         array $validators = [],
         array $parentExtensions = []
@@ -180,17 +211,18 @@ private function __construct(
 
         // look over the RoleDescriptors
         foreach ($entityElement->getRoleDescriptor() as $child) {
-            if ($child instanceof \SAML2\XML\md\SPSSODescriptor) {
+            if ($child instanceof SPSSODescriptor) {
                 $this->processSPSSODescriptor($child, $expireTime);
-            } elseif ($child instanceof \SAML2\XML\md\IDPSSODescriptor) {
+            } elseif ($child instanceof IDPSSODescriptor) {
                 $this->processIDPSSODescriptor($child, $expireTime);
-            } elseif ($child instanceof \SAML2\XML\md\AttributeAuthorityDescriptor) {
+            } elseif ($child instanceof AttributeAuthorityDescriptor) {
                 $this->processAttributeAuthorityDescriptor($child, $expireTime);
             }
         }
 
-        if ($entityElement->getOrganization() !== null) {
-            $this->processOrganization($entityElement->getOrganization());
+        $organization = $entityElement->getOrganization();
+        if ($organization !== null) {
+            $this->processOrganization($organization);
         }
 
         if ($entityElement->getContactPerson() !== []) {
@@ -207,16 +239,17 @@ private function __construct(
      * @param string $file The path to the file which contains the metadata.
      *
      * @return SAMLParser An instance of this class with the metadata loaded.
-     * @throws Exception If the file does not parse as XML.
+     * @throws \Exception If the file does not parse as XML.
      */
     public static function parseFile($file)
     {
-        $data = \SimpleSAML\Utils\HTTP::fetch($file);
+        /** @var string $data */
+        $data = Utils\HTTP::fetch($file);
 
         try {
-            $doc = \SAML2\DOMDocumentFactory::fromString($data);
+            $doc = DOMDocumentFactory::fromString($data);
         } catch (\Exception $e) {
-            throw new \Exception('Failed to read XML from file: '.$file);
+            throw new \Exception('Failed to read XML from file: ' . $file);
         }
 
         return self::parseDocument($doc);
@@ -229,12 +262,12 @@ public static function parseFile($file)
      * @param string $metadata A string which contains XML encoded metadata.
      *
      * @return SAMLParser An instance of this class with the metadata loaded.
-     * @throws Exception If the string does not parse as XML.
+     * @throws \Exception If the string does not parse as XML.
      */
     public static function parseString($metadata)
     {
         try {
-            $doc = \SAML2\DOMDocumentFactory::fromString($metadata);
+            $doc = DOMDocumentFactory::fromString($metadata);
         } catch (\Exception $e) {
             throw new \Exception('Failed to parse XML string.');
         }
@@ -252,7 +285,7 @@ public static function parseString($metadata)
      */
     public static function parseDocument($document)
     {
-        assert($document instanceof \DOMDocument);
+        assert($document instanceof DOMDocument);
 
         $entityElement = self::findEntityDescriptor($document);
 
@@ -270,7 +303,7 @@ public static function parseDocument($document)
      */
     public static function parseElement($entityElement)
     {
-        assert($entityElement instanceof \SAML2\XML\md\EntityDescriptor);
+        assert($entityElement instanceof EntityDescriptor);
         return new SAMLParser($entityElement, null, []);
     }
 
@@ -281,7 +314,7 @@ public static function parseElement($entityElement)
      * the file contains a single EntityDescriptorElement, then the array will contain a single SAMLParser
      * instance.
      *
-     * @param string $file The path to the file which contains the EntityDescriptor or EntitiesDescriptor element.
+     * @param string|null $file The path to the file which contains the EntityDescriptor or EntitiesDescriptor element.
      *
      * @return SAMLParser[] An array of SAMLParser instances.
      * @throws \Exception If the file does not parse as XML.
@@ -292,16 +325,13 @@ public static function parseDescriptorsFile($file)
             throw new \Exception('Cannot open file NULL. File name not specified.');
         }
 
-        $data = \SimpleSAML\Utils\HTTP::fetch($file);
+        /** @var string $data */
+        $data = Utils\HTTP::fetch($file);
 
         try {
-            $doc = \SAML2\DOMDocumentFactory::fromString($data);
+            $doc = DOMDocumentFactory::fromString($data);
         } catch (\Exception $e) {
-            throw new \Exception('Failed to read XML from file: '.$file);
-        }
-
-        if ($doc->documentElement === null) {
-            throw new \Exception('Opened file is not an XML document: '.$file);
+            throw new \Exception('Failed to read XML from file: ' . $file);
         }
 
         return self::parseDescriptorsElement($doc->documentElement);
@@ -322,7 +352,7 @@ public static function parseDescriptorsFile($file)
     public static function parseDescriptorsString($string)
     {
         try {
-            $doc = \SAML2\DOMDocumentFactory::fromString($string);
+            $doc = DOMDocumentFactory::fromString($string);
         } catch (\Exception $e) {
             throw new \Exception('Failed to parse XML string.');
         }
@@ -348,12 +378,12 @@ public static function parseDescriptorsElement(\DOMElement $element = null)
             throw new \Exception('Document was empty.');
         }
 
-        if (\SimpleSAML\Utils\XML::isDOMNodeOfType($element, 'EntityDescriptor', '@md') === true) {
-            return self::processDescriptorsElement(new \SAML2\XML\md\EntityDescriptor($element));
-        } elseif (\SimpleSAML\Utils\XML::isDOMNodeOfType($element, 'EntitiesDescriptor', '@md') === true) {
-            return self::processDescriptorsElement(new \SAML2\XML\md\EntitiesDescriptor($element));
+        if (Utils\XML::isDOMNodeOfType($element, 'EntityDescriptor', '@md') === true) {
+            return self::processDescriptorsElement(new EntityDescriptor($element));
+        } elseif (Utils\XML::isDOMNodeOfType($element, 'EntitiesDescriptor', '@md') === true) {
+            return self::processDescriptorsElement(new EntitiesDescriptor($element));
         } else {
-            throw new \Exception('Unexpected root node: ['.$element->namespaceURI.']:'.$element->localName);
+            throw new \Exception('Unexpected root node: [' . $element->namespaceURI . ']:' . $element->localName);
         }
     }
 
@@ -361,12 +391,9 @@ public static function parseDescriptorsElement(\DOMElement $element = null)
     /**
      *
      * @param \SAML2\XML\md\EntityDescriptor|\SAML2\XML\md\EntitiesDescriptor $element The element we should process.
-     * @param int|NULL                                                      $maxExpireTime The maximum expiration time
-     *     of the entities.
-     * @param array                                                         $validators The parent-elements that may be
-     *     signed.
-     * @param array                                                         $parentExtensions An optional array of
-     *     extensions from the parent element.
+     * @param int|NULL              $maxExpireTime The maximum expiration time of the entities.
+     * @param array                 $validators The parent-elements that may be signed.
+     * @param array                 $parentExtensions An optional array of extensions from the parent element.
      *
      * @return SAMLParser[] Array of SAMLParser instances.
      */
@@ -378,14 +405,14 @@ private static function processDescriptorsElement(
     ) {
         assert($maxExpireTime === null || is_int($maxExpireTime));
 
-        if ($element instanceof \SAML2\XML\md\EntityDescriptor) {
+        if ($element instanceof EntityDescriptor) {
             $ret = new SAMLParser($element, $maxExpireTime, $validators, $parentExtensions);
             $ret = [$ret->getEntityId() => $ret];
             /** @var SAMLParser[] $ret */
             return $ret;
         }
 
-        assert($element instanceof \SAML2\XML\md\EntitiesDescriptor);
+        assert($element instanceof EntitiesDescriptor);
 
         $extensions = self::processExtensions($element, $parentExtensions);
         $expTime = self::getExpireTime($element, $maxExpireTime);
@@ -408,9 +435,9 @@ private static function processDescriptorsElement(
      * how long a given XML-element is valid. It returns this as a unix timestamp.
      *
      * @param mixed    $element The element we should determine the expiry time of.
-     * @param int|NULL $maxExpireTime The maximum expiration time.
+     * @param int|null $maxExpireTime The maximum expiration time.
      *
-     * @return int The unix timestamp for when the element should expire. Will be NULL if no
+     * @return int|null The unix timestamp for when the element should expire. Will be NULL if no
      *             limit is set for the element.
      */
     private static function getExpireTime($element, $maxExpireTime)
@@ -437,6 +464,9 @@ public function getEntityId()
     }
 
 
+    /**
+     * @return array
+     */
     private function getMetadataCommon()
     {
         $ret = [];
@@ -469,6 +499,7 @@ private function getMetadataCommon()
      *
      * @param array &$metadata The metadata that should be updated.
      * @param array $roleDescriptor The parsed role descriptor.
+     * @return void
      */
     private function addExtensions(array &$metadata, array $roleDescriptor)
     {
@@ -494,7 +525,7 @@ private function addExtensions(array &$metadata, array $roleDescriptor)
             $metadata['EntityAttributes'] = $this->entityAttributes;
 
             // check for entity categories
-            if (\SimpleSAML\Utils\Config\Metadata::isHiddenFromDiscovery($metadata)) {
+            if (Utils\Config\Metadata::isHiddenFromDiscovery($metadata)) {
                 $metadata['hide.from.discovery'] = true;
             }
         }
@@ -519,7 +550,8 @@ private function addExtensions(array &$metadata, array $roleDescriptor)
      *
      * Metadata must be loaded with one of the parse functions before this function can be called.
      *
-     * @return array An associative array with metadata or NULL if we are unable to generate metadata for a SAML 1.x SP.
+     * @return array|null An associative array with metadata or NULL if we are unable to
+     *   generate metadata for a SAML 1.x SP.
      */
     public function getMetadata1xSP()
     {
@@ -592,8 +624,8 @@ public function getMetadata1xSP()
      *
      * Metadata must be loaded with one of the parse functions before this function can be called.
      *
-     * @return array An associative array with metadata or NULL if we are unable to generate metadata for a SAML 1.x
-     *     IdP.
+     * @return array|null An associative array with metadata or NULL if we are unable to
+     *   generate metadata for a SAML 1.x IdP.
      */
     public function getMetadata1xIdP()
     {
@@ -649,7 +681,8 @@ public function getMetadata1xIdP()
      *
      * Metadata must be loaded with one of the parse functions before this function can be called.
      *
-     * @return array An associative array with metadata or NULL if we are unable to generate metadata for a SAML 2.x SP.
+     * @return array|null An associative array with metadata or NULL if we are unable to
+     *   generate metadata for a SAML 2.x SP.
      */
     public function getMetadata20SP()
     {
@@ -680,7 +713,7 @@ public function getMetadata20SP()
 
         // find the NameIDFormat. This may not exist
         if (count($spd['nameIDFormats']) > 0) {
-            // SimpleSAMLphp currently only supports a single NameIDFormat pr. SP. We use the first one
+            // SimpleSAMLphp currently only supports a single NameIDFormat per SP. We use the first one
             $ret['NameIDFormat'] = $spd['nameIDFormats'][0];
         }
 
@@ -751,8 +784,8 @@ public function getMetadata20SP()
      *
      * Metadata must be loaded with one of the parse functions before this function can be called.
      *
-     * @return array An associative array with metadata or NULL if we are unable to generate metadata for a SAML 2.0
-     *     IdP.
+     * @return array|null An associative array with metadata or NULL if we are unable to
+     *   generate metadata for a SAML 2.0 IdP.
      */
     public function getMetadata20IdP()
     {
@@ -827,12 +860,12 @@ public function getAttributeAuthorities()
      * - 'keys': Array of associative arrays with the elements from parseKeyDescriptor.
      *
      * @param \SAML2\XML\md\RoleDescriptor $element The element we should extract metadata from.
-     * @param int|NULL                    $expireTime The unix timestamp for when this element should expire, or
+     * @param int|null $expireTime The unix timestamp for when this element should expire, or
      *                             NULL if unknown.
      *
      * @return array An associative array with metadata we have extracted from this element.
      */
-    private static function parseRoleDescriptorType(\SAML2\XML\md\RoleDescriptor $element, $expireTime)
+    private static function parseRoleDescriptorType(RoleDescriptor $element, $expireTime)
     {
         assert($expireTime === null || is_int($expireTime));
 
@@ -883,7 +916,7 @@ private static function parseRoleDescriptorType(\SAML2\XML\md\RoleDescriptor $el
      *
      * @return array An associative array with metadata we have extracted from this element.
      */
-    private static function parseSSODescriptor(\SAML2\XML\md\SSODescriptorType $element, $expireTime)
+    private static function parseSSODescriptor(SSODescriptorType $element, $expireTime)
     {
         assert($expireTime === null || is_int($expireTime));
 
@@ -909,8 +942,9 @@ private static function parseSSODescriptor(\SAML2\XML\md\SSODescriptorType $elem
      * @param \SAML2\XML\md\SPSSODescriptor $element The element which should be parsed.
      * @param int|NULL                     $expireTime The unix timestamp for when this element should expire, or
      *                             NULL if unknown.
+     * @return void
      */
-    private function processSPSSODescriptor(\SAML2\XML\md\SPSSODescriptor $element, $expireTime)
+    private function processSPSSODescriptor(SPSSODescriptor $element, $expireTime)
     {
         assert($expireTime === null || is_int($expireTime));
 
@@ -945,8 +979,9 @@ private function processSPSSODescriptor(\SAML2\XML\md\SPSSODescriptor $element,
      * @param \SAML2\XML\md\IDPSSODescriptor $element The element which should be parsed.
      * @param int|NULL                      $expireTime The unix timestamp for when this element should expire, or
      *                             NULL if unknown.
+     * @return void
      */
-    private function processIDPSSODescriptor(\SAML2\XML\md\IDPSSODescriptor $element, $expireTime)
+    private function processIDPSSODescriptor(IDPSSODescriptor $element, $expireTime)
     {
         assert($expireTime === null || is_int($expireTime));
 
@@ -971,9 +1006,10 @@ private function processIDPSSODescriptor(\SAML2\XML\md\IDPSSODescriptor $element
      * @param \SAML2\XML\md\AttributeAuthorityDescriptor $element The element which should be parsed.
      * @param int|NULL                                  $expireTime The unix timestamp for when this element should
      *     expire, or NULL if unknown.
+     * @return void
      */
     private function processAttributeAuthorityDescriptor(
-        \SAML2\XML\md\AttributeAuthorityDescriptor $element,
+        AttributeAuthorityDescriptor $element,
         $expireTime
     ) {
         assert($expireTime === null || is_int($expireTime));
@@ -1011,35 +1047,45 @@ private static function processExtensions($element, $parentExtensions = [])
         ];
 
         // Some extensions may get inherited from a parent element
-        if (($element instanceof \SAML2\XML\md\EntityDescriptor || $element instanceof \SAML2\XML\md\EntitiesDescriptor)
-                && !empty($parentExtensions['RegistrationInfo'])) {
+        if (
+            ($element instanceof EntityDescriptor
+            || $element instanceof EntitiesDescriptor)
+            && !empty($parentExtensions['RegistrationInfo'])
+        ) {
             $ret['RegistrationInfo'] = $parentExtensions['RegistrationInfo'];
         }
 
         foreach ($element->getExtensions() as $e) {
-            if ($e instanceof \SAML2\XML\shibmd\Scope) {
+            if ($e instanceof Scope) {
                 $ret['scope'][] = $e->getScope();
                 continue;
             }
 
             // Entity Attributes are only allowed at entity level extensions and not at RoleDescriptor level
-            if ($element instanceof \SAML2\XML\md\EntityDescriptor ||
-                $element instanceof \SAML2\XML\md\EntitiesDescriptor) {
-                if ($e instanceof \SAML2\XML\mdrpi\RegistrationInfo) {
+            if (
+                $element instanceof EntityDescriptor
+                || $element instanceof EntitiesDescriptor
+            ) {
+                if ($e instanceof RegistrationInfo) {
                     // Registration Authority cannot be overridden (warn only if override attempts to change the value)
-                    if (isset($ret['RegistrationInfo']['registrationAuthority'])
-                        && $ret['RegistrationInfo']['registrationAuthority'] !== $e->getRegistrationAuthority()) {
-                        \SimpleSAML\Logger::warning('Invalid attempt to override registrationAuthority \''.
-                            $ret['RegistrationInfo']['registrationAuthority']."' with '{$e->getRegistrationAuthority()}'");
+                    if (
+                        isset($ret['RegistrationInfo']['registrationAuthority'])
+                        && $ret['RegistrationInfo']['registrationAuthority'] !== $e->getRegistrationAuthority()
+                    ) {
+                        Logger::warning(
+                            'Invalid attempt to override registrationAuthority \''
+                            . $ret['RegistrationInfo']['registrationAuthority']
+                            . "' with '{$e->getRegistrationAuthority()}'"
+                        );
                     } else {
                         $ret['RegistrationInfo']['registrationAuthority'] = $e->getRegistrationAuthority();
                     }
                 }
-                if ($e instanceof \SAML2\XML\mdattr\EntityAttributes && !empty($e->getChildren())) {
+                if ($e instanceof EntityAttributes && !empty($e->getChildren())) {
                     foreach ($e->getChildren() as $attr) {
                         // only saml:Attribute are currently supported here. The specifications also allows
                         // saml:Assertions, which more complex processing
-                        if ($attr instanceof \SAML2\XML\saml\Attribute) {
+                        if ($attr instanceof Attribute) {
                             $attrName = $attr->getName();
                             $attrNameFormat = $attr->getNameFormat();
                             $attrValue = $attr->getAttributeValue();
@@ -1051,9 +1097,9 @@ private static function processExtensions($element, $parentExtensions = [])
                             // attribute names that is not URI is prefixed as this: '{nameformat}name'
                             $name = $attrName;
                             if ($attrNameFormat === null) {
-                                $name = '{'.\SAML2\Constants::NAMEFORMAT_UNSPECIFIED.'}'.$attr->getName();
-                            } elseif ($attrNameFormat !== 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri') {
-                                $name = '{'.$attrNameFormat.'}'.$attrName;
+                                $name = '{' . Constants::NAMEFORMAT_UNSPECIFIED . '}' . $attr->getName();
+                            } elseif ($attrNameFormat !== Constants::NAMEFORMAT_URI) {
+                                $name = '{' . $attrNameFormat . '}' . $attrName;
                             }
 
                             $values = [];
@@ -1068,24 +1114,24 @@ private static function processExtensions($element, $parentExtensions = [])
             }
 
             // UIInfo elements are only allowed at RoleDescriptor level extensions
-            if ($element instanceof \SAML2\XML\md\RoleDescriptor) {
-                if ($e instanceof \SAML2\XML\mdui\UIInfo) {
+            if ($element instanceof RoleDescriptor) {
+                if ($e instanceof UIInfo) {
                     $ret['UIInfo']['DisplayName'] = $e->getDisplayName();
                     $ret['UIInfo']['Description'] = $e->getDescription();
                     $ret['UIInfo']['InformationURL'] = $e->getInformationURL();
                     $ret['UIInfo']['PrivacyStatementURL'] = $e->getPrivacyStatementURL();
 
                     foreach ($e->getKeywords() as $uiItem) {
-                        if (!($uiItem instanceof \SAML2\XML\mdui\Keywords)
-                            || ($uiItem->getKeywords() === [])
-                            || ($uiItem->getLanguage() === null)
-                        ) {
+                        $keywords = $uiItem->getKeywords();
+                        $language = $uiItem->getLanguage();
+                        if (($keywords === []) || ($language === null)) {
                             continue;
                         }
-                        $ret['UIInfo']['Keywords'][$uiItem->getLanguage()] = $uiItem->getKeywords();
+                        $ret['UIInfo']['Keywords'][$language] = $keywords;
                     }
                     foreach ($e->getLogo() as $uiItem) {
-                        if (!($uiItem instanceof \SAML2\XML\mdui\Logo)
+                        if (
+                            !($uiItem instanceof Logo)
                             || ($uiItem->getUrl() === null)
                             || ($uiItem->getHeight() === null)
                             || ($uiItem->getWidth() === null)
@@ -1106,25 +1152,25 @@ private static function processExtensions($element, $parentExtensions = [])
             }
 
             // DiscoHints elements are only allowed at IDPSSODescriptor level extensions
-            if ($element instanceof \SAML2\XML\md\IDPSSODescriptor) {
-                if ($e instanceof \SAML2\XML\mdui\DiscoHints) {
+            if ($element instanceof IDPSSODescriptor) {
+                if ($e instanceof DiscoHints) {
                     $ret['DiscoHints']['IPHint'] = $e->getIPHint();
                     $ret['DiscoHints']['DomainHint'] = $e->getDomainHint();
                     $ret['DiscoHints']['GeolocationHint'] = $e->getGeolocationHint();
                 }
             }
 
-            if (!($e instanceof \SAML2\XML\Chunk)) {
+            if (!($e instanceof Chunk)) {
                 continue;
             }
 
-            if ($e->getLocalName() === 'Attribute' && $e->getNamespaceURI() === \SAML2\Constants::NS_SAML) {
+            if ($e->getLocalName() === 'Attribute' && $e->getNamespaceURI() === Constants::NS_SAML) {
                 $attribute = $e->getXML();
 
                 $name = $attribute->getAttribute('Name');
                 $values = array_map(
                     ['\SimpleSAML\Utils\XML', 'getDOMText'],
-                    \SimpleSAML\Utils\XML::getDOMChildren($attribute, 'AttributeValue', '@saml2')
+                    Utils\XML::getDOMChildren($attribute, 'AttributeValue', '@saml2')
                 );
 
                 if ($name === 'tags') {
@@ -1144,8 +1190,9 @@ private static function processExtensions($element, $parentExtensions = [])
      * Parse and process a Organization element.
      *
      * @param \SAML2\XML\md\Organization $element The Organization element.
+     * @return void
      */
-    private function processOrganization(\SAML2\XML\md\Organization $element)
+    private function processOrganization(Organization $element)
     {
         $this->organizationName = $element->getOrganizationName();
         $this->organizationDisplayName = $element->getOrganizationDisplayName();
@@ -1157,9 +1204,9 @@ private function processOrganization(\SAML2\XML\md\Organization $element)
      * Parse and process a ContactPerson element.
      *
      * @param \SAML2\XML\md\ContactPerson $element The ContactPerson element.
+     * @return void
      */
-
-    private function processContactPerson(\SAML2\XML\md\ContactPerson $element)
+    private function processContactPerson(ContactPerson $element)
     {
         $contactPerson = [];
         if ($element->getContactType() !== '') {
@@ -1172,7 +1219,7 @@ private function processContactPerson(\SAML2\XML\md\ContactPerson $element)
             $contactPerson['givenName'] = $element->getGivenName();
         }
         if ($element->getSurName() !== null) {
-            $contactPerson['surName'] = $element->SurName;
+            $contactPerson['surName'] = $element->getSurName();
         }
         if ($element->getEmailAddress() !== []) {
             $contactPerson['emailAddress'] = $element->getEmailAddress();
@@ -1191,8 +1238,9 @@ private function processContactPerson(\SAML2\XML\md\ContactPerson $element)
      *
      * @param \SAML2\XML\md\AttributeConsumingService $element The AttributeConsumingService to parse.
      * @param array $sp The array with the SP's metadata.
+     * @return void
      */
-    private static function parseAttributeConsumerService(\SAML2\XML\md\AttributeConsumingService $element, &$sp)
+    private static function parseAttributeConsumerService(AttributeConsumingService $element, &$sp)
     {
         assert(is_array($sp));
 
@@ -1213,13 +1261,13 @@ private static function parseAttributeConsumerService(\SAML2\XML\md\AttributeCon
             if ($child->getNameFormat() !== null) {
                 $attrformat = $child->getNameFormat();
             } else {
-                $attrformat = \SAML2\Constants::NAMEFORMAT_UNSPECIFIED;
+                $attrformat = Constants::NAMEFORMAT_UNSPECIFIED;
             }
 
             if ($format === null) {
                 $format = $attrformat;
             } elseif ($format !== $attrformat) {
-                $format = \SAML2\Constants::NAMEFORMAT_UNSPECIFIED;
+                $format = Constants::NAMEFORMAT_UNSPECIFIED;
             }
         }
 
@@ -1231,7 +1279,7 @@ private static function parseAttributeConsumerService(\SAML2\XML\md\AttributeCon
             unset($sp['attributes.required']);
         }
 
-        if ($format !== \SAML2\Constants::NAMEFORMAT_UNSPECIFIED && $format !== null) {
+        if ($format !== Constants::NAMEFORMAT_UNSPECIFIED && $format !== null) {
             $sp['attributes.NameFormat'] = $format;
         }
     }
@@ -1251,7 +1299,7 @@ private static function parseAttributeConsumerService(\SAML2\XML\md\AttributeCon
      *
      * @return array An associative array with the data we have extracted from the element.
      */
-    private static function parseGenericEndpoint(\SAML2\XML\md\EndpointType $element)
+    private static function parseGenericEndpoint(EndpointType $element)
     {
         $ep = [];
 
@@ -1262,7 +1310,7 @@ private static function parseGenericEndpoint(\SAML2\XML\md\EndpointType $element
             $ep['ResponseLocation'] = $element->getResponseLocation();
         }
 
-        if ($element instanceof \SAML2\XML\md\IndexedEndpointType) {
+        if ($element instanceof IndexedEndpointType) {
             $ep['index'] = $element->getIndex();
 
             if ($element->getIsDefault() !== null) {
@@ -1301,7 +1349,7 @@ private static function extractEndpoints(array $endpoints)
      *
      * @return array|null An associative array describing the key, or null if this is an unsupported key.
      */
-    private static function parseKeyDescriptor(\SAML2\XML\md\KeyDescriptor $kd)
+    private static function parseKeyDescriptor(KeyDescriptor $kd)
     {
         $r = [];
 
@@ -1319,9 +1367,9 @@ private static function parseKeyDescriptor(\SAML2\XML\md\KeyDescriptor $kd)
         $keyInfo = $kd->getKeyInfo();
 
         foreach ($keyInfo->getInfo() as $i) {
-            if ($i instanceof \SAML2\XML\ds\X509Data) {
+            if ($i instanceof X509Data) {
                 foreach ($i->getData() as $d) {
-                    if ($d instanceof \SAML2\XML\ds\X509Certificate) {
+                    if ($d instanceof X509Certificate) {
                         $r['type'] = 'X509Certificate';
                         $r['X509Certificate'] = $d->getCertificate();
                         return $r;
@@ -1337,7 +1385,7 @@ private static function parseKeyDescriptor(\SAML2\XML\md\KeyDescriptor $kd)
     /**
      * This function finds SP descriptors which supports one of the given protocols.
      *
-     * @param $protocols Array with the protocols we accept.
+     * @param array $protocols Array with the protocols we accept.
      *
      * @return array with SP descriptors which supports one of the given protocols.
      */
@@ -1361,7 +1409,7 @@ private function getSPDescriptors($protocols)
     /**
      * This function finds IdP descriptors which supports one of the given protocols.
      *
-     * @param $protocols Array with the protocols we accept.
+     * @param array $protocols Array with the protocols we accept.
      *
      * @return array with IdP descriptors which supports one of the given protocols.
      */
@@ -1395,20 +1443,16 @@ private function getIdPDescriptors($protocols)
      */
     private static function findEntityDescriptor($doc)
     {
-        assert($doc instanceof \DOMDocument);
+        assert($doc instanceof DOMDocument);
 
         // find the EntityDescriptor DOMElement. This should be the first (and only) child of the DOMDocument
         $ed = $doc->documentElement;
 
-        if ($ed === null) {
-            throw new \Exception('Failed to load SAML metadata from empty XML document.');
-        }
-
-        if (\SimpleSAML\Utils\XML::isDOMNodeOfType($ed, 'EntityDescriptor', '@md') === false) {
+        if (Utils\XML::isDOMNodeOfType($ed, 'EntityDescriptor', '@md') === false) {
             throw new \Exception('Expected first element in the metadata document to be an EntityDescriptor element.');
         }
 
-        return new \SAML2\XML\md\EntityDescriptor($ed);
+        return new EntityDescriptor($ed);
     }
 
 
@@ -1419,16 +1463,16 @@ private static function findEntityDescriptor($doc)
      *                      to do a key rollover.
      *
      * @return boolean True if it is possible to check the signature with the certificate, false otherwise.
-     * @throws Exception If the certificate file cannot be found.
+     * @throws \Exception If the certificate file cannot be found.
      */
     public function validateSignature($certificates)
     {
         foreach ($certificates as $cert) {
             assert(is_string($cert));
-            $certFile = \SimpleSAML\Utils\Config::getCertPath($cert);
+            $certFile = Utils\Config::getCertPath($cert);
             if (!file_exists($certFile)) {
                 throw new \Exception(
-                    'Could not find certificate file ['.$certFile.'], which is needed to validate signature'
+                    'Could not find certificate file [' . $certFile . '], which is needed to validate signature'
                 );
             }
             $certData = file_get_contents($certFile);
@@ -1445,21 +1489,59 @@ public function validateSignature($certificates)
                 }
             }
         }
-        \SimpleSAML\Logger::debug('Could not validate signature');
+        Logger::debug('Could not validate signature');
         return false;
     }
 
 
+    /**
+     * @param string $algorithm
+     * @param string $data
+     * @throws \UnexpectedValueException
+     * @return string
+     */
+    private function computeFingerprint($algorithm, $data)
+    {
+        switch ($algorithm) {
+            case XMLSecurityDSig::SHA1:
+                $algo = 'SHA1';
+                break;
+            case XMLSecurityDSig::SHA256:
+                $algo = 'SHA256';
+                break;
+            case XMLSecurityDSig::SHA384:
+                $algo = 'SHA384';
+                break;
+            case XMLSecurityDSig::SHA512:
+                $algo = 'SHA512';
+                break;
+            default:
+                $known_opts = implode(", ", [
+                    XMLSecurityDSig::SHA1,
+                    XMLSecurityDSig::SHA256,
+                    XMLSecurityDSig::SHA384,
+                    XMLSecurityDSig::SHA512,
+                ]);
+                throw new \UnexpectedValueException(
+                    "Unsupported hashing function {$algorithm}. " .
+                    "Known options: [{$known_opts}]"
+                );
+        }
+        return hash($algo, $data);
+    }
+
+
     /**
      * This function checks if this EntityDescriptor was signed with a certificate with the
      * given fingerprint.
      *
      * @param string $fingerprint Fingerprint of the certificate which should have been used to sign this
      *                      EntityDescriptor.
+     * @param string $algorithm Algorithm used to compute the fingerprint of the signing certicate.
      *
      * @return boolean True if it was signed with the certificate with the given fingerprint, false otherwise.
      */
-    public function validateFingerprint($fingerprint)
+    public function validateFingerprint($fingerprint, $algorithm)
     {
         assert(is_string($fingerprint));
 
@@ -1468,14 +1550,15 @@ public function validateFingerprint($fingerprint)
         $candidates = [];
         foreach ($this->validators as $validator) {
             foreach ($validator->getValidatingCertificates() as $cert) {
-                $fp = strtolower(sha1(base64_decode($cert)));
+                $decoded_cert = base64_decode($cert);
+                $fp = $this->computeFingerprint($algorithm, $decoded_cert);
                 $candidates[] = $fp;
                 if ($fp === $fingerprint) {
                     return true;
                 }
             }
         }
-        \SimpleSAML\Logger::debug('Fingerprint was ['.$fingerprint.'] not one of ['.join(', ', $candidates).']');
+        Logger::debug('Fingerprint was [' . $fingerprint . '] not one of [' . join(', ', $candidates) . ']');
         return false;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Signer.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Signer.php
index 98806d5621..7a80bdd139 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Signer.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Signer.php
@@ -4,6 +4,10 @@
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
+use SAML2\DOMDocumentFactory;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Utils;
 
 /**
  * This class implements a helper function for signing of metadata.
@@ -24,21 +28,23 @@ class Signer
      *     'Shib 1.3 SP'.
      *
      * @return array An associative array with the keys 'privatekey', 'certificate', and optionally 'privatekey_pass'.
-     * @throws Exception If the key and certificate used to sign is unknown.
+     * @throws \Exception If the key and certificate used to sign is unknown.
      */
     private static function findKeyCert($config, $entityMetadata, $type)
     {
         // first we look for metadata.privatekey and metadata.certificate in the metadata
-        if (array_key_exists('metadata.sign.privatekey', $entityMetadata)
+        if (
+            array_key_exists('metadata.sign.privatekey', $entityMetadata)
             || array_key_exists('metadata.sign.certificate', $entityMetadata)
         ) {
-            if (!array_key_exists('metadata.sign.privatekey', $entityMetadata)
+            if (
+                !array_key_exists('metadata.sign.privatekey', $entityMetadata)
                 || !array_key_exists('metadata.sign.certificate', $entityMetadata)
             ) {
                 throw new \Exception(
-                    'Missing either the "metadata.sign.privatekey" or the'.
-                    ' "metadata.sign.certificate" configuration option in the metadata for'.
-                    ' the '.$type.' "'.$entityMetadata['entityid'].'". If one of'.
+                    'Missing either the "metadata.sign.privatekey" or the' .
+                    ' "metadata.sign.certificate" configuration option in the metadata for' .
+                    ' the ' . $type . ' "' . $entityMetadata['entityid'] . '". If one of' .
                     ' these options is specified, then the other must also be specified.'
                 );
             }
@@ -61,9 +67,9 @@ private static function findKeyCert($config, $entityMetadata, $type)
         if ($privatekey !== null || $certificate !== null) {
             if ($privatekey === null || $certificate === null) {
                 throw new \Exception(
-                    'Missing either the "metadata.sign.privatekey" or the'.
-                    ' "metadata.sign.certificate" configuration option in the global'.
-                    ' configuration. If one of these options is specified, then the other'.
+                    'Missing either the "metadata.sign.privatekey" or the' .
+                    ' "metadata.sign.certificate" configuration option in the global' .
+                    ' configuration. If one of these options is specified, then the other' .
                     ' must also be specified.'
                 );
             }
@@ -78,16 +84,18 @@ private static function findKeyCert($config, $entityMetadata, $type)
         }
 
         // as a last resort we attempt to use the privatekey and certificate option from the metadata
-        if (array_key_exists('privatekey', $entityMetadata)
+        if (
+            array_key_exists('privatekey', $entityMetadata)
             || array_key_exists('certificate', $entityMetadata)
         ) {
-            if (!array_key_exists('privatekey', $entityMetadata)
+            if (
+                !array_key_exists('privatekey', $entityMetadata)
                 || !array_key_exists('certificate', $entityMetadata)
             ) {
                 throw new \Exception(
-                    'Both the "privatekey" and the "certificate" option must'.
-                    ' be set in the metadata for the '.$type.' "'.
-                    $entityMetadata['entityid'].'" before it is possible to sign metadata'.
+                    'Both the "privatekey" and the "certificate" option must' .
+                    ' be set in the metadata for the ' . $type . ' "' .
+                    $entityMetadata['entityid'] . '" before it is possible to sign metadata' .
                     ' from this entity.'
                 );
             }
@@ -105,8 +113,8 @@ private static function findKeyCert($config, $entityMetadata, $type)
         }
 
         throw new \Exception(
-            'Could not find what key & certificate should be used to sign the metadata'.
-            ' for the '.$type.' "'.$entityMetadata['entityid'].'".'
+            'Could not find what key & certificate should be used to sign the metadata' .
+            ' for the ' . $type . ' "' . $entityMetadata['entityid'] . '".'
         );
     }
 
@@ -128,8 +136,8 @@ private static function isMetadataSigningEnabled($config, $entityMetadata, $type
         if (array_key_exists('metadata.sign.enable', $entityMetadata)) {
             if (!is_bool($entityMetadata['metadata.sign.enable'])) {
                 throw new \Exception(
-                    'Invalid value for the "metadata.sign.enable" configuration option for'.
-                    ' the '.$type.' "'.$entityMetadata['entityid'].'". This option'.
+                    'Invalid value for the "metadata.sign.enable" configuration option for' .
+                    ' the ' . $type . ' "' . $entityMetadata['entityid'] . '". This option' .
                     ' should be a boolean.'
                 );
             }
@@ -163,9 +171,9 @@ private static function getMetadataSigningAlgorithm($config, $entityMetadata, $t
         // configure the algorithm to use
         if (array_key_exists('metadata.sign.algorithm', $entityMetadata)) {
             if (!is_string($entityMetadata['metadata.sign.algorithm'])) {
-                throw new \SimpleSAML\Error\CriticalConfigurationError(
-                    "Invalid value for the 'metadata.sign.algorithm' configuration option for the ".$type.
-                    "'".$entityMetadata['entityid']."'. This option has restricted values"
+                throw new Error\CriticalConfigurationError(
+                    "Invalid value for the 'metadata.sign.algorithm' configuration option for the " . $type .
+                    "'" . $entityMetadata['entityid'] . "'. This option has restricted values"
                 );
             }
             $alg = $entityMetadata['metadata.sign.algorithm'];
@@ -181,7 +189,7 @@ private static function getMetadataSigningAlgorithm($config, $entityMetadata, $t
         ];
 
         if (!in_array($alg, $supported_algs, true)) {
-            throw new \SimpleSAML\Error\CriticalConfigurationError("Unknown signature algorithm '$alg'");
+            throw new Error\CriticalConfigurationError("Unknown signature algorithm '$alg'");
         }
 
         switch ($alg) {
@@ -217,7 +225,7 @@ private static function getMetadataSigningAlgorithm($config, $entityMetadata, $t
      */
     public static function sign($metadataString, $entityMetadata, $type)
     {
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
 
         // check if metadata signing is enabled
         if (!self::isMetadataSigningEnabled($config, $entityMetadata, $type)) {
@@ -227,18 +235,18 @@ public static function sign($metadataString, $entityMetadata, $type)
         // find the key & certificate which should be used to sign the metadata
         $keyCertFiles = self::findKeyCert($config, $entityMetadata, $type);
 
-        $keyFile = \SimpleSAML\Utils\Config::getCertPath($keyCertFiles['privatekey']);
+        $keyFile = Utils\Config::getCertPath($keyCertFiles['privatekey']);
         if (!file_exists($keyFile)) {
             throw new \Exception(
-                'Could not find private key file ['.$keyFile.'], which is needed to sign the metadata'
+                'Could not find private key file [' . $keyFile . '], which is needed to sign the metadata'
             );
         }
         $keyData = file_get_contents($keyFile);
 
-        $certFile = \SimpleSAML\Utils\Config::getCertPath($keyCertFiles['certificate']);
+        $certFile = Utils\Config::getCertPath($keyCertFiles['certificate']);
         if (!file_exists($certFile)) {
             throw new \Exception(
-                'Could not find certificate file ['.$certFile.'], which is needed to sign the metadata'
+                'Could not find certificate file [' . $certFile . '], which is needed to sign the metadata'
             );
         }
         $certData = file_get_contents($certFile);
@@ -246,7 +254,7 @@ public static function sign($metadataString, $entityMetadata, $type)
 
         // convert the metadata to a DOM tree
         try {
-            $xml = \SAML2\DOMDocumentFactory::fromString($metadataString);
+            $xml = DOMDocumentFactory::fromString($metadataString);
         } catch (\Exception $e) {
             throw new \Exception('Error parsing self-generated metadata.');
         }
@@ -261,7 +269,9 @@ public static function sign($metadataString, $entityMetadata, $type)
         $objKey->loadKey($keyData, false);
 
         // get the EntityDescriptor node we should sign
+        /** @var \DOMElement $rootNode */
         $rootNode = $xml->firstChild;
+        $rootNode->setAttribute('ID', '_' . hash('sha256', $metadataString));
 
         // sign the metadata with our private key
         $objXMLSecDSig = new XMLSecurityDSig();
@@ -272,7 +282,7 @@ public static function sign($metadataString, $entityMetadata, $type)
             [$rootNode],
             $signature_cf['digest'],
             ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', XMLSecurityDSig::EXC_C14N],
-            ['id_name' => 'ID']
+            ['id_name' => 'ID', 'overwrite' => false]
         );
 
         $objXMLSecDSig->sign($objKey);
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Sources/MDQ.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Sources/MDQ.php
index 4138464277..3b8431a14d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Sources/MDQ.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/Sources/MDQ.php
@@ -2,8 +2,12 @@
 
 namespace SimpleSAML\Metadata\Sources;
 
+use RobRichards\XMLSecLibs\XMLSecurityDSig;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
 use SimpleSAML\Logger;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Metadata\SAMLParser;
+use SimpleSAML\Utils;
 
 /**
  * This class implements SAML Metadata Query Protocol
@@ -31,6 +35,11 @@ class MDQ extends \SimpleSAML\Metadata\MetaDataStorageSource
      */
     private $validateFingerprint;
 
+    /**
+     * @var string
+     */
+    private $validateFingerprintAlgorithm;
+
     /**
      * The cache directory, or null if no cache directory is configured.
      *
@@ -68,7 +77,7 @@ protected function __construct($config)
         assert(is_array($config));
 
         if (!array_key_exists('server', $config)) {
-            throw new \Exception(__CLASS__.": the 'server' configuration option is not set.");
+            throw new \Exception(__CLASS__ . ": the 'server' configuration option is not set.");
         } else {
             $this->server = $config['server'];
         }
@@ -78,9 +87,14 @@ protected function __construct($config)
         } else {
             $this->validateFingerprint = null;
         }
+        if (isset($config['validateFingerprintAlgorithm'])) {
+            $this->validateFingerprintAlgorithm = $config['validateFingerprintAlgorithm'];
+        } else {
+            $this->validateFingerprintAlgorithm = XMLSecurityDSig::SHA1;
+        }
 
         if (array_key_exists('cachedir', $config)) {
-            $globalConfig = \SimpleSAML\Configuration::getInstance();
+            $globalConfig = Configuration::getInstance();
             $this->cacheDir = $globalConfig->resolvePath($config['cachedir']);
         } else {
             $this->cacheDir = null;
@@ -121,8 +135,12 @@ private function getCacheFilename($set, $entityId)
         assert(is_string($set));
         assert(is_string($entityId));
 
+        if ($this->cacheDir === null) {
+            throw new Error\ConfigurationError("Missing cache directory configuration.");
+        }
+
         $cachekey = sha1($entityId);
-        return $this->cacheDir.'/'.$set.'-'.$cachekey.'.cached.xml';
+        return $this->cacheDir . '/' . $set . '-' . $cachekey . '.cached.xml';
     }
 
 
@@ -150,9 +168,9 @@ private function getFromCache($set, $entityId)
             return null;
         }
         if (!is_readable($cachefilename)) {
-            throw new \Exception(__CLASS__.': could not read cache file for entity ['.$cachefilename.']');
+            throw new \Exception(__CLASS__ . ': could not read cache file for entity [' . $cachefilename . ']');
         }
-        Logger::debug(__CLASS__.': reading cache ['.$entityId.'] => ['.$cachefilename.']');
+        Logger::debug(__CLASS__ . ': reading cache [' . $entityId . '] => [' . $cachefilename . ']');
 
         /* Ensure that this metadata isn't older that the cachelength option allows. This
          * must be verified based on the file, since this option may be changed after the
@@ -160,25 +178,26 @@ private function getFromCache($set, $entityId)
          */
         $stat = stat($cachefilename);
         if ($stat['mtime'] + $this->cacheLength <= time()) {
-            Logger::debug(__CLASS__.': cache file older that the cachelength option allows.');
+            Logger::debug(__CLASS__ . ': cache file older that the cachelength option allows.');
             return null;
         }
 
         $rawData = file_get_contents($cachefilename);
         if (empty($rawData)) {
+            /** @var array $error */
             $error = error_get_last();
             throw new \Exception(
-                __CLASS__.': error reading metadata from cache file "'.$cachefilename.'": '.$error['message']
+                __CLASS__ . ': error reading metadata from cache file "' . $cachefilename . '": ' . $error['message']
             );
         }
 
         $data = unserialize($rawData);
         if ($data === false) {
-            throw new \Exception(__CLASS__.': error unserializing cached data from file "'.$cachefilename.'".');
+            throw new \Exception(__CLASS__ . ': error unserializing cached data from file "' . $cachefilename . '".');
         }
 
         if (!is_array($data)) {
-            throw new \Exception(__CLASS__.': Cached metadata from "'.$cachefilename.'" wasn\'t an array.');
+            throw new \Exception(__CLASS__ . ': Cached metadata from "' . $cachefilename . '" wasn\'t an array.');
         }
 
         return $data;
@@ -193,6 +212,7 @@ private function getFromCache($set, $entityId)
      * @param array  $data The associative array with the metadata for this entity.
      *
      * @throws \Exception If metadata cannot be written to cache.
+     * @return void
      */
     private function writeToCache($set, $entityId, $data)
     {
@@ -206,9 +226,9 @@ private function writeToCache($set, $entityId, $data)
 
         $cachefilename = $this->getCacheFilename($set, $entityId);
         if (!is_writable(dirname($cachefilename))) {
-            throw new \Exception(__CLASS__.': could not write cache file for entity ['.$cachefilename.']');
+            throw new \Exception(__CLASS__ . ': could not write cache file for entity [' . $cachefilename . ']');
         }
-        Logger::debug(__CLASS__.': Writing cache ['.$entityId.'] => ['.$cachefilename.']');
+        Logger::debug(__CLASS__ . ': Writing cache [' . $entityId . '] => [' . $cachefilename . ']');
         file_put_contents($cachefilename, serialize($data));
     }
 
@@ -222,7 +242,7 @@ private function writeToCache($set, $entityId, $data)
      * @return array|NULL  The associative array with the metadata, or NULL if no metadata for
      *                     the given set was found.
      */
-    private static function getParsedSet(\SimpleSAML\Metadata\SAMLParser $entity, $set)
+    private static function getParsedSet(SAMLParser $entity, $set)
     {
         assert(is_string($set));
 
@@ -240,7 +260,7 @@ private static function getParsedSet(\SimpleSAML\Metadata\SAMLParser $entity, $s
                 return $ret[0];
 
             default:
-                Logger::warning(__CLASS__.': unknown metadata set: \''.$set.'\'.');
+                Logger::warning(__CLASS__ . ': unknown metadata set: \'' . $set . '\'.');
         }
 
         return null;
@@ -260,7 +280,7 @@ private static function getParsedSet(\SimpleSAML\Metadata\SAMLParser $entity, $s
      * @param string $index The entityId or metaindex we are looking up.
      * @param string $set The set we are looking for metadata in.
      *
-     * @return array An associative array with metadata for the given entity, or NULL if we are unable to
+     * @return array|null An associative array with metadata for the given entity, or NULL if we are unable to
      *         locate the entity.
      * @throws \Exception If an error occurs while validating the signature or the metadata is in an
      *         incorrect set.
@@ -270,7 +290,7 @@ public function getMetaData($index, $set)
         assert(is_string($index));
         assert(is_string($set));
 
-        Logger::info(__CLASS__.': loading metadata entity ['.$index.'] from ['.$set.']');
+        Logger::info(__CLASS__ . ': loading metadata entity [' . $index . '] from [' . $set . ']');
 
         // read from cache if possible
         try {
@@ -288,16 +308,16 @@ public function getMetaData($index, $set)
 
         if (isset($data)) {
             // metadata found in cache and not expired
-            Logger::debug(__CLASS__.': using cached metadata for: '.$index.'.');
+            Logger::debug(__CLASS__ . ': using cached metadata for: ' . $index . '.');
             return $data;
         }
 
         // look at Metadata Query Protocol: https://github.com/iay/md-query/blob/master/draft-young-md-query.txt
-        $mdq_url = $this->server.'/entities/'.urlencode($index);
+        $mdq_url = $this->server . '/entities/' . urlencode($index);
 
-        Logger::debug(__CLASS__.': downloading metadata for "'.$index.'" from ['.$mdq_url.']');
+        Logger::debug(__CLASS__ . ': downloading metadata for "' . $index . '" from [' . $mdq_url . ']');
         try {
-            $xmldata = HTTP::fetch($mdq_url);
+            $xmldata = Utils\HTTP::fetch($mdq_url);
         } catch (\Exception $e) {
             // Avoid propagating the exception, make sure we can handle the error later
             $xmldata = false;
@@ -305,33 +325,50 @@ public function getMetaData($index, $set)
 
         if (empty($xmldata)) {
             $error = error_get_last();
-            Logger::info('Unable to fetch metadata for "'.$index.'" from '.$mdq_url.': '.
+            Logger::info('Unable to fetch metadata for "' . $index . '" from ' . $mdq_url . ': ' .
                 (is_array($error) ? $error['message'] : 'no error available'));
             return null;
         }
 
         /** @var string $xmldata */
-        $entity = \SimpleSAML\Metadata\SAMLParser::parseString($xmldata);
-        Logger::debug(__CLASS__.': completed parsing of ['.$mdq_url.']');
+        $entity = SAMLParser::parseString($xmldata);
+        Logger::debug(__CLASS__ . ': completed parsing of [' . $mdq_url . ']');
 
         if ($this->validateFingerprint !== null) {
-            if (!$entity->validateFingerprint($this->validateFingerprint)) {
-                throw new \Exception(__CLASS__.': error, could not verify signature for entity: '.$index.'".');
+            if (
+                !$entity->validateFingerprint(
+                    $this->validateFingerprint,
+                    $this->validateFingerprintAlgorithm
+                )
+            ) {
+                throw new \Exception(__CLASS__ . ': error, could not verify signature for entity: ' . $index . '".');
             }
         }
 
         $data = self::getParsedSet($entity, $set);
         if ($data === null) {
-            throw new \Exception(__CLASS__.': no metadata for set "'.$set.'" available from "'.$index.'".');
+            throw new \Exception(__CLASS__ . ': no metadata for set "' . $set . '" available from "' . $index . '".');
         }
 
         try {
             $this->writeToCache($set, $index, $data);
         } catch (\Exception $e) {
             // Proceed without writing to cache
-            Logger::error('Error writing MDQ result to cache: '.$e->getMessage());
+            Logger::error('Error writing MDQ result to cache: ' . $e->getMessage());
         }
 
         return $data;
     }
+
+    /**
+     * This function loads the metadata for entity IDs in $entityIds. It is returned as an associative array
+     * where the key is the entity id. An empty array may be returned if no matching entities were found
+     * @param array $entityIds The entity ids to load
+     * @param string $set The set we want to get metadata from.
+     * @return array An associative array with the metadata for the requested entities, if found.
+     */
+    public function getMetaDataForEntities(array $entityIds, $set)
+    {
+        return $this->getMetaDataForEntitiesIndividually($entityIds, $set);
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module.php
index 4cbd416576..6f685c9fe0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module.php
@@ -2,11 +2,15 @@
 
 namespace SimpleSAML;
 
+use SimpleSAML\HTTP\Router;
+use SimpleSAML\Utils;
+use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
 use Symfony\Component\HttpFoundation\BinaryFileResponse;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpFoundation\ResponseHeaderBag;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
 /**
  * Helper class for accessing information about modules.
@@ -18,7 +22,6 @@
  */
 class Module
 {
-
     /**
      * Index pages: file names to attempt when accessing directories.
      *
@@ -82,8 +85,8 @@ class Module
      */
     public static function getModuleDir($module)
     {
-        $baseDir = dirname(dirname(dirname(__FILE__))).'/modules';
-        $moduleDir = $baseDir.'/'.$module;
+        $baseDir = dirname(dirname(dirname(__FILE__))) . '/modules';
+        $moduleDir = $baseDir . '/' . $module;
 
         return $moduleDir;
     }
@@ -126,11 +129,11 @@ public static function process(Request $request = null)
             $request = Request::createFromGlobals();
         }
 
-        if ($request->getPathInfo() === '/') {
+        if ($request->server->get('PATH_INFO') === '/') {
             throw new Error\NotFound('No PATH_INFO to module.php');
         }
 
-        $url = $request->getPathInfo();
+        $url = $request->server->get('PATH_INFO');
         assert(substr($url, 0, 1) === '/');
 
         /* clear the PATH_INFO option, so that a script can detect whether it is called with anything following the
@@ -151,7 +154,7 @@ public static function process(Request $request = null)
         }
 
         if (!self::isModuleEnabled($module)) {
-            throw new Error\NotFound('The module \''.$module.'\' was either not found, or wasn\'t enabled.');
+            throw new Error\NotFound('The module \'' . $module . '\' was either not found, or wasn\'t enabled.');
         }
 
         /* Make sure that the request isn't suspicious (contains references to current directory or parent directory or
@@ -165,18 +168,39 @@ public static function process(Request $request = null)
         }
 
         $config = Configuration::getInstance();
+
+        // rebuild REQUEST_URI and SCRIPT_NAME just in case we need to. This is needed for server aliases and rewrites
+        $translated_uri = $config->getBasePath() . 'module.php/' . $module . '/' . $url;
+        $request->server->set('REQUEST_URI', $translated_uri);
+        $request->server->set('SCRIPT_NAME', $config->getBasePath() . 'module.php');
+        $request_files = array_filter(
+            $request->files->all(),
+            function ($val) {
+                return !is_null($val);
+            }
+        );
+        $request->initialize(
+            $request->query->all(),
+            $request->request->all(),
+            $request->attributes->all(),
+            $request->cookies->all(),
+            $request_files,
+            $request->server->all(),
+            $request->getContent()
+        );
+
         if ($config->getBoolean('usenewui', false) === true) {
-            $router = new HTTP\Router($module);
+            $router = new Router($module);
             try {
-                return $router->process();
-            } catch (\Symfony\Component\Config\Exception\FileLocatorFileNotFoundException $e) {
+                return $router->process($request);
+            } catch (FileLocatorFileNotFoundException $e) {
                 // no routes configured for this module, fall back to the old system
-            } catch (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e) {
+            } catch (NotFoundHttpException $e) {
                 // this module has been migrated, but the route wasn't found
             }
         }
 
-        $moduleDir = self::getModuleDir($module).'/www/';
+        $moduleDir = self::getModuleDir($module) . '/www/';
 
         // check for '.php/' in the path, the presence of which indicates that another php-script should handle the
         // request
@@ -184,7 +208,7 @@ public static function process(Request $request = null)
             $newURL = substr($url, 0, $phpPos + 4);
             $param = substr($url, $phpPos + 4);
 
-            if (is_file($moduleDir.$newURL)) {
+            if (is_file($moduleDir . $newURL)) {
                 /* $newPath points to a normal file. Point execution to that file, and save the remainder of the path
                  * in PATH_INFO.
                  */
@@ -195,12 +219,12 @@ public static function process(Request $request = null)
             }
         }
 
-        $path = $moduleDir.$url;
+        $path = $moduleDir . $url;
 
         if ($path[strlen($path) - 1] === '/') {
             // path ends with a slash - directory reference. Attempt to find index file in directory
             foreach (self::$indexFiles as $if) {
-                if (file_exists($path.$if)) {
+                if (file_exists($path . $if)) {
                     $path .= $if;
                     break;
                 }
@@ -216,11 +240,11 @@ public static function process(Request $request = null)
 
         if (!file_exists($path)) {
             // file not found
-            Logger::info('Could not find file \''.$path.'\'.');
+            Logger::info('Could not find file \'' . $path . '\'.');
             throw new Error\NotFound('The URL wasn\'t found in the module.');
         }
 
-        if (substr($path, -4) === '.php') {
+        if (mb_strtolower(substr($path, -4), 'UTF-8') === '.php') {
             // PHP file - attempt to run it
 
             /* In some environments, $_SERVER['SCRIPT_NAME'] is already set with $_SERVER['PATH_INFO']. Check for that
@@ -230,7 +254,7 @@ public static function process(Request $request = null)
              */
             $script = "/$module/$url";
             if (strpos($request->getScriptName(), $script) === false) {
-                $request->server->set('SCRIPT_NAME', $request->getScriptName().'/'.$module.'/'.$url);
+                $request->server->set('SCRIPT_NAME', $request->getScriptName() . '/' . $module . '/' . $url);
             }
 
             require($path);
@@ -256,23 +280,37 @@ public static function process(Request $request = null)
                 $contentType = mime_content_type($path);
             } else {
                 // mime_content_type doesn't exist. Return a default MIME type
-                Logger::warning('Unable to determine mime content type of file: '.$path);
+                Logger::warning('Unable to determine mime content type of file: ' . $path);
                 $contentType = 'application/octet-stream';
             }
         }
 
+        $assetConfig = $config->getConfigItem('assets');
+        $cacheConfig = $assetConfig->getConfigItem('caching');
         $response = new BinaryFileResponse($path);
-        $response->setCache(['public' => true, 'max_age' => 86400]);
-        $response->setExpires(new \DateTime(gmdate('D, j M Y H:i:s \G\M\T', time() + 10 * 60)));
-        $response->setLastModified(new \DateTime(gmdate('D, j M Y H:i:s \G\M\T', filemtime($path))));
+        $response->setCache([
+            // "public" allows response caching even if the request was authenticated,
+            // which is exactly what we want for static resources
+            'public' => true,
+            'max_age' => (string)$cacheConfig->getInteger('max_age', 86400)
+        ]);
+        $response->setAutoLastModified();
+        if ($cacheConfig->getBoolean('etag', false)) {
+            $response->setAutoEtag();
+        }
+        $response->isNotModified($request);
         $response->headers->set('Content-Type', $contentType);
-        $response->headers->set('Content-Length', sprintf('%u', filesize($path))); // force file size to an unsigned
         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE);
         $response->prepare($request);
         return $response;
     }
 
 
+    /**
+     * @param string $module
+     * @param array $mod_config
+     * @return bool
+     */
     private static function isModuleEnabledWithConf($module, $mod_config)
     {
         if (isset(self::$module_info[$module]['enabled'])) {
@@ -299,19 +337,20 @@ private static function isModuleEnabledWithConf($module, $mod_config)
             throw new \Exception("Invalid module.enable value for the '$module' module.");
         }
 
-        if (assert_options(ASSERT_ACTIVE) &&
-            !file_exists($moduleDir.'/default-enable') &&
-            !file_exists($moduleDir.'/default-disable')
+        if (
+            assert_options(ASSERT_ACTIVE)
+            && !file_exists($moduleDir . '/default-enable')
+            && !file_exists($moduleDir . '/default-disable')
         ) {
-            \SimpleSAML\Logger::error("Missing default-enable or default-disable file for the module $module");
+            Logger::error("Missing default-enable or default-disable file for the module $module");
         }
 
-        if (file_exists($moduleDir.'/enable')) {
+        if (file_exists($moduleDir . '/enable')) {
             self::$module_info[$module]['enabled'] = true;
             return true;
         }
 
-        if (!file_exists($moduleDir.'/disable') && file_exists($moduleDir.'/default-enable')) {
+        if (!file_exists($moduleDir . '/disable') && file_exists($moduleDir . '/default-enable')) {
             self::$module_info[$module]['enabled'] = true;
             return true;
         }
@@ -338,7 +377,7 @@ public static function getModules()
 
         $dh = scandir($path);
         if ($dh === false) {
-            throw new \Exception('Unable to open module directory "'.$path.'".');
+            throw new \Exception('Unable to open module directory "' . $path . '".');
         }
 
         foreach ($dh as $f) {
@@ -346,7 +385,7 @@ public static function getModules()
                 continue;
             }
 
-            if (!is_dir($path.'/'.$f)) {
+            if (!is_dir($path . '/' . $f)) {
                 continue;
             }
 
@@ -392,13 +431,13 @@ public static function resolveClass($id, $type, $subclass = null)
         } else {
             // should be a module
             // make sure empty types are handled correctly
-            $type = (empty($type)) ? '\\' : '\\'.$type.'\\';
+            $type = (empty($type)) ? '\\' : '\\' . $type . '\\';
 
-            $className = 'SimpleSAML\\Module\\'.$tmp[0].$type.$tmp[1];
+            $className = 'SimpleSAML\\Module\\' . $tmp[0] . $type . $tmp[1];
             if (!class_exists($className)) {
                 // check for the old-style class names
                 $type = str_replace('\\', '_', $type);
-                $oldClassName = 'sspmod_'.$tmp[0].$type.$tmp[1];
+                $oldClassName = 'sspmod_' . $tmp[0] . $type . $tmp[1];
 
                 if (!class_exists($oldClassName)) {
                     throw new \Exception("Could not resolve '$id': no class named '$className' or '$oldClassName'.");
@@ -409,7 +448,8 @@ public static function resolveClass($id, $type, $subclass = null)
 
         if ($subclass !== null && !is_subclass_of($className, $subclass)) {
             throw new \Exception(
-                'Could not resolve \''.$id.'\': The class \''.$className.'\' isn\'t a subclass of \''.$subclass.'\'.'
+                'Could not resolve \'' . $id . '\': The class \'' . $className
+                . '\' isn\'t a subclass of \'' . $subclass . '\'.'
             );
         }
 
@@ -432,7 +472,7 @@ public static function getModuleURL($resource, array $parameters = [])
         assert(is_string($resource));
         assert($resource[0] !== '/');
 
-        $url = Utils\HTTP::getBaseURL().'module.php/'.$resource;
+        $url = Utils\HTTP::getBaseURL() . 'module.php/' . $resource;
         if (!empty($parameters)) {
             $url = Utils\HTTP::addURLParameters($url, $parameters);
         }
@@ -455,7 +495,7 @@ public static function getModuleHooks($module)
             return self::$modules[$module]['hooks'];
         }
 
-        $hook_dir = self::getModuleDir($module).'/hooks';
+        $hook_dir = self::getModuleDir($module) . '/hooks';
         if (!is_dir($hook_dir)) {
             return [];
         }
@@ -471,8 +511,8 @@ public static function getModuleHooks($module)
                 continue;
             }
             $hook_name = $matches[1];
-            $hook_func = $module.'_hook_'.$hook_name;
-            $hooks[$hook_name] = ['file' => $hook_dir.'/'.$file, 'func' => $hook_func];
+            $hook_func = $module . '_hook_' . $hook_name;
+            $hooks[$hook_name] = ['file' => $hook_dir . '/' . $file, 'func' => $hook_func];
         }
         return $hooks;
     }
@@ -485,6 +525,7 @@ public static function getModuleHooks($module)
      *
      * @param string $hook The name of the hook.
      * @param mixed  &$data The data which should be passed to each hook. Will be passed as a reference.
+     * @return void
      *
      * @throws \SimpleSAML\Error\Exception If an invalid hook is found in a module.
      */
@@ -511,7 +552,7 @@ public static function callHooks($hook, &$data = null)
             require_once(self::$module_info[$module]['hooks'][$hook]['file']);
 
             if (!is_callable(self::$module_info[$module]['hooks'][$hook]['func'])) {
-                throw new \SimpleSAML\Error\Exception('Invalid hook \''.$hook.'\' for module \''.$module.'\'.');
+                throw new Error\Exception('Invalid hook \'' . $hook . '\' for module \'' . $module . '\'.');
             }
 
             $fn = self::$module_info[$module]['hooks'][$hook]['func'];
@@ -531,7 +572,7 @@ public static function callHooks($hook, &$data = null)
      */
     public static function removeTrailingSlash(Request $request)
     {
-        $pathInfo = $request->getPathInfo();
+        $pathInfo = $request->server->get('PATH_INFO');
         $url = str_replace($pathInfo, rtrim($pathInfo, ' /'), $request->getRequestUri());
         return new RedirectResponse($url, 308);
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module/ControllerResolver.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module/ControllerResolver.php
index 25bfa08fd1..3e06745b1e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module/ControllerResolver.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Module/ControllerResolver.php
@@ -7,7 +7,6 @@
 use SimpleSAML\Error\Exception;
 use SimpleSAML\Module;
 use SimpleSAML\Session;
-
 use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
 use Symfony\Component\Config\FileLocator;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -33,7 +32,6 @@
  */
 class ControllerResolver extends SymfonyControllerResolver implements ArgumentResolverInterface
 {
-
     /** @var ArgumentMetadataFactory */
     protected $argFactory;
 
@@ -44,9 +42,9 @@ class ControllerResolver extends SymfonyControllerResolver implements ArgumentRe
     protected $module;
 
     /** @var array */
-    protected $params;
+    protected $params = [];
 
-    /** @var RouteCollection */
+    /** @var RouteCollection|null */
     protected $routes;
 
 
@@ -76,7 +74,7 @@ public function __construct($module)
                 ['url' => '.*/$']
             );
             $this->routes->add('trailing-slash', $redirect);
-            $this->routes->addPrefix('/'.$this->module);
+            $this->routes->addPrefix('/' . $this->module);
         } catch (FileLocatorFileNotFoundException $e) {
         }
     }
@@ -137,7 +135,7 @@ public function getArguments(Request $request, $controller)
 
         /** @var ArgumentMetadata $argMeta */
         foreach ($metadata as $argMeta) {
-            if ($argMeta->getType() === 'Symfony\Component\HttpFoundation\Request') {
+            if ($argMeta->getType() === Request::class) {
                 // add request argument
                 $args[] = $request;
                 continue;
@@ -161,7 +159,7 @@ public function getArguments(Request $request, $controller)
                 $args[] = null;
             }
 
-            throw new Exception('Missing value for argument '.$argName.'. This is probably a bug.');
+            throw new Exception('Missing value for argument ' . $argName . '. This is probably a bug.');
         }
 
         return $args;
@@ -172,6 +170,7 @@ public function getArguments(Request $request, $controller)
      * Set the configuration to use by the controllers.
      *
      * @param \SimpleSAML\Configuration $config
+     * @return void
      */
     public function setConfiguration(Configuration $config)
     {
@@ -184,6 +183,7 @@ public function setConfiguration(Configuration $config)
      * Set the session to use by the controllers.
      *
      * @param \SimpleSAML\Session $session
+     * @return void
      */
     public function setSession(Session $session)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Session.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Session.php
index cd158b3fe6..8b54ae5f29 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Session.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Session.php
@@ -2,7 +2,9 @@
 
 namespace SimpleSAML;
 
+use SAML2\XML\saml\AttributeValue;
 use SimpleSAML\Error;
+use SimpleSAML\Utils;
 
 /**
  * The Session class holds information about a user session, and everything attached to it.
@@ -30,7 +32,6 @@ class Session implements \Serializable, Utils\ClearableState
      */
     const DATA_TIMEOUT_SESSION_END = 'sessionEndTimeout';
 
-
     /**
      * The list of loaded session objects.
      *
@@ -40,13 +41,12 @@ class Session implements \Serializable, Utils\ClearableState
      */
     private static $sessions = [];
 
-
     /**
      * This variable holds the instance of the session - Singleton approach.
      *
      * Warning: do not set the instance manually, call Session::load() instead.
      */
-    private static $instance = null;
+    private static $instance;
 
     /**
      * The global configuration.
@@ -74,9 +74,9 @@ class Session implements \Serializable, Utils\ClearableState
      * This is used in the debug logs and error messages to easily track more information
      * about what went wrong.
      *
-     * @var string|null
+     * @var string
      */
-    private $trackid = null;
+    private $trackid;
 
     /**
      * @var integer|null
@@ -150,7 +150,7 @@ private function __construct($transient = false)
         $this->setConfiguration(Configuration::getInstance());
 
         if (php_sapi_name() === 'cli' || defined('STDIN')) {
-            $this->trackid = 'CL'.bin2hex(openssl_random_pseudo_bytes(4));
+            $this->trackid = 'CL' . bin2hex(openssl_random_pseudo_bytes(4));
             Logger::setTrackId($this->trackid);
             $this->transient = $transient;
             return;
@@ -158,19 +158,9 @@ private function __construct($transient = false)
 
         if ($transient) {
             // transient session
-            $sh = SessionHandler::getSessionHandler();
-            $this->trackid = 'TR'.bin2hex(openssl_random_pseudo_bytes(4));
+            $this->trackid = 'TR' . bin2hex(openssl_random_pseudo_bytes(4));
             Logger::setTrackId($this->trackid);
             $this->transient = true;
-
-            /*
-             * Initialize the session ID. It might be that we have a session cookie but we couldn't load the session.
-             * If that's the case, use that ID. If not, create a new ID.
-             */
-            $this->sessionId = $sh->getCookieSessionId();
-            if ($this->sessionId === null) {
-                $this->sessionId = $sh->newSessionId();
-            }
         } else {
             // regular session
             $sh = SessionHandler::getSessionHandler();
@@ -197,6 +187,7 @@ private function __construct($transient = false)
      * Set the configuration we should use.
      *
      * @param Configuration $config
+     * @return void
      */
     public function setConfiguration(Configuration $config)
     {
@@ -273,8 +264,8 @@ public static function getSessionFromRequest()
              * session here. Therefore, use just a transient session and throw the exception for someone else to handle
              * it.
              */
-            Logger::error('Error loading session: '.$e->getMessage());
             self::useTransientSession();
+            Logger::error('Error loading session: ' . $e->getMessage());
             if ($e instanceof Error\Exception) {
                 $cause = $e->getCause();
                 if ($cause instanceof \Exception) {
@@ -314,10 +305,11 @@ public static function getSessionFromRequest()
                     $c->toArray()
                 );
             }
-            Logger::error('Error creating session: '.$e->getMessage());
+            Logger::error('Error creating session: ' . $e->getMessage());
         }
 
         // we must have a session now, either regular or transient
+        /** @var \SimpleSAML\Session */
         return self::$instance;
     }
 
@@ -413,6 +405,8 @@ private static function load(Session $session)
      *
      * Create a session that should not be saved at the end of the request.
      * Subsequent calls to getInstance() will return this transient session.
+     *
+     * @return void
      */
     public static function useTransientSession()
     {
@@ -428,6 +422,7 @@ public static function useTransientSession()
      * Create a new session and cache it.
      *
      * @param string $sessionId The new session we should create.
+     * @return void
      */
     public static function createSession($sessionId)
     {
@@ -442,9 +437,14 @@ public static function createSession($sessionId)
      *
      * WARNING: please do not use this method directly unless you really need to and know what you are doing. Use
      * markDirty() instead.
+     *
+     * @return void
      */
     public function save()
     {
+        // clean out old data
+        $this->expireData();
+
         if (!$this->dirty) {
             // session hasn't changed, don't bother saving it
             return;
@@ -471,6 +471,8 @@ public function save()
      *
      * Use this method if you are using PHP sessions in your application *and* in SimpleSAMLphp, *after* you are done
      * using SimpleSAMLphp and before trying to access your application's session again.
+     *
+     * @return void
      */
     public function cleanup()
     {
@@ -485,6 +487,8 @@ public function cleanup()
      * Mark this session as dirty.
      *
      * This method will register a callback to save the session right before any output is sent to the browser.
+     *
+     * @return void
      */
     public function markDirty()
     {
@@ -506,6 +510,8 @@ public function markDirty()
      *
      * Destructor for this class. It will save the session to the session handler
      * in case the session has been marked as dirty. Do nothing otherwise.
+     *
+     * @return void
      */
     public function __destruct()
     {
@@ -536,7 +542,7 @@ public function isTransient()
      * Get a unique ID that will be permanent for this session.
      * Used for debugging and tracing log files related to a session.
      *
-     * @return string|null The unique ID.
+     * @return string The unique ID.
      */
     public function getTrackID()
     {
@@ -557,6 +563,7 @@ public function getRememberMeExpire()
      * Set remember me expire time.
      *
      * @param int $expire Unix timestamp when remember me session cookies expire.
+     * @return void
      */
     public function setRememberMeExpire($expire = null)
     {
@@ -578,6 +585,7 @@ public function setRememberMeExpire($expire = null)
      *
      * @param string     $authority The authority the user logged in with.
      * @param array|null $data The authentication data for this authority.
+     * @return void
      *
      * @throws Error\CannotSetCookie If the authentication token cannot be set for some reason.
      */
@@ -586,7 +594,7 @@ public function doLogin($authority, array $data = null)
         assert(is_string($authority));
         assert(is_array($data) || $data === null);
 
-        Logger::debug('Session: doLogin("'.$authority.'")');
+        Logger::debug('Session: doLogin("' . $authority . '")');
 
         $this->markDirty();
 
@@ -629,7 +637,7 @@ public function doLogin($authority, array $data = null)
                 }
 
                 // create an AttributeValue object and save it to 'RawAttributes', using same attribute name and index
-                $attrval = new \SAML2\XML\saml\AttributeValue($value->item(0)->parentNode);
+                $attrval = new AttributeValue($value->item(0)->parentNode);
                 $data['RawAttributes'][$attribute][$idx] = $attrval;
             }
         }
@@ -639,8 +647,11 @@ public function doLogin($authority, array $data = null)
         $this->authToken = Utils\Random::generateID();
         $sessionHandler = SessionHandler::getSessionHandler();
 
-        if (!$this->transient && (!empty($data['RememberMe']) || $this->rememberMeExpire !== null) &&
-            self::$config->getBoolean('session.rememberme.enable', false)
+        if (
+            !$this->transient
+            && (!empty($data['RememberMe'])
+            || $this->rememberMeExpire !== null)
+            && self::$config->getBoolean('session.rememberme.enable', false)
         ) {
             $this->setRememberMeExpire();
         } else {
@@ -658,7 +669,7 @@ public function doLogin($authority, array $data = null)
                  */
                 unset($this->authToken);
                 unset($this->authData[$authority]);
-                Logger::error('Cannot set authentication token cookie: '.$e->getMessage());
+                Logger::error('Cannot set authentication token cookie: ' . $e->getMessage());
                 throw $e;
             }
         }
@@ -670,13 +681,14 @@ public function doLogin($authority, array $data = null)
      * This function will call any registered logout handlers before marking the user as logged out.
      *
      * @param string $authority The authentication source we are logging out of.
+     * @return void
      */
     public function doLogout($authority)
     {
-        Logger::debug('Session: doLogout('.var_export($authority, true).')');
+        Logger::debug('Session: doLogout(' . var_export($authority, true) . ')');
 
         if (!isset($this->authData[$authority])) {
-            Logger::debug('Session: Already logged out of '.$authority.'.');
+            Logger::debug('Session: Already logged out of ' . $authority . '.');
             return;
         }
 
@@ -695,6 +707,7 @@ public function doLogout($authority)
      * This function calls all registered logout handlers.
      *
      * @param string $authority The authentication source we are logging out from.
+     * @return void
      *
      * @throws \Exception If the handler is not a valid function or method.
      */
@@ -713,7 +726,7 @@ private function callLogoutHandlers($authority)
                 $functionname = $handler[1];
 
                 throw new \Exception(
-                    'Logout handler is not a valid function: '.$classname.'::'.
+                    'Logout handler is not a valid function: ' . $classname . '::' .
                     $functionname
                 );
             }
@@ -740,18 +753,18 @@ public function isValid($authority)
 
         if (!isset($this->authData[$authority])) {
             Logger::debug(
-                'Session: '.var_export($authority, true).
+                'Session: ' . var_export($authority, true) .
                 ' not valid because we are not authenticated.'
             );
             return false;
         }
 
         if ($this->authData[$authority]['Expire'] <= time()) {
-            Logger::debug('Session: '.var_export($authority, true).' not valid because it is expired.');
+            Logger::debug('Session: ' . var_export($authority, true) . ' not valid because it is expired.');
             return false;
         }
 
-        Logger::debug('Session: Valid session found with '.var_export($authority, true).'.');
+        Logger::debug('Session: Valid session found with ' . var_export($authority, true) . '.');
 
         return true;
     }
@@ -760,6 +773,7 @@ public function isValid($authority)
      * Update session cookies.
      *
      * @param array $params The parameters for the cookies.
+     * @return void
      */
     public function updateSessionCookies($params = null)
     {
@@ -787,6 +801,7 @@ public function updateSessionCookies($params = null)
      *
      * @param string $authority The authentication source we are setting expire time for.
      * @param int    $expire The number of seconds authentication source is valid.
+     * @return void
      */
     public function setAuthorityExpire($authority, $expire = null)
     {
@@ -808,6 +823,7 @@ public function setAuthorityExpire($authority, $expire = null)
      * @param string $authority The authority for which register the handler.
      * @param string $classname The class which contains the logout handler.
      * @param string $functionname The logout handler function.
+     * @return void
      *
      * @throws \Exception If the handler is not a valid function or method.
      */
@@ -819,7 +835,7 @@ public function registerLogoutHandler($authority, $classname, $functionname)
 
         if (!is_callable($logout_handler)) {
             throw new \Exception(
-                'Logout handler is not a valid function: '.$classname.'::'.
+                'Logout handler is not a valid function: ' . $classname . '::' .
                 $functionname
             );
         }
@@ -835,6 +851,7 @@ public function registerLogoutHandler($authority, $classname, $functionname)
      *
      * @param string $type The type of the data.
      * @param string $id The identifier of the data.
+     * @return void
      */
     public function deleteData($type, $id)
     {
@@ -861,6 +878,7 @@ public function deleteData($type, $id)
      * @param int|string|null $timeout The number of seconds this data should be stored after its last access.
      * This parameter is optional. The default value is set in 'session.datastore.timeout',
      * and the default is 4 hours.
+     * @return void
      *
      * @throws \Exception If the data couldn't be stored.
      *
@@ -871,16 +889,13 @@ public function setData($type, $id, $data, $timeout = null)
         assert(is_string($id));
         assert(is_int($timeout) || $timeout === null || $timeout === self::DATA_TIMEOUT_SESSION_END);
 
-        // clean out old data
-        $this->expireData();
-
         if ($timeout === null) {
             // use the default timeout
             $timeout = self::$config->getInteger('session.datastore.timeout', null);
             if ($timeout !== null) {
                 if ($timeout <= 0) {
                     throw new \Exception(
-                        'The value of the session.datastore.timeout'.
+                        'The value of the session.datastore.timeout' .
                         ' configuration option should be a positive integer.'
                     );
                 }
@@ -911,9 +926,7 @@ public function setData($type, $id, $data, $timeout = null)
     /**
      * This function removes expired data from the data store.
      *
-     * Note that this function doesn't mark the session object as dirty. This means that
-     * if the only change to the session object is that some data has expired, it will not be
-     * written back to the session store.
+     * @return void
      */
     private function expireData()
     {
@@ -928,6 +941,7 @@ private function expireData()
 
                 if ($ct > $info['expires']) {
                     unset($typedData[$id]);
+                    $this->markDirty();
                 }
             }
         }
@@ -953,8 +967,6 @@ public function getData($type, $id)
             return null;
         }
 
-        $this->expireData();
-
         if (!array_key_exists($type, $this->dataStore)) {
             return null;
         }
@@ -1000,7 +1012,7 @@ public function getDataOfType($type)
      *
      * @param string $authority The authority to retrieve the data from.
      *
-     * @return array  The current persistent authentication state, or null if not authenticated.
+     * @return array|null  The current persistent authentication state, or null if not authenticated.
      */
     public function getAuthState($authority)
     {
@@ -1033,6 +1045,7 @@ public function hasSessionCookie()
      *
      * @param string $idp The IdP id.
      * @param array  $association The association we should add.
+     * @return void
      */
     public function addAssociation($idp, array $association)
     {
@@ -1095,6 +1108,7 @@ public function getAssociations($idp)
      *
      * @param string $idp The IdP id.
      * @param string $associationId The id of the association.
+     * @return void
      */
     public function terminateAssociation($idp, $associationId)
     {
@@ -1153,6 +1167,7 @@ public function getAuthorities()
 
     /**
      * Clear any configuration information cached
+     * @return void
      */
     public static function clearInternalState()
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandler.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandler.php
index b7422609a6..91fc08b26d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandler.php
@@ -16,8 +16,6 @@
 
 abstract class SessionHandler
 {
-
-
     /**
      * This static variable contains a reference to the current
      * instance of the session handler. This variable will be NULL if
@@ -25,7 +23,7 @@ abstract class SessionHandler
      *
      * @var \SimpleSAML\SessionHandler
      */
-    protected static $sessionHandler = null;
+    protected static $sessionHandler;
 
 
     /**
@@ -34,6 +32,8 @@ abstract class SessionHandler
      * to this function.
      *
      * @return \SimpleSAML\SessionHandler The current session handler.
+     *
+     * @throws \Exception If we cannot instantiate the session handler.
      */
     public static function getSessionHandler()
     {
@@ -126,6 +126,10 @@ abstract public function setCookie($sessionName, $sessionID, array $cookieParams
      * selected in the 'store.type' configuration directive. If no
      * session handler is selected, then we will fall back to the default
      * PHP session handler.
+     *
+     * @return void
+     *
+     * @throws \Exception If we cannot instantiate the session handler.
      */
     private static function createSessionHandler()
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerCookie.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerCookie.php
index 7eea4656d9..556105f2e8 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerCookie.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerCookie.php
@@ -1,6 +1,5 @@
 <?php
 
-
 /**
  * This file is part of SimpleSAMLphp. See the file COPYING in the root of the distribution for licence information.
  *
@@ -14,11 +13,10 @@
 
 namespace SimpleSAML;
 
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Utils;
 
 abstract class SessionHandlerCookie extends SessionHandler
 {
-
     /**
      * This variable contains the current session id.
      *
@@ -154,6 +152,7 @@ public function hasSessionCookie()
      * @param string $sessionName The name of the session.
      * @param string|null $sessionID The session ID to use. Set to null to delete the cookie.
      * @param array|null $cookieParams Additional parameters to use for the session cookie.
+     * @return void
      *
      * @throws \SimpleSAML\Error\CannotSetCookie If we can't set the cookie.
      */
@@ -168,6 +167,6 @@ public function setCookie($sessionName, $sessionID, array $cookieParams = null)
             $params = $this->getCookieParams();
         }
 
-        HTTP::setCookie($sessionName, $sessionID, $params, true);
+        Utils\HTTP::setCookie($sessionName, $sessionID, $params, true);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerPHP.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerPHP.php
index 6045c59aac..c8c5a9fbbd 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerPHP.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerPHP.php
@@ -11,12 +11,11 @@
 
 namespace SimpleSAML;
 
-use SimpleSAML\Error\CannotSetCookie;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Error;
+use SimpleSAML\Utils;
 
 class SessionHandlerPHP extends SessionHandler
 {
-
     /**
      * This variable contains the session cookie name.
      *
@@ -52,8 +51,8 @@ protected function __construct()
         if (session_status() === PHP_SESSION_ACTIVE) {
             if (session_name() === $this->cookie_name || $this->cookie_name === null) {
                 Logger::warning(
-                    'There is already a PHP session with the same name as SimpleSAMLphp\'s session, or the '.
-                    "'session.phpsession.cookiename' configuration option is not set. Make sure to set ".
+                    'There is already a PHP session with the same name as SimpleSAMLphp\'s session, or the ' .
+                    "'session.phpsession.cookiename' configuration option is not set. Make sure to set " .
                     "SimpleSAMLphp's cookie name with a value not used by any other applications."
                 );
             }
@@ -68,16 +67,18 @@ protected function __construct()
             session_write_close();
         }
 
-        if (!empty($this->cookie_name)) {
-            session_name($this->cookie_name);
-        } else {
+
+        if (empty($this->cookie_name)) {
             $this->cookie_name = session_name();
+        } elseif (!headers_sent() || version_compare(PHP_VERSION, '7.2', '<')) {
+            session_name($this->cookie_name);
         }
 
         $params = $this->getCookieParams();
 
         if (!headers_sent()) {
-            if (\PHP_VERSION_ID >= 70300) {
+            if (version_compare(PHP_VERSION, '7.3.0', '>=')) {
+                /** @psalm-suppress InvalidArgument  This annotation may be removed in Psalm >=3.0.15 */
                 session_set_cookie_params([
                     'lifetime' => $params['lifetime'],
                     'path' => $params['path'],
@@ -87,14 +88,10 @@ protected function __construct()
                     'samesite' => $params['samesite'],
                 ]);
             } else {
-                /* in older versions of PHP we need a nasty hack to set RFC6265bis SameSite attribute */
-                if ($params['samesite'] !== null and !preg_match('/;\s+samesite/i', $params['path'])) {
-                    $params['path'] .= '; SameSite='.$params['samesite'];
-                }
                 session_set_cookie_params(
                     $params['lifetime'],
                     $params['path'],
-                    $params['domain'],
+                    is_null($params['domain']) ? '' : $params['domain'],
                     $params['secure'],
                     $params['httponly']
                 );
@@ -117,6 +114,8 @@ protected function __construct()
      * outside of \SimpleSAML\Session, could cause SimpleSAMLphp's session to be lost or mess the application's one. The
      * session must always be saved properly before calling this method. If you don't understand what this is about,
      * don't use this method.
+     *
+     * @return void
      */
     public function restorePrevious()
     {
@@ -128,7 +127,7 @@ public function restorePrevious()
         session_write_close();
 
         session_name($this->previous_session['name']);
-        if (\PHP_VERSION_ID >= 70300) {
+        if (version_compare(PHP_VERSION, '7.3.0', '>=')) {
             session_set_cookie_params($this->previous_session['cookie_params']);
         } else {
             session_set_cookie_params(
@@ -159,19 +158,29 @@ public function restorePrevious()
      */
     public function newSessionId()
     {
-        // generate new (secure) session id
-        if (function_exists('session_create_id') && version_compare(phpversion(), '7.3', '<')) {
+        $sessionId = false;
+        if (function_exists('session_create_id') && version_compare(PHP_VERSION, '7.2', '<')) {
+            // generate new (secure) session id
             $sid_length = (int) ini_get('session.sid_length');
             $sid_bits_per_char = (int) ini_get('session.sid_bits_per_character');
 
             if (($sid_length * $sid_bits_per_char) < 128) {
-                \SimpleSAML\Logger::warning("Unsafe defaults used for sessionId generation!");
+                Logger::warning("Unsafe defaults used for sessionId generation!");
             }
+
+            /**
+             * This annotation may be removed as soon as we start using vimeo/psalm 3.x
+             * @psalm-suppress TooFewArguments
+             */
             $sessionId = session_create_id();
-        } else {
+        }
+
+        if (!$sessionId) {
+            Logger::warning("Secure session ID generation failed, falling back to custom ID generation.");
             $sessionId = bin2hex(openssl_random_pseudo_bytes(16));
         }
-        \SimpleSAML\Session::createSession($sessionId);
+
+        Session::createSession($sessionId);
         return $sessionId;
     }
 
@@ -188,13 +197,18 @@ public function getCookieSessionId()
             return null; // there's no session cookie, can't return ID
         }
 
+        if (version_compare(PHP_VERSION, '7.2', 'ge') && headers_sent()) {
+            // latest versions of PHP don't allow loading a session when output sent, get the ID from the cookie
+            return $_COOKIE[$this->cookie_name];
+        }
+
         // do not rely on session_id() as it can return the ID of a previous session. Get it from the cookie instead.
         session_id($_COOKIE[$this->cookie_name]);
 
         $session_cookie_params = session_get_cookie_params();
 
-        if ($session_cookie_params['secure'] && !HTTP::isHTTPS()) {
-            throw new \SimpleSAML\Error\Exception('Session start with secure cookie not allowed on http.');
+        if ($session_cookie_params['secure'] && !Utils\HTTP::isHTTPS()) {
+            throw new Error\Exception('Session start with secure cookie not allowed on http.');
         }
 
         @session_start();
@@ -217,6 +231,7 @@ public function getSessionCookieName()
      * Save the current session to the PHP session array.
      *
      * @param \SimpleSAML\Session $session The session object we should save.
+     * @return void
      */
     public function saveSession(\SimpleSAML\Session $session)
     {
@@ -239,17 +254,17 @@ public function loadSession($sessionId = null)
         assert(is_string($sessionId) || $sessionId === null);
 
         if ($sessionId !== null) {
-            if (session_id() === '') {
+            if (session_id() === '' && !(version_compare(PHP_VERSION, '7.2', 'ge') && headers_sent())) {
                 // session not initiated with getCookieSessionId(), start session without setting cookie
                 $ret = ini_set('session.use_cookies', '0');
                 if ($ret === false) {
-                    throw new \SimpleSAML\Error\Exception('Disabling PHP option session.use_cookies failed.');
+                    throw new Error\Exception('Disabling PHP option session.use_cookies failed.');
                 }
 
                 session_id($sessionId);
                 @session_start();
             } elseif ($sessionId !== session_id()) {
-                throw new \SimpleSAML\Error\Exception('Cannot load PHP session with a specific ID.');
+                throw new Error\Exception('Cannot load PHP session with a specific ID.');
             }
         } elseif (session_id() === '') {
             $this->getCookieSessionId();
@@ -299,7 +314,7 @@ public function getCookieParams()
         $ret = parent::getCookieParams();
 
         if ($config->hasValue('session.phpsession.limitedpath') && $config->hasValue('session.cookie.path')) {
-            throw new \SimpleSAML\Error\Exception(
+            throw new Error\Exception(
                 'You cannot set both the session.phpsession.limitedpath and session.cookie.path options.'
             );
         } elseif ($config->hasValue('session.phpsession.limitedpath')) {
@@ -311,6 +326,13 @@ public function getCookieParams()
 
         $ret['httponly'] = $config->getBoolean('session.phpsession.httponly', true);
 
+        if (version_compare(PHP_VERSION, '7.3.0', '<')) {
+            // in older versions of PHP we need a nasty hack to set RFC6265bis SameSite attribute
+            if ($ret['samesite'] !== null and !preg_match('/;\s+samesite/i', $ret['path'])) {
+                $ret['path'] .= '; SameSite=' . $ret['samesite'];
+            }
+        }
+
         return $ret;
     }
 
@@ -321,6 +343,7 @@ public function getCookieParams()
      * @param string $sessionName The name of the session.
      * @param string|null $sessionID The session ID to use. Set to null to delete the cookie.
      * @param array|null $cookieParams Additional parameters to use for the session cookie.
+     * @return void
      *
      * @throws \SimpleSAML\Error\CannotSetCookie If we can't set the cookie.
      */
@@ -330,17 +353,17 @@ public function setCookie($sessionName, $sessionID, array $cookieParams = null)
             $cookieParams = session_get_cookie_params();
         }
 
-        if ($cookieParams['secure'] && !HTTP::isHTTPS()) {
-            throw new CannotSetCookie(
+        if ($cookieParams['secure'] && !Utils\HTTP::isHTTPS()) {
+            throw new Error\CannotSetCookie(
                 'Setting secure cookie on plain HTTP is not allowed.',
-                CannotSetCookie::SECURE_COOKIE
+                Error\CannotSetCookie::SECURE_COOKIE
             );
         }
 
         if (headers_sent()) {
-            throw new CannotSetCookie(
+            throw new Error\CannotSetCookie(
                 'Headers already sent.',
-                CannotSetCookie::HEADERS_SENT
+                Error\CannotSetCookie::HEADERS_SENT
             );
         }
 
@@ -349,19 +372,20 @@ public function setCookie($sessionName, $sessionID, array $cookieParams = null)
             session_write_close();
         }
 
-        if (\PHP_VERSION_ID >= 70300) {
+        if (version_compare(PHP_VERSION, '7.3.0', '>=')) {
+            /** @psalm-suppress InvalidArgument  This annotation may be removed in Psalm >=3.0.15 */
             session_set_cookie_params($cookieParams);
         } else {
             session_set_cookie_params(
                 $cookieParams['lifetime'],
                 $cookieParams['path'],
-                $cookieParams['domain'],
+                is_null($cookieParams['domain']) ? '' : $cookieParams['domain'],
                 $cookieParams['secure'],
                 $cookieParams['httponly']
             );
         }
 
-        session_id($sessionID);
+        session_id(strval($sessionID));
         @session_start();
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerStore.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerStore.php
index f40b9eb958..7406a5be6e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerStore.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/SessionHandlerStore.php
@@ -1,6 +1,5 @@
 <?php
 
-
 /**
  * Session storage in the data store.
  *
@@ -11,7 +10,6 @@
 
 class SessionHandlerStore extends SessionHandlerCookie
 {
-
     /**
      * The data store we save the session to.
      *
@@ -66,9 +64,16 @@ public function loadSession($sessionId = null)
      * Save a session to the data store.
      *
      * @param \SimpleSAML\Session $session The session object we should save.
+     * @return void
      */
     public function saveSession(Session $session)
     {
+        if ($session->isTransient()) {
+            // transient session, nothing to save
+            return;
+        }
+
+        /** @var string $sessionId */
         $sessionId = $session->getSessionId();
 
         $config = Configuration::getInstance();
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats.php
index 56d07c3022..25ff214ac0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats.php
@@ -38,7 +38,7 @@ class Stats
     private static function createOutput(\SimpleSAML\Configuration $config)
     {
         $cls = $config->getString('class');
-        $cls = \SimpleSAML\Module::resolveClass($cls, 'Stats\Output', '\SimpleSAML\Stats\Output');
+        $cls = Module::resolveClass($cls, 'Stats\Output', '\SimpleSAML\Stats\Output');
 
         $output = new $cls($config);
         return $output;
@@ -47,12 +47,14 @@ private static function createOutput(\SimpleSAML\Configuration $config)
 
     /**
      * Initialize the outputs.
+     *
+     * @return void
      */
     private static function initOutputs()
     {
 
-        $config = \SimpleSAML\Configuration::getInstance();
-        $outputCfgs = $config->getConfigList('statistics.out', []);
+        $config = Configuration::getInstance();
+        $outputCfgs = $config->getConfigList('statistics.out');
 
         self::$outputs = [];
         foreach ($outputCfgs as $cfg) {
@@ -83,7 +85,7 @@ public static function log($event, array $data = [])
 
         if (empty(self::$outputs)) {
             // not enabled
-            return;
+            return false;
         }
 
         $data['op'] = $event;
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats/Output.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats/Output.php
index a4a05ed44b..0790f6ac50 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats/Output.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Stats/Output.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Stats;
 
+use SimpleSAML\Configuration;
+
 /**
  * Interface for statistics outputs.
  *
@@ -15,7 +17,7 @@ abstract class Output
      *
      * @param \SimpleSAML\Configuration $config The configuration for this output.
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         // do nothing by default
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store.php
index 74e761e494..50d5b31622 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store.php
@@ -2,7 +2,7 @@
 
 namespace SimpleSAML;
 
-use SimpleSAML\Error\CriticalConfigurationError;
+use SimpleSAML\Error;
 
 /**
  * Base class for data stores.
@@ -16,7 +16,7 @@ abstract class Store implements Utils\ClearableState
      *
      * This is false if the data store isn't enabled, and null if we haven't attempted to initialize it.
      *
-     * @var \SimpleSAML\Store|bool|null
+     * @var \SimpleSAML\Store|false|null
      */
     private static $instance;
 
@@ -24,7 +24,7 @@ abstract class Store implements Utils\ClearableState
     /**
      * Retrieve our singleton instance.
      *
-     * @return false|\SimpleSAML\Store The data store, or false if it isn't enabled.
+     * @return \SimpleSAML\Store|false The data store, or false if it isn't enabled.
      *
      * @throws \SimpleSAML\Error\CriticalConfigurationError
      */
@@ -58,12 +58,13 @@ public static function getInstance()
                 } catch (\Exception $e) {
                     $c = $config->toArray();
                     $c['store.type'] = 'phpsession';
-                    throw new CriticalConfigurationError(
+                    throw new Error\CriticalConfigurationError(
                         "Invalid 'store.type' configuration option. Cannot find store '$storeType'.",
                         null,
                         $c
                     );
                 }
+                /** @var \SimpleSAML\Store|false */
                 self::$instance = new $className();
         }
 
@@ -104,6 +105,7 @@ abstract public function delete($type, $key);
 
     /**
      * Clear any SSP specific state, such as SSP environmental variables or cached internals.
+     * @return void
      */
     public static function clearInternalState()
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Memcache.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Memcache.php
index 209ae762f3..2a8da49a79 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Memcache.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Memcache.php
@@ -2,8 +2,8 @@
 
 namespace SimpleSAML\Store;
 
-use \SimpleSAML\Configuration;
-use \SimpleSAML\Store;
+use SimpleSAML\Configuration;
+use SimpleSAML\Store;
 
 /**
  * A memcache based data store.
@@ -42,7 +42,7 @@ public function get($type, $key)
         assert(is_string($type));
         assert(is_string($key));
 
-        return \SimpleSAML\Memcache::get($this->prefix.'.'.$type.'.'.$key);
+        return \SimpleSAML\Memcache::get($this->prefix . '.' . $type . '.' . $key);
     }
 
 
@@ -52,7 +52,8 @@ public function get($type, $key)
      * @param string $type The data type.
      * @param string $key The key.
      * @param mixed $value The value.
-     * @param int|NULL $expire  The expiration time (unix timestamp), or NULL if it never expires.
+     * @param int|null $expire The expiration time (unix timestamp), or NULL if it never expires.
+     * @return void
      */
     public function set($type, $key, $value, $expire = null)
     {
@@ -64,7 +65,7 @@ public function set($type, $key, $value, $expire = null)
             $expire = 0;
         }
 
-        \SimpleSAML\Memcache::set($this->prefix.'.'.$type.'.'.$key, $value, $expire);
+        \SimpleSAML\Memcache::set($this->prefix . '.' . $type . '.' . $key, $value, $expire);
     }
 
 
@@ -73,12 +74,13 @@ public function set($type, $key, $value, $expire = null)
      *
      * @param string $type The data type.
      * @param string $key The key.
+     * @return void
      */
     public function delete($type, $key)
     {
         assert(is_string($type));
         assert(is_string($key));
 
-        \SimpleSAML\Memcache::delete($this->prefix.'.'.$type.'.'.$key);
+        \SimpleSAML\Memcache::delete($this->prefix . '.' . $type . '.' . $key);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Redis.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Redis.php
index 310caa98f4..51c07cd77a 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Redis.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/Redis.php
@@ -2,8 +2,10 @@
 
 namespace SimpleSAML\Store;
 
-use \SimpleSAML\Configuration;
-use \SimpleSAML\Store;
+use Predis\Client;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Store;
 
 /**
  * A data store using Redis to keep the data.
@@ -12,17 +14,19 @@
  */
 class Redis extends Store
 {
+    /** @var \Predis\Client */
     public $redis;
 
     /**
      * Initialize the Redis data store.
+     * @param \Predis\Client|null $redis
      */
     public function __construct($redis = null)
     {
-        assert($redis === null || is_subclass_of($redis, 'Predis\\Client'));
+        assert($redis === null || is_subclass_of($redis, Client::class));
 
-        if (!class_exists('\Predis\Client')) {
-            throw new \SimpleSAML\Error\CriticalConfigurationError('predis/predis is not available.');
+        if (!class_exists(Client::class)) {
+            throw new Error\CriticalConfigurationError('predis/predis is not available.');
         }
 
         if ($redis === null) {
@@ -32,12 +36,14 @@ public function __construct($redis = null)
             $port = $config->getInteger('store.redis.port', 6379);
             $prefix = $config->getString('store.redis.prefix', 'SimpleSAMLphp');
             $password = $config->getString('store.redis.password', '');
+            $database = $config->getInteger('store.redis.database', 0);
 
-            $redis = new \Predis\Client(
+            $redis = new Client(
                 [
                     'scheme' => 'tcp',
                     'host' => $host,
                     'port' => $port,
+                    'database' => $database,
                 ] + (!empty($password) ? ['password' => $password] : []),
                 [
                     'prefix' => $prefix,
@@ -48,6 +54,7 @@ public function __construct($redis = null)
         $this->redis = $redis;
     }
 
+
     /**
      * Deconstruct the Redis data store.
      */
@@ -58,6 +65,7 @@ public function __destruct()
         }
     }
 
+
     /**
      * Retrieve a value from the data store.
      *
@@ -80,6 +88,7 @@ public function get($type, $key)
         return unserialize($result);
     }
 
+
     /**
      * Save a value in the data store.
      *
@@ -87,6 +96,7 @@ public function get($type, $key)
      * @param string $key The key to insert.
      * @param mixed $value The value itself.
      * @param int|null $expire The expiration time (unix timestamp), or null if it never expires.
+     * @return void
      */
     public function set($type, $key, $value, $expire = null)
     {
@@ -104,11 +114,13 @@ public function set($type, $key, $value, $expire = null)
         }
     }
 
+
     /**
      * Delete an entry from the data store.
      *
      * @param string $type The type of the data
      * @param string $key The key to delete.
+     * @return void
      */
     public function delete($type, $key)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/SQL.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/SQL.php
index 0f623df52e..0fc6c7991e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/SQL.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Store/SQL.php
@@ -2,9 +2,11 @@
 
 namespace SimpleSAML\Store;
 
-use \SimpleSAML\Configuration;
-use \SimpleSAML\Logger;
-use \SimpleSAML\Store;
+use PDO;
+use PDOException;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Store;
 
 /**
  * A data store using a RDBMS to keep the data.
@@ -58,13 +60,13 @@ public function __construct()
         $options = $config->getArray('store.sql.options', null);
         $this->prefix = $config->getString('store.sql.prefix', 'simpleSAMLphp');
         try {
-            $this->pdo = new \PDO($dsn, $username, $password, $options);
-        } catch (\PDOException $e) {
-            throw new \Exception("Database error: ".$e->getMessage());
+            $this->pdo = new PDO($dsn, $username, $password, $options);
+        } catch (PDOException $e) {
+            throw new \Exception("Database error: " . $e->getMessage());
         }
-        $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
-        $this->driver = $this->pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
+        $this->driver = $this->pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
 
         if ($this->driver === 'mysql') {
             $this->pdo->exec('SET time_zone = "+00:00"');
@@ -77,22 +79,23 @@ public function __construct()
 
     /**
      * Initialize the table-version table.
+     * @return void
      */
     private function initTableVersionTable()
     {
         $this->tableVersions = [];
 
         try {
-            $fetchTableVersion = $this->pdo->query('SELECT _name, _version FROM '.$this->prefix.'_tableVersion');
-        } catch (\PDOException $e) {
+            $fetchTableVersion = $this->pdo->query('SELECT _name, _version FROM ' . $this->prefix . '_tableVersion');
+        } catch (PDOException $e) {
             $this->pdo->exec(
-                'CREATE TABLE '.$this->prefix.
+                'CREATE TABLE ' . $this->prefix .
                 '_tableVersion (_name VARCHAR(30) NOT NULL UNIQUE, _version INTEGER NOT NULL)'
             );
             return;
         }
 
-        while (($row = $fetchTableVersion->fetch(\PDO::FETCH_ASSOC)) !== false) {
+        while (($row = $fetchTableVersion->fetch(PDO::FETCH_ASSOC)) !== false) {
             $this->tableVersions[$row['_name']] = (int) $row['_version'];
         }
     }
@@ -100,16 +103,23 @@ private function initTableVersionTable()
 
     /**
      * Initialize key-value table.
+     * @return void
      */
     private function initKVTable()
     {
         $current_version = $this->getTableVersion('kvstore');
 
         $text_t = 'TEXT';
+        $time_field = 'TIMESTAMP';
         if ($this->driver === 'mysql') {
             // TEXT data type has size constraints that can be hit at some point, so we use LONGTEXT instead
             $text_t = 'LONGTEXT';
         }
+        if ($this->driver === 'sqlsrv') {
+            // TIMESTAMP will not work for MSSQL. TIMESTAMP is automatically generated and cannot be inserted
+            //    so we use DATETIME instead
+            $time_field = 'DATETIME';
+        }
 
         /**
          * Queries for updates, grouped by version.
@@ -117,10 +127,12 @@ private function initKVTable()
          */
         $table_updates = [
             [
-                'CREATE TABLE '.$this->prefix.
-                '_kvstore (_type VARCHAR(30) NOT NULL, _key VARCHAR(50) NOT NULL, _value '.$text_t.
-                ' NOT NULL, _expire TIMESTAMP, PRIMARY KEY (_key, _type))',
-                'CREATE INDEX '.$this->prefix.'_kvstore_expire ON '.$this->prefix.'_kvstore (_expire)'
+                'CREATE TABLE ' . $this->prefix .
+                '_kvstore (_type VARCHAR(30) NOT NULL, _key VARCHAR(50) NOT NULL, _value ' . $text_t .
+                ' NOT NULL, _expire ' . $time_field . ', PRIMARY KEY (_key, _type))',
+                $this->driver === 'sqlite' || $this->driver === 'sqlsrv' || $this->driver === 'pgsql' ?
+                'CREATE INDEX ' . $this->prefix . '_kvstore_expire ON ' . $this->prefix . '_kvstore (_expire)' :
+                'ALTER TABLE ' . $this->prefix . '_kvstore ADD INDEX ' . $this->prefix . '_kvstore_expire (_expire)'
             ],
             /**
              * This upgrade removes the default NOT NULL constraint on the _expire field in MySQL.
@@ -129,16 +141,21 @@ private function initKVTable()
              *     Copy the current data to the new table
              *     Drop the old table
              *     Rename the new table correctly
-             *     Readd the index
+             *     Read the index
              */
             [
-                'CREATE TABLE '.$this->prefix.
-                '_kvstore_new (_type VARCHAR(30) NOT NULL, _key VARCHAR(50) NOT NULL, _value '.$text_t.
-                ' NOT NULL, _expire TIMESTAMP NULL, PRIMARY KEY (_key, _type))',
-                'INSERT INTO '.$this->prefix.'_kvstore_new SELECT * FROM '.$this->prefix.'_kvstore',
-                'DROP TABLE '.$this->prefix.'_kvstore',
-                'ALTER TABLE '.$this->prefix.'_kvstore_new RENAME TO '.$this->prefix.'_kvstore',
-                'CREATE INDEX '.$this->prefix.'_kvstore_expire ON '.$this->prefix.'_kvstore (_expire)'
+                'CREATE TABLE ' . $this->prefix .
+                '_kvstore_new (_type VARCHAR(30) NOT NULL, _key VARCHAR(50) NOT NULL, _value ' . $text_t .
+                ' NOT NULL, _expire ' . $time_field . ' NULL, PRIMARY KEY (_key, _type))',
+                'INSERT INTO ' . $this->prefix . '_kvstore_new SELECT * FROM ' . $this->prefix . '_kvstore',
+                'DROP TABLE ' . $this->prefix . '_kvstore',
+                // FOR MSSQL use EXEC sp_rename to rename a table (RENAME won't work)
+                $this->driver === 'sqlsrv' ?
+                'EXEC sp_rename ' . $this->prefix . '_kvstore_new, ' . $this->prefix . '_kvstore' :
+                'ALTER TABLE ' . $this->prefix . '_kvstore_new RENAME TO ' . $this->prefix . '_kvstore',
+                $this->driver === 'sqlite' || $this->driver === 'sqlsrv' || $this->driver === 'pgsql' ?
+                'CREATE INDEX ' . $this->prefix . '_kvstore_expire ON ' . $this->prefix . '_kvstore (_expire)' :
+                'ALTER TABLE ' . $this->prefix . '_kvstore ADD INDEX ' . $this->prefix . '_kvstore_expire (_expire)'
             ]
         ];
 
@@ -185,6 +202,7 @@ public function getTableVersion($name)
      *
      * @param string $name Table name.
      * @param int $version Table version.
+     * @return void
      */
     public function setTableVersion($name, $version)
     {
@@ -192,7 +210,7 @@ public function setTableVersion($name, $version)
         assert(is_int($version));
 
         $this->insertOrUpdate(
-            $this->prefix.'_tableVersion',
+            $this->prefix . '_tableVersion',
             ['_name'],
             ['_name' => $name, '_version' => $version]
         );
@@ -208,72 +226,71 @@ public function setTableVersion($name, $version)
      * @param string $table The table we should update.
      * @param array $keys The key columns.
      * @param array $data Associative array with columns.
+     * @return void
      */
     public function insertOrUpdate($table, array $keys, array $data)
     {
         assert(is_string($table));
 
-        $colNames = '('.implode(', ', array_keys($data)).')';
-        $values = 'VALUES(:'.implode(', :', array_keys($data)).')';
+        $colNames = '(' . implode(', ', array_keys($data)) . ')';
+        $values = 'VALUES(:' . implode(', :', array_keys($data)) . ')';
 
         switch ($this->driver) {
             case 'mysql':
-                $query = 'REPLACE INTO '.$table.' '.$colNames.' '.$values;
+                $query = 'REPLACE INTO ' . $table . ' ' . $colNames . ' ' . $values;
                 $query = $this->pdo->prepare($query);
                 $query->execute($data);
-                return;
+                break;
             case 'sqlite':
-                $query = 'INSERT OR REPLACE INTO '.$table.' '.$colNames.' '.$values;
+                $query = 'INSERT OR REPLACE INTO ' . $table . ' ' . $colNames . ' ' . $values;
                 $query = $this->pdo->prepare($query);
                 $query->execute($data);
-                return;
-        }
-
-        // default implementation, try INSERT, and UPDATE if that fails.
-        $insertQuery = 'INSERT INTO '.$table.' '.$colNames.' '.$values;
-        $insertQuery = $this->pdo->prepare($insertQuery);
-        try {
-            $insertQuery->execute($data);
-            return;
-        } catch (\PDOException $e) {
-            $ecode = (string) $e->getCode();
-            switch ($ecode) {
-                case '23000': // MSSQL
-                    break;
-                case '23505': // PostgreSQL
-                    break;
-                default:
-                    Logger::error('Error while saving data: '.$e->getMessage());
-                    throw $e;
-            }
+                break;
+            default:
+                $updateCols = [];
+                $condCols = [];
+                $condData = [];
+
+                foreach ($data as $col => $value) {
+                    $tmp = $col . ' = :' . $col;
+
+                    if (in_array($col, $keys, true)) {
+                        $condCols[] = $tmp;
+                        $condData[$col] = $value;
+                    } else {
+                        $updateCols[] = $tmp;
+                    }
+                }
+
+                $selectQuery = 'SELECT * FROM ' . $table . ' WHERE ' . implode(' AND ', $condCols);
+                $selectQuery = $this->pdo->prepare($selectQuery);
+                $selectQuery->execute($condData);
+
+                if (count($selectQuery->fetchAll()) > 0) {
+                    // Update
+                    $insertOrUpdateQuery = 'UPDATE ' . $table . ' SET ' . implode(',', $updateCols);
+                    $insertOrUpdateQuery .= ' WHERE ' . implode(' AND ', $condCols);
+                    $insertOrUpdateQuery = $this->pdo->prepare($insertOrUpdateQuery);
+                } else {
+                    // Insert
+                    $insertOrUpdateQuery = 'INSERT INTO ' . $table . ' ' . $colNames . ' ' . $values;
+                    $insertOrUpdateQuery = $this->pdo->prepare($insertOrUpdateQuery);
+                }
+                $insertOrUpdateQuery->execute($data);
+                break;
         }
-
-        $updateCols = [];
-        $condCols = [];
-        foreach ($data as $col => $value) {
-            $tmp = $col.' = :'.$col;
-
-            if (in_array($col, $keys, true)) {
-                $condCols[] = $tmp;
-            } else {
-                $updateCols[] = $tmp;
-            }
-        }
-
-        $updateQuery = 'UPDATE '.$table.' SET '.implode(',', $updateCols).' WHERE '.implode(' AND ', $condCols);
-        $updateQuery = $this->pdo->prepare($updateQuery);
-        $updateQuery->execute($data);
     }
 
 
     /**
      * Clean the key-value table of expired entries.
+     * @return void
      */
     private function cleanKVStore()
     {
         Logger::debug('store.sql: Cleaning key-value store.');
 
-        $query = 'DELETE FROM '.$this->prefix.'_kvstore WHERE _expire < :now';
+        $query = 'DELETE FROM ' . $this->prefix . '_kvstore WHERE _expire < :now';
         $params = ['now' => gmdate('Y-m-d H:i:s')];
 
         $query = $this->pdo->prepare($query);
@@ -298,14 +315,14 @@ public function get($type, $key)
             $key = sha1($key);
         }
 
-        $query = 'SELECT _value FROM '.$this->prefix.
+        $query = 'SELECT _value FROM ' . $this->prefix .
             '_kvstore WHERE _type = :type AND _key = :key AND (_expire IS NULL OR _expire > :now)';
         $params = ['type' => $type, 'key' => $key, 'now' => gmdate('Y-m-d H:i:s')];
 
         $query = $this->pdo->prepare($query);
         $query->execute($params);
 
-        $row = $query->fetch(\PDO::FETCH_ASSOC);
+        $row = $query->fetch(PDO::FETCH_ASSOC);
         if ($row === false) {
             return null;
         }
@@ -331,6 +348,7 @@ public function get($type, $key)
      * @param string $key The key to insert.
      * @param mixed $value The value itself.
      * @param int|null $expire The expiration time (unix timestamp), or null if it never expires.
+     * @return void
      */
     public function set($type, $key, $value, $expire = null)
     {
@@ -360,7 +378,7 @@ public function set($type, $key, $value, $expire = null)
             '_expire' => $expire,
         ];
 
-        $this->insertOrUpdate($this->prefix.'_kvstore', ['_type', '_key'], $data);
+        $this->insertOrUpdate($this->prefix . '_kvstore', ['_type', '_key'], $data);
     }
 
 
@@ -369,6 +387,7 @@ public function set($type, $key, $value, $expire = null)
      *
      * @param string $type The type of the data
      * @param string $key The key to delete.
+     * @return void
      */
     public function delete($type, $key)
     {
@@ -384,7 +403,7 @@ public function delete($type, $key)
             '_key'  => $key,
         ];
 
-        $query = 'DELETE FROM '.$this->prefix.'_kvstore WHERE _type=:_type AND _key=:_key';
+        $query = 'DELETE FROM ' . $this->prefix . '_kvstore WHERE _type=:_type AND _key=:_key';
         $query = $this->pdo->prepare($query);
         $query->execute($data);
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utilities.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utilities.php
index c6e04223e9..3ea08caa74 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utilities.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utilities.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML;
 
+use SimpleSAML\Error\Error;
+
 /**
  * Misc static functions that is used several places.in example parsing and id generation.
  *
@@ -15,12 +17,14 @@ class Utilities
 {
     /**
      * @deprecated This property will be removed in SSP 2.0. Please use SimpleSAML\Logger::isErrorMasked() instead.
+     * @var int
      */
     public static $logMask = 0;
 
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfHost() instead.
+     * @return string
      */
     public static function getSelfHost()
     {
@@ -30,6 +34,7 @@ public static function getSelfHost()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURLHost() instead.
+     * @return string
      */
     public static function selfURLhost()
     {
@@ -39,6 +44,7 @@ public static function selfURLhost()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::isHTTPS() instead.
+     * @return bool
      */
     public static function isHTTPS()
     {
@@ -49,6 +55,7 @@ public static function isHTTPS()
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURLNoQuery()
      *     instead.
+     * @return string
      */
     public static function selfURLNoQuery()
     {
@@ -59,6 +66,7 @@ public static function selfURLNoQuery()
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfHostWithPath()
      *     instead.
+     * @return string
      */
     public static function getSelfHostWithPath()
     {
@@ -69,6 +77,8 @@ public static function getSelfHostWithPath()
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getFirstPathElement()
      *     instead.
+     * @param bool $trailingslash
+     * @return string
      */
     public static function getFirstPathElement($trailingslash = true)
     {
@@ -78,6 +88,7 @@ public static function getFirstPathElement($trailingslash = true)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURL() instead.
+     * @return string
      */
     public static function selfURL()
     {
@@ -87,6 +98,7 @@ public static function selfURL()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getBaseURL() instead.
+     * @return string
      */
     public static function getBaseURL()
     {
@@ -96,6 +108,9 @@ public static function getBaseURL()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::addURLParameters() instead.
+     * @param string $url
+     * @param array $parameters
+     * @return string
      */
     public static function addURLparameter($url, $parameters)
     {
@@ -105,6 +120,9 @@ public static function addURLparameter($url, $parameters)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\HTTP::checkURLAllowed() instead.
+     * @param string $url
+     * @param array|null $trustedSites
+     * @return string
      */
     public static function checkURLAllowed($url, array $trustedSites = null)
     {
@@ -114,6 +132,8 @@ public static function checkURLAllowed($url, array $trustedSites = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Auth\State::parseStateID() instead.
+     * @param string $stateId
+     * @return array
      */
     public static function parseStateID($stateId)
     {
@@ -123,6 +143,9 @@ public static function parseStateID($stateId)
 
     /**
      * @deprecated This method will be removed in SSP 2.0.
+     * @param string|null $start
+     * @param string|null $end
+     * @return bool
      */
     public static function checkDateConditions($start = null, $end = null)
     {
@@ -147,6 +170,7 @@ public static function checkDateConditions($start = null, $end = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Random::generateID() instead.
+     * @return string
      */
     public static function generateID()
     {
@@ -157,6 +181,8 @@ public static function generateID()
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\Time::generateTimestamp()
      *     instead.
+     * @param int|null $instant
+     * @return string
      */
     public static function generateTimestamp($instant = null)
     {
@@ -166,6 +192,9 @@ public static function generateTimestamp($instant = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\Time::parseDuration() instead.
+     * @param string $duration
+     * @param int|null $timestamp
+     * @return int
      */
     public static function parseDuration($duration, $timestamp = null)
     {
@@ -175,6 +204,11 @@ public static function parseDuration($duration, $timestamp = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please raise a SimpleSAML\Error\Error exception instead.
+     * @param string $trackId
+     * @param int|null $errorCode
+     * @param \Exception|null $e
+     * @throws \SimpleSAML\Error\Error
+     * @return void
      */
     public static function fatalError($trackId = 'na', $errorCode = null, \Exception $e = null)
     {
@@ -184,6 +218,9 @@ public static function fatalError($trackId = 'na', $errorCode = null, \Exception
 
     /**
      * @deprecated This method will be removed in version 2.0. Use SimpleSAML\Utils\Net::ipCIDRcheck() instead.
+     * @param string $cidr
+     * @param string|null $ip
+     * @return bool
      */
     public static function ipCIDRcheck($cidr, $ip = null)
     {
@@ -191,6 +228,11 @@ public static function ipCIDRcheck($cidr, $ip = null)
     }
 
 
+    /**
+     * @param string $url
+     * @param array $parameters
+     * @return void
+     */
     private static function doRedirect($url, $parameters = [])
     {
         assert(is_string($url));
@@ -252,6 +294,10 @@ private static function doRedirect($url, $parameters = [])
     /**
      * @deprecated 1.12.0 This method will be removed from the API. Instead, use the redirectTrustedURL() or
      * redirectUntrustedURL() functions accordingly.
+     * @param string $url
+     * @param array $parameters
+     * @param array|null $allowed_redirect_hosts
+     * @return void
      */
     public static function redirect($url, $parameters = [], $allowed_redirect_hosts = null)
     {
@@ -271,6 +317,9 @@ public static function redirect($url, $parameters = [], $allowed_redirect_hosts
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::redirectTrustedURL()
      *     instead.
+     * @param string $url
+     * @param array $parameters
+     * @return void
      */
     public static function redirectTrustedURL($url, $parameters = [])
     {
@@ -281,6 +330,9 @@ public static function redirectTrustedURL($url, $parameters = [])
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::redirectUntrustedURL()
      *     instead.
+     * @param string $url
+     * @param array $parameters
+     * @return void
      */
     public static function redirectUntrustedURL($url, $parameters = [])
     {
@@ -290,6 +342,8 @@ public static function redirectUntrustedURL($url, $parameters = [])
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Arrays::transpose() instead.
+     * @param array $in
+     * @return mixed
      */
     public static function transposeArray($in)
     {
@@ -300,6 +354,10 @@ public static function transposeArray($in)
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::isDOMNodeOfType()
      *     instead.
+     * @param \DOMNode $element
+     * @param string $name
+     * @param string $nsURI
+     * @return bool
      */
     public static function isDOMElementOfType(\DOMNode $element, $name, $nsURI)
     {
@@ -309,6 +367,10 @@ public static function isDOMElementOfType(\DOMNode $element, $name, $nsURI)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::getDOMChildren() instead.
+     * @param \DOMElement $element
+     * @param string $localName
+     * @param string $namespaceURI
+     * @return array
      */
     public static function getDOMChildren(\DOMElement $element, $localName, $namespaceURI)
     {
@@ -318,6 +380,8 @@ public static function getDOMChildren(\DOMElement $element, $localName, $namespa
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::getDOMText() instead.
+     * @param \DOMNode $element
+     * @return string
      */
     public static function getDOMText($element)
     {
@@ -328,6 +392,7 @@ public static function getDOMText($element)
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getAcceptLanguage()
      *     instead.
+     * @return array
      */
     public static function getAcceptLanguage()
     {
@@ -337,6 +402,9 @@ public static function getAcceptLanguage()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::isValid() instead.
+     * @param string $xml
+     * @param string $schema
+     * @return string|false
      */
     public static function validateXML($xml, $schema)
     {
@@ -347,6 +415,9 @@ public static function validateXML($xml, $schema)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::checkSAMLMessage() instead.
+     * @param string $message
+     * @param string $type
+     * @return void
      */
     public static function validateXMLDocument($message, $type)
     {
@@ -356,6 +427,8 @@ public static function validateXMLDocument($message, $type)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use openssl_random_pseudo_bytes() instead.
+     * @param int $length
+     * @return string
      */
     public static function generateRandomBytes($length)
     {
@@ -367,6 +440,8 @@ public static function generateRandomBytes($length)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use bin2hex() instead.
+     * @param string $bytes
+     * @return string
      */
     public static function stringToHex($bytes)
     {
@@ -380,6 +455,9 @@ public static function stringToHex($bytes)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::resolvePath() instead.
+     * @param string $path
+     * @param string|null $base
+     * @return string
      */
     public static function resolvePath($path, $base = null)
     {
@@ -389,6 +467,9 @@ public static function resolvePath($path, $base = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::resolveURL() instead.
+     * @param string $url
+     * @param string|null $base
+     * @return string
      */
     public static function resolveURL($url, $base = null)
     {
@@ -398,6 +479,8 @@ public static function resolveURL($url, $base = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::normalizeURL() instead.
+     * @param string $url
+     * @return string
      */
     public static function normalizeURL($url)
     {
@@ -407,6 +490,8 @@ public static function normalizeURL($url)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::parseQueryString() instead.
+     * @param string $query_string
+     * @return array
      */
     public static function parseQueryString($query_string)
     {
@@ -417,6 +502,8 @@ public static function parseQueryString($query_string)
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use
      * SimpleSAML\Utils\Attributes::normalizeAttributesArray() instead.
+     * @param array $attributes
+     * @return array
      */
     public static function parseAttributes($attributes)
     {
@@ -426,6 +513,7 @@ public static function parseAttributes($attributes)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config::getSecretSalt() instead.
+     * @return string
      */
     public static function getSecretSalt()
     {
@@ -435,6 +523,7 @@ public static function getSecretSalt()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please call error_get_last() directly.
+     * @return string
      */
     public static function getLastError()
     {
@@ -454,6 +543,8 @@ public static function getLastError()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config::getCertPath() instead.
+     * @param string $path
+     * @return string
      */
     public static function resolveCert($path)
     {
@@ -463,6 +554,10 @@ public static function resolveCert($path)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::loadPublicKey() instead.
+     * @param \SimpleSAML\Configuration $metadata
+     * @param bool $required
+     * @param string $prefix
+     * @return array|null
      */
     public static function loadPublicKey(\SimpleSAML\Configuration $metadata, $required = false, $prefix = '')
     {
@@ -472,6 +567,10 @@ public static function loadPublicKey(\SimpleSAML\Configuration $metadata, $requi
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::loadPrivateKey() instead.
+     * @param \SimpleSAML\Configuration $metadata
+     * @param bool $required
+     * @param string $prefix
+     * @return array|null
      */
     public static function loadPrivateKey(\SimpleSAML\Configuration $metadata, $required = false, $prefix = '')
     {
@@ -481,6 +580,9 @@ public static function loadPrivateKey(\SimpleSAML\Configuration $metadata, $requ
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::formatDOMElement() instead.
+     * @param \DOMElement $root
+     * @param string $indentBase
+     * @return void
      */
     public static function formatDOMElement(\DOMElement $root, $indentBase = '')
     {
@@ -490,6 +592,9 @@ public static function formatDOMElement(\DOMElement $root, $indentBase = '')
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::formatXMLString() instead.
+     * @param string $xml
+     * @param string $indentBase
+     * @return string
      */
     public static function formatXMLString($xml, $indentBase = '')
     {
@@ -499,6 +604,9 @@ public static function formatXMLString($xml, $indentBase = '')
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Arrays::arrayize() instead.
+     * @param mixed $data
+     * @param int $index
+     * @return array
      */
     public static function arrayize($data, $index = 0)
     {
@@ -508,6 +616,7 @@ public static function arrayize($data, $index = 0)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::isAdmin() instead.
+     * @return bool
      */
     public static function isAdmin()
     {
@@ -517,6 +626,8 @@ public static function isAdmin()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::getAdminLoginURL instead();
+     * @param string|null $returnTo
+     * @return string
      */
     public static function getAdminLoginURL($returnTo = null)
     {
@@ -526,6 +637,7 @@ public static function getAdminLoginURL($returnTo = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::requireAdmin() instead.
+     * @return void
      */
     public static function requireAdmin()
     {
@@ -535,6 +647,9 @@ public static function requireAdmin()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::submitPOSTData() instead.
+     * @param string $destination
+     * @param array $post
+     * @return void
      */
     public static function postRedirect($destination, $post)
     {
@@ -545,6 +660,9 @@ public static function postRedirect($destination, $post)
     /**
      * @deprecated This method will be removed in SSP 2.0. PLease use SimpleSAML\Utils\HTTP::getPOSTRedirectURL()
      *     instead.
+     * @param string $destination
+     * @param array $post
+     * @return string
      */
     public static function createPostRedirectLink($destination, $post)
     {
@@ -555,6 +673,10 @@ public static function createPostRedirectLink($destination, $post)
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getPOSTRedirectURL()
      *     instead.
+     * @param string $destination
+     * @param array $post
+     * @return string
+     * @throws Error If the current session is a transient session.
      */
     public static function createHttpPostRedirectLink($destination, $post)
     {
@@ -568,6 +690,10 @@ public static function createHttpPostRedirectLink($destination, $post)
         ];
 
         $session = \SimpleSAML\Session::getSessionFromRequest();
+        if ($session->isTransient()) {
+            throw new Error('Cannot save data to a transient session');
+        }
+
         $session->setData('core_postdatalink', $postId, $postData);
 
         $redirInfo = base64_encode(\SimpleSAML\Utils\Crypto::aesEncrypt($session->getSessionId().':'.$postId));
@@ -581,6 +707,9 @@ public static function createHttpPostRedirectLink($destination, $post)
 
     /**
      * @deprecated This method will be removed in SSP 2.0.
+     * @param string $certificate
+     * @param string $caFile
+     * @return void
      */
     public static function validateCA($certificate, $caFile)
     {
@@ -590,6 +719,7 @@ public static function validateCA($certificate, $caFile)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Time::initTimezone() instead.
+     * @return void
      */
     public static function initTimezone()
     {
@@ -599,6 +729,10 @@ public static function initTimezone()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::writeFile() instead.
+     * @param string $filename
+     * @param string $data
+     * @param int $mode
+     * @return void
      */
     public static function writeFile($filename, $data, $mode = 0600)
     {
@@ -608,6 +742,7 @@ public static function writeFile($filename, $data, $mode = 0600)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::getTempDir instead.
+     * @return string
      */
     public static function getTempDir()
     {
@@ -617,6 +752,8 @@ public static function getTempDir()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Logger::maskErrors() instead.
+     * @param int $mask
+     * @return void
      */
     public static function maskErrors($mask)
     {
@@ -626,6 +763,7 @@ public static function maskErrors($mask)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Logger::popErrorMask() instead.
+     * @return void
      */
     public static function popErrorMask()
     {
@@ -636,6 +774,9 @@ public static function popErrorMask()
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use
      *     SimpleSAML\Utils\Config\Metadata::getDefaultEndpoint() instead.
+     * @param array $endpoints
+     * @param array|null $bindings
+     * @return array|null
      */
     public static function getDefaultEndpoint(array $endpoints, array $bindings = null)
     {
@@ -646,6 +787,8 @@ public static function getDefaultEndpoint(array $endpoints, array $bindings = nu
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::checkSessionCookie()
      *     instead.
+     * @param string|null $retryURL
+     * @return void
      */
     public static function checkCookie($retryURL = null)
     {
@@ -655,6 +798,9 @@ public static function checkCookie($retryURL = null)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::debugSAMLMessage() instead.
+     * @param string|\DOMElement $message
+     * @param string $type
+     * @return void
      */
     public static function debugMessage($message, $type)
     {
@@ -664,6 +810,10 @@ public static function debugMessage($message, $type)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::fetch() instead.
+     * @param string $path
+     * @param array $context
+     * @param bool $getHeaders
+     * @return string|array
      */
     public static function fetch($path, $context = [], $getHeaders = false)
     {
@@ -673,6 +823,8 @@ public static function fetch($path, $context = [], $getHeaders = false)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::aesEncrypt() instead.
+     * @param string $clear
+     * @return string
      */
     public static function aesEncrypt($clear)
     {
@@ -682,6 +834,8 @@ public static function aesEncrypt($clear)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::aesDecrypt() instead.
+     * @param string $encData
+     * @return string
      */
     public static function aesDecrypt($encData)
     {
@@ -691,6 +845,7 @@ public static function aesDecrypt($encData)
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::getOS() instead.
+     * @return bool
      */
     public static function isWindowsOS()
     {
@@ -700,6 +855,11 @@ public static function isWindowsOS()
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::setCookie() instead.
+     * @param string $name
+     * @param string|null $value
+     * @param array|null $params
+     * @param bool $throw
+     * @return void
      */
     public static function setCookie($name, $value, array $params = null, $throw = true)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Arrays.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Arrays.php
index c27b198eb0..b38d0ca5c7 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Arrays.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Arrays.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace SimpleSAML\Utils;
 
 /**
@@ -8,7 +9,6 @@
  */
 class Arrays
 {
-
     /**
      * Put a non-array variable into an array.
      *
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Attributes.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Attributes.php
index 88c87f1aa2..09e346ab6e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Attributes.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Attributes.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Utils;
 
+use SimpleSAML\Error;
+
 /**
  * Attribute-related utility methods.
  *
@@ -28,18 +30,18 @@ public static function getExpectedAttribute($attributes, $expected, $allow_multi
     {
         if (!is_array($attributes)) {
             throw new \InvalidArgumentException(
-                'The attributes array is not an array, it is: '.print_r($attributes, true).'.'
+                'The attributes array is not an array, it is: ' . print_r($attributes, true) . '.'
             );
         }
 
         if (!is_string($expected)) {
             throw new \InvalidArgumentException(
-                'The expected attribute is not a string, it is: '.print_r($expected, true).'.'
+                'The expected attribute is not a string, it is: ' . print_r($expected, true) . '.'
             );
         }
 
         if (!array_key_exists($expected, $attributes)) {
-            throw new \SimpleSAML\Error\Exception("No such attribute '".$expected."' found.");
+            throw new Error\Exception("No such attribute '" . $expected . "' found.");
         }
         $attribute = $attributes[$expected];
 
@@ -48,7 +50,7 @@ public static function getExpectedAttribute($attributes, $expected, $allow_multi
         }
 
         if (count($attribute) === 0) {
-            throw new \SimpleSAML\Error\Exception("Empty attribute '".$expected."'.'");
+            throw new Error\Exception("Empty attribute '" . $expected . "'.'");
         } elseif (count($attribute) > 1) {
             if ($allow_multiple === false) {
                 throw new \SimpleSAML\Error\Exception(
@@ -81,14 +83,14 @@ public static function normalizeAttributesArray($attributes)
     {
         if (!is_array($attributes)) {
             throw new \InvalidArgumentException(
-                'The attributes array is not an array, it is: '.print_r($attributes, true).'".'
+                'The attributes array is not an array, it is: ' . print_r($attributes, true) . '".'
             );
         }
 
         $newAttrs = [];
         foreach ($attributes as $name => $values) {
             if (!is_string($name)) {
-                throw new \InvalidArgumentException('Invalid attribute name: "'.print_r($name, true).'".');
+                throw new \InvalidArgumentException('Invalid attribute name: "' . print_r($name, true) . '".');
             }
 
             $values = Arrays::arrayize($values);
@@ -96,7 +98,7 @@ public static function normalizeAttributesArray($attributes)
             foreach ($values as $value) {
                 if (!is_string($value)) {
                     throw new \InvalidArgumentException(
-                        'Invalid attribute value for attribute '.$name.': "'.print_r($value, true).'".'
+                        'Invalid attribute value for attribute ' . $name . ': "' . print_r($value, true) . '".'
                     );
                 }
             }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Auth.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Auth.php
index 7cff78b27c..48cfcb16fc 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Auth.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Auth.php
@@ -1,7 +1,11 @@
 <?php
+
 namespace SimpleSAML\Utils;
 
+use SimpleSAML\Auth as Authentication;
+use SimpleSAML\Error;
 use SimpleSAML\Module;
+use SimpleSAML\Session;
 
 /**
  * Auth-related utility methods.
@@ -46,7 +50,7 @@ public static function getAdminLogoutURL($returnTo = null)
             throw new \InvalidArgumentException('Invalid input parameters.');
         }
 
-        $as = new \SimpleSAML\Auth\Simple('admin');
+        $as = new Authentication\Simple('admin');
         return $as->getLogoutURL($returnTo = null);
     }
 
@@ -60,7 +64,7 @@ public static function getAdminLogoutURL($returnTo = null)
      */
     public static function isAdmin()
     {
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         return $session->isValid('admin') || $session->isValid('login-admin');
     }
 
@@ -83,11 +87,11 @@ public static function requireAdmin()
         }
 
         // not authenticated as admin user, start authentication
-        if (\SimpleSAML\Auth\Source::getById('admin') !== null) {
-            $as = new \SimpleSAML\Auth\Simple('admin');
+        if (Authentication\Source::getById('admin') !== null) {
+            $as = new Authentication\Simple('admin');
             $as->login();
         } else {
-            throw new \SimpleSAML\Error\Exception(
+            throw new Error\Exception(
                 'Cannot find "admin" auth source, and admin privileges are required.'
             );
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config.php
index 5f25f8a0de..01f5f50c1d 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config.php
@@ -1,6 +1,9 @@
 <?php
+
 namespace SimpleSAML\Utils;
 
+use SimpleSAML\Configuration;
+
 /**
  * Utility class for SimpleSAMLphp configuration management and manipulation.
  *
@@ -24,7 +27,7 @@ public static function getCertPath($path)
             throw new \InvalidArgumentException('Invalid input parameters.');
         }
 
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
         $base = $globalConfig->getPathValue('certdir', 'cert/');
         return System::resolvePath($path, $base);
     }
@@ -47,7 +50,7 @@ public static function getCertPath($path)
      */
     public static function getSecretSalt()
     {
-        $secretSalt = \SimpleSAML\Configuration::getInstance()->getString('secretsalt');
+        $secretSalt = Configuration::getInstance()->getString('secretsalt');
         if ($secretSalt === 'defaultsecretsalt') {
             throw new \InvalidArgumentException('The "secretsalt" configuration option must be set to a secret value.');
         }
@@ -65,7 +68,7 @@ public static function getSecretSalt()
      */
     public static function getConfigDir()
     {
-        $configDir = dirname(dirname(dirname(__DIR__))).'/config';
+        $configDir = dirname(dirname(dirname(__DIR__))) . '/config';
         /** @var string|false $configDirEnv */
         $configDirEnv = getenv('SIMPLESAMLPHP_CONFIG_DIR');
         
@@ -77,7 +80,7 @@ public static function getConfigDir()
             if (!is_dir($configDirEnv)) {
                 throw new \InvalidArgumentException(
                     sprintf(
-                        'Config directory specified by environment variable SIMPLESAMLPHP_CONFIG_DIR is not a '.
+                        'Config directory specified by environment variable SIMPLESAMLPHP_CONFIG_DIR is not a ' .
                         'directory.  Given: "%s"',
                         $configDirEnv
                     )
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config/Metadata.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config/Metadata.php
index 7c66f290cd..eedb4f79fc 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config/Metadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Config/Metadata.php
@@ -1,6 +1,11 @@
 <?php
+
 namespace SimpleSAML\Utils\Config;
 
+use SAML2\Constants;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+
 /**
  * Class with utilities to fetch different configuration objects from metadata configuration arrays.
  *
@@ -106,17 +111,22 @@ public static function getContact($contact)
         // check the type
         if (!isset($contact['contactType']) || !in_array($contact['contactType'], self::$VALID_CONTACT_TYPES, true)) {
             $types = join(', ', array_map(
+                /**
+                 * @param string $t
+                 * @return string
+                 */
                 function ($t) {
-                    return '"'.$t.'"';
+                    return '"' . $t . '"';
                 },
                 self::$VALID_CONTACT_TYPES
             ));
-            throw new \InvalidArgumentException('"contactType" is mandatory and must be one of '.$types.".");
+            throw new \InvalidArgumentException('"contactType" is mandatory and must be one of ' . $types . ".");
         }
 
         // check attributes is an associative array
         if (isset($contact['attributes'])) {
-            if (empty($contact['attributes'])
+            if (
+                empty($contact['attributes'])
                 || !is_array($contact['attributes'])
                 || count(array_filter(array_keys($contact['attributes']), 'is_string')) === 0
             ) {
@@ -145,24 +155,33 @@ function ($t) {
         }
 
         // check givenName
-        if (isset($contact['givenName']) && (
-                empty($contact['givenName']) || !is_string($contact['givenName'])
+        if (
+            isset($contact['givenName'])
+            && (
+                empty($contact['givenName'])
+                || !is_string($contact['givenName'])
             )
         ) {
             throw new \InvalidArgumentException('"givenName" must be a string and cannot be empty.');
         }
 
         // check surName
-        if (isset($contact['surName']) && (
-                empty($contact['surName']) || !is_string($contact['surName'])
+        if (
+            isset($contact['surName'])
+            && (
+                empty($contact['surName'])
+                || !is_string($contact['surName'])
             )
         ) {
             throw new \InvalidArgumentException('"surName" must be a string and cannot be empty.');
         }
 
         // check company
-        if (isset($contact['company']) && (
-                empty($contact['company']) || !is_string($contact['company'])
+        if (
+            isset($contact['company'])
+            && (
+                empty($contact['company'])
+                || !is_string($contact['company'])
             )
         ) {
             throw new \InvalidArgumentException('"company" must be a string and cannot be empty.');
@@ -170,8 +189,12 @@ function ($t) {
 
         // check emailAddress
         if (isset($contact['emailAddress'])) {
-            if (empty($contact['emailAddress']) ||
-                !(is_string($contact['emailAddress']) || is_array($contact['emailAddress']))
+            if (
+                empty($contact['emailAddress'])
+                || !(
+                    is_string($contact['emailAddress'])
+                    || is_array($contact['emailAddress'])
+                )
             ) {
                 throw new \InvalidArgumentException('"emailAddress" must be a string or an array and cannot be empty.');
             }
@@ -186,8 +209,12 @@ function ($t) {
 
         // check telephoneNumber
         if (isset($contact['telephoneNumber'])) {
-            if (empty($contact['telephoneNumber']) ||
-                !(is_string($contact['telephoneNumber']) || is_array($contact['telephoneNumber']))
+            if (
+                empty($contact['telephoneNumber'])
+                || !(
+                    is_string($contact['telephoneNumber'])
+                    || is_array($contact['telephoneNumber'])
+                )
             ) {
                 throw new \InvalidArgumentException(
                     '"telephoneNumber" must be a string or an array and cannot be empty.'
@@ -273,9 +300,9 @@ public static function getDefaultEndpoint(array $endpoints, array $bindings = nu
      */
     public static function isHiddenFromDiscovery(array $metadata)
     {
-        \SimpleSAML\Logger::maskErrors(E_ALL);
+        Logger::maskErrors(E_ALL);
         $hidden = in_array(self::$HIDE_FROM_DISCOVERY, $metadata['EntityAttributes'][self::$ENTITY_CATEGORY], true);
-        \SimpleSAML\Logger::popErrorMask();
+        Logger::popErrorMask();
         return $hidden === true;
     }
 
@@ -293,12 +320,12 @@ public static function parseNameIdPolicy($nameIdPolicy)
 
         if (is_string($nameIdPolicy)) {
             // handle old configurations where 'NameIDPolicy' was used to specify just the format
-            $policy = ['Format' => $nameIdPolicy];
+            $policy = ['Format' => $nameIdPolicy, 'AllowCreate' => true];
         } elseif (is_array($nameIdPolicy)) {
             // handle current configurations specifying an array in the NameIDPolicy config option
-            $nameIdPolicy_cf = \SimpleSAML\Configuration::loadFromArray($nameIdPolicy);
+            $nameIdPolicy_cf = Configuration::loadFromArray($nameIdPolicy);
             $policy = [
-                'Format'      => $nameIdPolicy_cf->getString('Format', \SAML2\Constants::NAMEID_TRANSIENT),
+                'Format'      => $nameIdPolicy_cf->getString('Format', Constants::NAMEID_TRANSIENT),
                 'AllowCreate' => $nameIdPolicy_cf->getBoolean('AllowCreate', true),
             ];
             $spNameQualifier = $nameIdPolicy_cf->getString('SPNameQualifier', false);
@@ -307,7 +334,7 @@ public static function parseNameIdPolicy($nameIdPolicy)
             }
         } elseif ($nameIdPolicy === null) {
             // when NameIDPolicy is unset or set to null, default to transient as before
-            $policy = ['Format' => \SAML2\Constants::NAMEID_TRANSIENT];
+            $policy = ['Format' => Constants::NAMEID_TRANSIENT, 'AllowCreate' => true];
         }
 
         return $policy;
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Crypto.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Crypto.php
index 9c22461d96..a3f5b23727 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Crypto.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Crypto.php
@@ -25,7 +25,7 @@ class Crypto
      *
      * @see \SimpleSAML\Utils\Crypto::aesDecrypt()
      */
-    private static function _aesDecrypt($ciphertext, $secret)
+    private static function aesDecryptInternal($ciphertext, $secret)
     {
         if (!is_string($ciphertext)) {
             throw new \InvalidArgumentException(
@@ -51,7 +51,7 @@ private static function _aesDecrypt($ciphertext, $secret)
         $msg  = mb_substr($ciphertext, 48, $len - 48, '8bit');
 
         // authenticate the ciphertext
-        if (self::secureCompare(hash_hmac('sha256', $iv.$msg, substr($key, 64, 64), true), $hmac)) {
+        if (self::secureCompare(hash_hmac('sha256', $iv . $msg, substr($key, 64, 64), true), $hmac)) {
             $plaintext = openssl_decrypt(
                 $msg,
                 'AES-256-CBC',
@@ -83,7 +83,7 @@ private static function _aesDecrypt($ciphertext, $secret)
      */
     public static function aesDecrypt($ciphertext)
     {
-        return self::_aesDecrypt($ciphertext, Config::getSecretSalt());
+        return self::aesDecryptInternal($ciphertext, Config::getSecretSalt());
     }
 
 
@@ -99,7 +99,7 @@ public static function aesDecrypt($ciphertext)
      *
      * @see \SimpleSAML\Utils\Crypto::aesEncrypt()
      */
-    private static function _aesEncrypt($data, $secret)
+    private static function aesEncryptInternal($data, $secret)
     {
         if (!is_string($data)) {
             throw new \InvalidArgumentException('Input parameter "$data" must be a string.');
@@ -130,7 +130,7 @@ private static function _aesEncrypt($data, $secret)
         }
 
         // return the ciphertext with proper authentication
-        return hash_hmac('sha256', $iv.$ciphertext, substr($key, 64, 64), true).$iv.$ciphertext;
+        return hash_hmac('sha256', $iv . $ciphertext, substr($key, 64, 64), true) . $iv . $ciphertext;
     }
 
 
@@ -148,7 +148,7 @@ private static function _aesEncrypt($data, $secret)
      */
     public static function aesEncrypt($data)
     {
-        return self::_aesEncrypt($data, Config::getSecretSalt());
+        return self::aesEncryptInternal($data, Config::getSecretSalt());
     }
 
 
@@ -162,9 +162,9 @@ public static function aesEncrypt($data)
      */
     public static function der2pem($der, $type = 'CERTIFICATE')
     {
-        return "-----BEGIN ".$type."-----\n".
-            chunk_split(base64_encode($der), 64, "\n").
-            "-----END ".$type."-----\n";
+        return "-----BEGIN " . $type . "-----\n" .
+            chunk_split(base64_encode($der), 64, "\n") .
+            "-----END " . $type . "-----\n";
     }
 
 
@@ -201,7 +201,7 @@ public static function loadPrivateKey(Configuration $metadata, $required = false
             throw new \InvalidArgumentException('Invalid input parameters.');
         }
 
-        $file = $metadata->getString($prefix.'privatekey', null);
+        $file = $metadata->getString($prefix . 'privatekey', null);
         if ($file === null) {
             // no private key found
             if ($required) {
@@ -217,17 +217,14 @@ public static function loadPrivateKey(Configuration $metadata, $required = false
 
         $data = @file_get_contents($file);
         if ($data === false) {
-            throw new Error\Exception('Unable to load private key from file "'.$file.'"');
+            throw new Error\Exception('Unable to load private key from file "' . $file . '"');
         }
 
         $ret = [
             'PEM' => $data,
+            'password' => $metadata->getString($prefix . 'privatekey_pass', null),
         ];
 
-        if ($metadata->hasValue($prefix.'privatekey_pass')) {
-            $ret['password'] = $metadata->getString($prefix.'privatekey_pass');
-        }
-
         return $ret;
     }
 
@@ -250,7 +247,7 @@ public static function loadPrivateKey(Configuration $metadata, $required = false
      *   certificate.)
      *
      * @param \SimpleSAML\Configuration $metadata The metadata.
-     * @param bool                      $required Whether the private key is required. If this is TRUE, a missing key
+     * @param bool                      $required Whether the public key is required. If this is TRUE, a missing key
      *     will cause an exception. Default is FALSE.
      * @param string                    $prefix The prefix which should be used when reading from the metadata array.
      *     Defaults to ''.
@@ -258,7 +255,7 @@ public static function loadPrivateKey(Configuration $metadata, $required = false
      * @return array|NULL Public key or certificate data, or NULL if no public key or certificate was found.
      * @throws \InvalidArgumentException If $metadata is not an instance of \SimpleSAML\Configuration, $required is not
      *     boolean or $prefix is not a string.
-     * @throws Error\Exception If no private key is found in the metadata, or it was not possible to load
+     * @throws Error\Exception If no public key is found in the metadata, or it was not possible to load
      *     it.
      *
      * @author Andreas Solberg, UNINETT AS <andreas.solberg@uninett.no>
@@ -281,8 +278,8 @@ public static function loadPublicKey(Configuration $metadata, $required = false,
                     continue;
                 }
                 $certData = $key['X509Certificate'];
-                $pem = "-----BEGIN CERTIFICATE-----\n".
-                    chunk_split($certData, 64).
+                $pem = "-----BEGIN CERTIFICATE-----\n" .
+                    chunk_split($certData, 64) .
                     "-----END CERTIFICATE-----\n";
                 $certFingerprint = strtolower(sha1(base64_decode($certData)));
 
@@ -293,9 +290,9 @@ public static function loadPublicKey(Configuration $metadata, $required = false,
                 ];
             }
             // no valid key found
-        } elseif ($metadata->hasValue($prefix.'certFingerprint')) {
+        } elseif ($metadata->hasValue($prefix . 'certFingerprint')) {
             // we only have a fingerprint available
-            $fps = $metadata->getArrayizeString($prefix.'certFingerprint');
+            $fps = $metadata->getArrayizeString($prefix . 'certFingerprint');
 
             // normalize fingerprint(s) - lowercase and no colons
             foreach ($fps as &$fp) {
@@ -352,8 +349,8 @@ public static function pem2der($pem)
      * This function hashes a password with a given algorithm.
      *
      * @param string $password The password to hash.
-     * @param string|null $algorithm @deprecated The hashing algorithm, uppercase, optionally prepended with 'S' (salted). See
-     *     hash_algos() for a complete list of hashing algorithms.
+     * @param string|null $algorithm @deprecated The hashing algorithm, uppercase, optionally
+     *     prepended with 'S' (salted). See hash_algos() for a complete list of hashing algorithms.
      * @param string|null $salt @deprecated An optional salt to use.
      *
      * @return string The hashed password.
@@ -374,9 +371,9 @@ public static function pwHash($password, $algorithm = null, $salt = null)
             }
             // hash w/o salt
             if (in_array(strtolower($algorithm), hash_algos(), true)) {
-                $alg_str = '{'.str_replace('SHA1', 'SHA', $algorithm).'}'; // LDAP compatibility
+                $alg_str = '{' . str_replace('SHA1', 'SHA', $algorithm) . '}'; // LDAP compatibility
                 $hash = hash(strtolower($algorithm), $password, true);
-                return $alg_str.base64_encode($hash);
+                return $alg_str . base64_encode($hash);
             }
             // hash w/ salt
             if ($salt === null) {
@@ -388,17 +385,18 @@ public static function pwHash($password, $algorithm = null, $salt = null)
 
             if ($algorithm[0] == 'S' && in_array(substr(strtolower($algorithm), 1), hash_algos(), true)) {
                 $alg = substr(strtolower($algorithm), 1); // 'sha256' etc
-                $alg_str = '{'.str_replace('SSHA1', 'SSHA', $algorithm).'}'; // LDAP compatibility
-                $hash = hash($alg, $password.$salt, true);
-                return $alg_str.base64_encode($hash.$salt);
+                $alg_str = '{' . str_replace('SSHA1', 'SSHA', $algorithm) . '}'; // LDAP compatibility
+                $hash = hash($alg, $password . $salt, true);
+                return $alg_str . base64_encode($hash . $salt);
             }
-            throw new Error\Exception('Hashing algorithm \''.strtolower($algorithm).'\' is not supported');
+            throw new Error\Exception('Hashing algorithm \'' . strtolower($algorithm) . '\' is not supported');
         } else {
             if (!is_string($password)) {
                 throw new \InvalidArgumentException('Invalid input parameter.');
+            } elseif (!is_string($hash = password_hash($password, PASSWORD_DEFAULT))) {
+                throw new \InvalidArgumentException('Error while hashing password.');
             }
-
-            return password_hash($password, PASSWORD_DEFAULT);
+            return $hash;
         }
     }
 
@@ -416,22 +414,7 @@ public static function pwHash($password, $algorithm = null, $salt = null)
      */
     public static function secureCompare($known, $user)
     {
-        if (function_exists('hash_equals')) {
-            // use hash_equals() if available (PHP >= 5.6)
-            return hash_equals($known, $user);
-        }
-
-        // compare manually in constant time
-        $len = mb_strlen($known, '8bit'); // see mbstring.func_overload
-        if ($len !== mb_strlen($user, '8bit')) {
-            return false; // length differs
-        }
-        $diff = 0;
-        for ($i = 0; $i < $len; $i++) {
-            $diff |= ord($known[$i]) ^ ord($user[$i]);
-        }
-        // if all the bytes in $a and $b are identical, $diff should be equal to 0
-        return $diff === 0;
+        return hash_equals($known, $user);
     }
 
 
@@ -478,7 +461,7 @@ public static function pwValid($hash, $password)
                 $salt = substr(base64_decode($matches[2]), $hash_length);
                 return self::secureCompare($hash, self::pwHash($password, $alg, $salt));
             }
-            throw new Error\Exception('Hashing algorithm \''.strtolower($alg).'\' is not supported');
+            throw new Error\Exception('Hashing algorithm \'' . strtolower($alg) . '\' is not supported');
         } else {
             return $hash === $password;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/EMail.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/EMail.php
new file mode 100644
index 0000000000..a4f5322247
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/EMail.php
@@ -0,0 +1,305 @@
+<?php
+
+namespace SimpleSAML\Utils;
+
+use PHPMailer\PHPMailer\PHPMailer;
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\XHTML\Template;
+
+/**
+ * E-mailer class that can generate a formatted e-mail from array
+ * input data.
+ *
+ * @author Jørn Åne de Jong, Uninett AS <jorn.dejong@uninett.no>
+ * @package SimpleSAMLphp
+ */
+
+class EMail
+{
+    /** @var array Dictionary with multivalues */
+    private $data = [];
+
+    /** @var string Introduction text */
+    private $text = '';
+
+    /** @var PHPMailer The mailer instance */
+    private $mail;
+
+
+    /**
+     * Constructor
+     *
+     * If $from or $to is not provided, the <code>technicalcontact_email</code>
+     * from the configuration is used.
+     *
+     * @param string $subject The subject of the e-mail
+     * @param string $from The from-address (both envelope and header)
+     * @param string $to The recipient
+     *
+     * @throws \PHPMailer\PHPMailer\Exception
+     */
+    public function __construct($subject, $from = null, $to = null)
+    {
+        $this->mail = new PHPMailer(true);
+        $this->mail->Subject = $subject;
+        $this->mail->setFrom($from ?: static::getDefaultMailAddress());
+        $this->mail->addAddress($to ?: static::getDefaultMailAddress());
+
+        static::initFromConfig($this);
+    }
+
+
+    /**
+     * Get the default e-mail address from the configuration
+     * This is used both as source and destination address
+     * unless something else is provided at the constructor.
+     *
+     * It will refuse to return the SimpleSAMLphp default address,
+     * which is na@example.org.
+     *
+     * @return string Default mail address
+     */
+    public static function getDefaultMailAddress()
+    {
+        $config = Configuration::getInstance();
+        $address = $config->getString('technicalcontact_email', 'na@example.org');
+        $address = preg_replace('/^mailto:/i', '', $address);
+        if ('na@example.org' === $address) {
+            throw new \Exception('technicalcontact_email must be changed from the default value');
+        }
+        return $address;
+    }
+
+    
+    /**
+     * Set the data that should be embedded in the e-mail body
+     *
+     * @param array $data The data that should be embedded in the e-mail body
+     * @return void
+     */
+    public function setData(array $data)
+    {
+        /*
+         * Convert every non-array value to an array with the original
+         * as its only element. This guarantees that every value of $data
+         * can be iterated over.
+         */
+        $this->data = array_map(
+            /**
+             * @param mixed $v
+             * @return array
+             */
+            function ($v) {
+                return is_array($v) ? $v : [$v];
+            },
+            $data
+        );
+    }
+
+
+    /**
+     * Set an introduction text for the e-mail
+     *
+     * @param string $text Introduction text
+     * @return void
+     */
+    public function setText($text)
+    {
+        $this->text = $text;
+    }
+
+
+    /**
+     * Add a Reply-To address to the mail
+     *
+     * @param string $address Reply-To e-mail address
+     * @return void
+     */
+    public function addReplyTo($address)
+    {
+        $this->mail->addReplyTo($address);
+    }
+
+
+    /**
+     * Send the mail
+     *
+     * @param bool $plainTextOnly Do not send HTML payload
+     * @return void
+     *
+     * @throws \PHPMailer\PHPMailer\Exception
+     */
+    public function send($plainTextOnly = false)
+    {
+        if ($plainTextOnly) {
+            $this->mail->isHTML(false);
+            $this->mail->Body = $this->generateBody('mailtxt.twig');
+        } else {
+            $this->mail->isHTML(true);
+            $this->mail->Body = $this->generateBody('mailhtml.twig');
+            $this->mail->AltBody = $this->generateBody('mailtxt.twig');
+        }
+
+        $this->mail->send();
+    }
+
+    /**
+     * Sets the method by which the email will be sent.  Currently supports what
+     * PHPMailer supports: sendmail, mail and smtp.
+     *
+     * @param string $transportMethod the transport method
+     * @param array $transportOptions options for the transport method
+     *
+     * @return void
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setTransportMethod($transportMethod, array $transportOptions = [])
+    {
+        assert(is_string($transportMethod));
+        assert(is_array($transportOptions));
+
+
+        switch (strtolower($transportMethod)) {
+            // smtp transport method
+            case 'smtp':
+                $this->mail->isSMTP();
+
+                // set the host (required)
+                if (isset($transportOptions['host'])) {
+                    $this->mail->Host = $transportOptions['host'];
+                } else {
+                    // throw an exception otherwise
+                    throw new \InvalidArgumentException("Missing Required Email Transport Parameter 'host'");
+                }
+
+                // set the port (optional, assume standard SMTP port 25 if not provided)
+                $this->mail->Port = (isset($transportOptions['port'])) ? (int)$transportOptions['port'] : 25;
+
+                // smtp auth: enabled if username or password is set
+                if (isset($transportOptions['username']) || isset($transportOptions['password'])) {
+                    $this->mail->SMTPAuth = true;
+                }
+
+                // smtp auth: username
+                if (isset($transportOptions['username'])) {
+                    $this->mail->Username = $transportOptions['username'];
+                }
+
+                // smtp auth: password
+                if (isset($transportOptions['password'])) {
+                    $this->mail->Password = $transportOptions['password'];
+                }
+
+                // smtp security: encryption type
+                if (isset($transportOptions['secure'])) {
+                    $this->mail->SMTPSecure = $transportOptions['secure'];
+                }
+
+                // smtp security: enable or disable smtp auto tls
+                if (isset($transportOptions['autotls'])) {
+                    $this->mail->SMTPAutoTLS = (bool)$transportOptions['autotls'];
+                }
+                break;
+            //mail transport method
+            case 'mail':
+                $this->mail->isMail();
+                break;
+            // sendmail transport method
+            case 'sendmail':
+                $this->mail->isSendmail();
+
+                // override the default path of the sendmail executable
+                if (isset($transportOptions['path'])) {
+                    $this->mail->Sendmail = $transportOptions['path'];
+                }
+                break;
+            default:
+                throw new \InvalidArgumentException(
+                    "Invalid Mail Transport Method - Check 'mail.transport.method' Configuration Option"
+                );
+        }
+    }
+
+    /**
+     * Initializes the provided EMail object with the configuration provided from the SimpleSAMLphp configuration.
+     *
+     * @param EMail $EMail
+     * @return EMail
+     * @throws \Exception
+     */
+    public static function initFromConfig(EMail $EMail)
+    {
+        assert($EMail instanceof EMail);
+
+        $config = Configuration::getInstance();
+        $EMail->setTransportMethod(
+            $config->getString('mail.transport.method', 'mail'),
+            $config->getArrayize('mail.transport.options', [])
+        );
+
+        return $EMail;
+    }
+
+
+    /**
+     * Generate the body of the e-mail
+     *
+     * @param string $template The name of the template to use
+     *
+     * @return string The body of the e-mail
+     */
+    public function generateBody($template)
+    {
+        $config = Configuration::getInstance();
+        $newui = $config->getBoolean('usenewui', false);
+
+        if ($newui === false) {
+            $result = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<title>SimpleSAMLphp Email report</title>
+	<style type="text/css">
+pre, div.box {
+	margin: .4em 2em .4em 1em;
+	padding: 4px;
+}
+pre {
+	background: #eee;
+	border: 1px solid #aaa;
+}
+	</style>
+</head>
+<body>
+<h1>' . htmlspecialchars($this->mail->Subject) . '</h1>
+<div class="container" style="background: #fafafa; border: 1px solid #eee; margin: 2em; padding: .6em;">
+<blockquote>"' . htmlspecialchars($this->text) . '"</blockquote>
+</div>';
+            foreach ($this->data as $name => $values) {
+                $result .= '<h2>' . htmlspecialchars($name) . '</h2><ul>';
+                foreach ($values as $value) {
+                    $result .= '<li><pre>' . htmlspecialchars($value) . '</pre></li>';
+                }
+                $result .= '</ul>';
+            }
+        } else {
+            $t = new Template($config, $template);
+            $twig = $t->getTwig();
+            if (!isset($twig)) {
+                throw new \Exception(
+                    'Even though we explicitly configure that we want Twig,'
+                        . ' the Template class does not give us Twig. This is a bug.'
+                );
+            }
+            $result = $twig->render($template, [
+                'subject' => $this->mail->Subject,
+                'text' => $this->text,
+                'data' => $this->data
+            ]);
+        }
+        return $result;
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HTTP.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HTTP.php
index 300e89e189..016f09e0e0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HTTP.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HTTP.php
@@ -1,11 +1,13 @@
 <?php
+
 namespace SimpleSAML\Utils;
 
 use SimpleSAML\Configuration;
+use SimpleSAML\Error;
 use SimpleSAML\Logger;
 use SimpleSAML\Module;
 use SimpleSAML\Session;
-use SimpleSAML\Error;
+use SimpleSAML\XHTML\Template;
 
 /**
  * HTTP-related utility methods.
@@ -30,15 +32,16 @@ private static function getSecurePOSTRedirectURL($destination, $data)
         $session = Session::getSessionFromRequest();
         $id = self::savePOSTData($session, $destination, $data);
 
-        // get the session ID
-        $session_id = $session->getSessionId();
-        if (is_null($session_id)) {
+        if ($session->isTransient()) {
             // this is a transient session, it is pointless to continue
             throw new Error\Exception('Cannot save POST data to a transient session.');
         }
 
+        /** @var string $session_id */
+        $session_id = $session->getSessionId();
+
         // encrypt the session ID and the random ID
-        $info = base64_encode(Crypto::aesEncrypt($session_id.':'.$id));
+        $info = base64_encode(Crypto::aesEncrypt($session_id . ':' . $id));
 
         $url = Module::getModuleURL('core/postredirect.php', ['RedirInfo' => $info]);
         return preg_replace('#^https:#', 'http:', $url);
@@ -117,7 +120,7 @@ public static function getServerPort()
         $port = strval($port);
 
         if ($port !== $default_port) {
-            return ':'.$port;
+            return ':' . $port;
         }
         return '';
     }
@@ -137,7 +140,7 @@ public static function isValidURL($url)
             return false;
         }
         $scheme = parse_url($url, PHP_URL_SCHEME);
-        if ($scheme !== false && in_array(strtolower($scheme), ['http', 'https'], true)) {
+        if (is_string($scheme) && in_array(strtolower($scheme), ['http', 'https'], true)) {
             return true;
         }
         return false;
@@ -185,8 +188,9 @@ private static function redirect($url, $parameters = [])
          * 302 Found. HTTP 303 See Other is sent if the HTTP version
          * is HTTP/1.1 and the request type was a POST request.
          */
-        if ($_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1' &&
-            $_SERVER['REQUEST_METHOD'] === 'POST'
+        if (
+            $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1'
+            && $_SERVER['REQUEST_METHOD'] === 'POST'
         ) {
             $code = 303;
         } else {
@@ -199,7 +203,7 @@ private static function redirect($url, $parameters = [])
 
         if (!headers_sent()) {
             // set the location header
-            header('Location: '.$url, true, $code);
+            header('Location: ' . $url, true, $code);
 
             // disable caching of this response
             header('Pragma: no-cache');
@@ -207,20 +211,20 @@ private static function redirect($url, $parameters = [])
         }
 
         // show a minimal web page with a clickable link to the URL
-        echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
+        echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
         echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"';
-        echo ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n";
-        echo '<html xmlns="http://www.w3.org/1999/xhtml">'."\n";
+        echo ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' . "\n";
+        echo '<html xmlns="http://www.w3.org/1999/xhtml">' . "\n";
         echo "  <head>\n";
-        echo '    <meta http-equiv="content-type" content="text/html; charset=utf-8">'."\n";
-        echo '    <meta http-equiv="refresh" content="0;URL=\''.htmlspecialchars($url).'\'">'."\n";
+        echo '    <meta http-equiv="content-type" content="text/html; charset=utf-8">' . "\n";
+        echo '    <meta http-equiv="refresh" content="0;URL=\'' . htmlspecialchars($url) . '\'">' . "\n";
         echo "    <title>Redirect</title>\n";
         echo "  </head>\n";
         echo "  <body>\n";
         echo "    <h1>Redirect</h1>\n";
-        echo '      <p>You were redirected to: <a id="redirlink" href="'.htmlspecialchars($url).'">';
-        echo htmlspecialchars($url)."</a>\n";
-        echo '        <script type="text/javascript">document.getElementById("redirlink").focus();</script>'."\n";
+        echo '      <p>You were redirected to: <a id="redirlink" href="' . htmlspecialchars($url) . '">';
+        echo htmlspecialchars($url) . "</a>\n";
+        echo '        <script type="text/javascript">document.getElementById("redirlink").focus();</script>' . "\n";
         echo "      </p>\n";
         echo "  </body>\n";
         echo '</html>';
@@ -354,7 +358,7 @@ public static function checkURLAllowed($url, array $trustedSites = null)
         $url = self::normalizeURL($url);
 
         if (!self::isValidURL($url)) {
-            throw new Error\Exception('Invalid URL: '.$url);
+            throw new Error\Exception('Invalid URL: ' . $url);
         }
 
         // get the white list of domains
@@ -364,23 +368,28 @@ public static function checkURLAllowed($url, array $trustedSites = null)
 
         // validates the URL's host is among those allowed
         if (is_array($trustedSites)) {
-            assert(is_array($trustedSites));
             $components = parse_url($url);
             $hostname = $components['host'];
 
             // check for userinfo
-            if ((isset($components['user']) && strpos($components['user'], '\\') !== false) ||
-                (isset($components['pass']) && strpos($components['pass'], '\\') !== false)
+            if (
+                (isset($components['user'])
+                && strpos($components['user'], '\\') !== false)
+                || (isset($components['pass'])
+                && strpos($components['pass'], '\\') !== false)
             ) {
-                throw new Error\Exception('Invalid URL: '.$url);
+                throw new Error\Exception('Invalid URL: ' . $url);
             }
 
             // allow URLs with standard ports specified (non-standard ports must then be allowed explicitly)
-            if (isset($components['port']) &&
-                (($components['scheme'] === 'http' && $components['port'] !== 80) ||
-                 ($components['scheme'] === 'https' && $components['port'] !== 443))
+            if (
+                isset($components['port'])
+                && (($components['scheme'] === 'http'
+                && $components['port'] !== 80)
+                || ($components['scheme'] === 'https'
+                && $components['port'] !== 443))
             ) {
-                $hostname = $hostname.':'.$components['port'];
+                $hostname = $hostname . ':' . $components['port'];
             }
 
             $self_host = self::getSelfHostWithNonStandardPort();
@@ -407,7 +416,7 @@ public static function checkURLAllowed($url, array $trustedSites = null)
 
             // throw exception due to redirection to untrusted site
             if (!$trusted) {
-                throw new Error\Exception('URL not allowed: '.$url);
+                throw new Error\Exception('URL not allowed: ' . $url);
             }
         }
         return $url;
@@ -448,7 +457,7 @@ public static function fetch($url, $context = [], $getHeaders = false)
             }
             $proxy_auth = $config->getString('proxy.auth', false);
             if ($proxy_auth !== false) {
-                $context['http']['header'] = "Proxy-Authorization: Basic ".base64_encode($proxy_auth);
+                $context['http']['header'] = "Proxy-Authorization: Basic " . base64_encode($proxy_auth);
             }
             if (!isset($context['http']['request_fulluri'])) {
                 $context['http']['request_fulluri'] = true;
@@ -461,7 +470,8 @@ public static function fetch($url, $context = [], $getHeaders = false)
              * These controls will force the same value for both fields.
              * Marco Ferrante (marco@csita.unige.it), Nov 2012
              */
-            if (preg_match('#^https#i', $url)
+            if (
+                preg_match('#^https#i', $url)
                 && defined('OPENSSL_TLSEXT_SERVER_NAME')
                 && OPENSSL_TLSEXT_SERVER_NAME
             ) {
@@ -482,14 +492,20 @@ public static function fetch($url, $context = [], $getHeaders = false)
         $data = @file_get_contents($url, false, $context);
         if ($data === false) {
             $error = error_get_last();
-            throw new Error\Exception('Error fetching '.var_export($url, true).':'.
+            throw new Error\Exception('Error fetching ' . var_export($url, true) . ':' .
                 (is_array($error) ? $error['message'] : 'no error available'));
         }
 
         // data and headers
         if ($getHeaders) {
-            if (isset($http_response_header)) {
+            /**
+             * @psalm-suppress UndefinedVariable    Remove when Psalm >= 3.0.17
+             */
+            if (!empty($http_response_header)) {
                 $headers = [];
+                /**
+                 * @psalm-suppress UndefinedVariable    Remove when Psalm >= 3.0.17
+                 */
                 foreach ($http_response_header as $h) {
                     if (preg_match('@^HTTP/1\.[01]\s+\d{3}\s+@', $h)) {
                         $headers = []; // reset
@@ -597,7 +613,7 @@ public static function guessBasePath()
         $script = array_pop($path);
 
         // get the portion of the URI up to the script, i.e.: /simplesaml/some/directory/script.php
-        if (!preg_match('#^/(?:[^/]+/)*'.$script.'#', $_SERVER['REQUEST_URI'], $matches)) {
+        if (!preg_match('#^/(?:[^/]+/)*' . $script . '#', $_SERVER['REQUEST_URI'], $matches)) {
             return '/';
         }
         $uri_s = explode('/', $matches[0]);
@@ -609,7 +625,7 @@ public static function guessBasePath()
             array_pop($file_s);
         }
         // we are now left with the minimum part of the URI that does not match anything in the file system, use it
-        return join('/', $uri_s).'/';
+        return join('/', $uri_s) . '/';
     }
 
 
@@ -629,10 +645,11 @@ public static function getBaseURL()
 
         if (preg_match('#^https?://.*/?$#D', $baseURL, $matches)) {
             // full URL in baseurlpath, override local server values
-            return rtrim($baseURL, '/').'/';
-        } elseif ((preg_match('#^/?([^/]?.*/)$#D', $baseURL, $matches)) ||
-            (preg_match('#^\*(.*)/$#D', $baseURL, $matches)) ||
-            ($baseURL === '')
+            return rtrim($baseURL, '/') . '/';
+        } elseif (
+            (preg_match('#^/?([^/]?.*/)$#D', $baseURL, $matches))
+            || (preg_match('#^\*(.*)/$#D', $baseURL, $matches))
+            || ($baseURL === '')
         ) {
             // get server values
             $protocol = 'http';
@@ -643,7 +660,7 @@ public static function getBaseURL()
             $port = self::getServerPort();
             $path = $globalConfig->getBasePath();
 
-            return $protocol.$hostname.$port.$path;
+            return $protocol . $hostname . $port . $path;
         } else {
             /*
              * Invalid 'baseurlpath'. We cannot recover from this, so throw a critical exception and try to be graceful
@@ -652,7 +669,7 @@ public static function getBaseURL()
             $c = $globalConfig->toArray();
             $c['baseurlpath'] = self::guessBasePath();
             throw new Error\CriticalConfigurationError(
-                'Invalid value for \'baseurlpath\' in config.php. Valid format is in the form: '.
+                'Invalid value for \'baseurlpath\' in config.php. Valid format is in the form: ' .
                 '[(http|https)://(hostname|fqdn)[:port]]/[path/to/simplesaml/]. It must end with a \'/\'.',
                 null,
                 $c
@@ -673,7 +690,7 @@ public static function getBaseURL()
     public static function getFirstPathElement($leadingSlash = true)
     {
         if (preg_match('|^/(.*?)/|', $_SERVER['SCRIPT_NAME'], $matches)) {
-            return ($leadingSlash ? '/' : '').$matches[1];
+            return ($leadingSlash ? '/' : '') . $matches[1];
         }
         return '';
     }
@@ -753,6 +770,7 @@ public static function getSelfHostWithNonStandardPort()
         return substr($url, $start, $length);
     }
 
+
     /**
      * Retrieve our own host together with the URL path. Please note this function will return the base URL for the
      * current SP, as defined in the global configuration.
@@ -767,7 +785,7 @@ public static function getSelfHostWithPath()
         $baseurl = explode("/", self::getBaseURL());
         $elements = array_slice($baseurl, 3 - count($baseurl), count($baseurl) - 4);
         $path = implode("/", $elements);
-        return self::getSelfHostWithNonStandardPort()."/".$path;
+        return self::getSelfHostWithNonStandardPort() . "/" . $path;
     }
 
 
@@ -794,7 +812,7 @@ public static function getSelfURL()
         // make sure we got a string from realpath()
         $cur_path = is_string($cur_path) ? $cur_path : '';
         // find the path to the current script relative to the www/ directory of SimpleSAMLphp
-        $rel_path = str_replace($baseDir.'www'.DIRECTORY_SEPARATOR, '', $cur_path);
+        $rel_path = str_replace($baseDir . 'www' . DIRECTORY_SEPARATOR, '', $cur_path);
         // convert that relative path to an HTTP query
         $url_path = str_replace(DIRECTORY_SEPARATOR, '/', $rel_path);
         // find where the relative path starts in the current request URI
@@ -820,24 +838,23 @@ public static function getSelfURL()
              */
 
             /** @var \SimpleSAML\Configuration $appcfg */
-            $appcfg = $cfg->getConfigItem('application', null);
-            $appurl = ($appcfg instanceof Configuration) ? $appcfg->getString('baseURL', '') : '';
+            $appcfg = $cfg->getConfigItem('application');
+            $appurl = $appcfg->getString('baseURL', '');
             if (!empty($appurl)) {
                 $protocol = parse_url($appurl, PHP_URL_SCHEME);
                 $hostname = parse_url($appurl, PHP_URL_HOST);
                 $port = parse_url($appurl, PHP_URL_PORT);
-                $port = !empty($port) ? ':'.$port : '';
+                $port = !empty($port) ? ':' . $port : '';
             } else {
                 // no base URL specified for app, just use the current URL
-                $protocol = 'http';
-                $protocol .= (self::getServerHTTPS()) ? 's' : '';
+                $protocol = self::getServerHTTPS() ? 'https' : 'http';
                 $hostname = self::getServerHost();
                 $port = self::getServerPort();
             }
-            return $protocol.'://'.$hostname.$port.$_SERVER['REQUEST_URI'];
+            return $protocol . '://' . $hostname . $port . $_SERVER['REQUEST_URI'];
         }
 
-        return self::getBaseURL().$url_path.substr($_SERVER['REQUEST_URI'], $uri_pos + strlen($url_path));
+        return self::getBaseURL() . $url_path . substr($_SERVER['REQUEST_URI'], $uri_pos + strlen($url_path));
     }
 
 
@@ -917,7 +934,7 @@ public static function normalizeURL($url)
 
         // verify that the URL is to a http or https site
         if (!preg_match('@^https?://@i', $url)) {
-            throw new \InvalidArgumentException('Invalid URL: '.$url);
+            throw new \InvalidArgumentException('Invalid URL: ' . $url);
         }
 
         return $url;
@@ -1061,10 +1078,10 @@ public static function resolveURL($url, $base = null)
         }
 
         if (!preg_match('/^((((\w+:)\/\/[^\/]+)(\/[^?#]*))(?:\?[^#]*)?)(?:#.*)?/', $base, $baseParsed)) {
-            throw new \InvalidArgumentException('Unable to parse base url: '.$base);
+            throw new \InvalidArgumentException('Unable to parse base url: ' . $base);
         }
 
-        $baseDir = dirname($baseParsed[5].'filename');
+        $baseDir = dirname($baseParsed[5] . 'filename');
         $baseScheme = $baseParsed[4];
         $baseHost = $baseParsed[3];
         $basePath = $baseParsed[2];
@@ -1075,17 +1092,17 @@ public static function resolveURL($url, $base = null)
         }
 
         if (substr($url, 0, 2) === '//') {
-            return $baseScheme.$url;
+            return $baseScheme . $url;
         }
 
         if ($url[0] === '/') {
-            return $baseHost.$url;
+            return $baseHost . $url;
         }
         if ($url[0] === '?') {
-            return $basePath.$url;
+            return $basePath . $url;
         }
         if ($url[0] === '#') {
-            return $baseQuery.$url;
+            return $baseQuery . $url;
         }
 
         // we have a relative path. Remove query string/fragment and save it as $tail
@@ -1111,7 +1128,7 @@ public static function resolveURL($url, $base = null)
 
         $dir = System::resolvePath($dir, $baseDir);
 
-        return $baseHost.$dir.$tail;
+        return $baseHost . $dir . $tail;
     }
 
 
@@ -1133,10 +1150,13 @@ public static function resolveURL($url, $base = null)
      */
     public static function setCookie($name, $value, $params = null, $throw = true)
     {
-        if (!(is_string($name) && // $name must be a string
-            (is_string($value) || is_null($value)) && // $value can be a string or null
-            (is_array($params) || is_null($params)) && // $params can be an array or null
-            is_bool($throw)) // $throw must be boolean
+        if (
+            !(is_string($name) // $name must be a string
+            && (is_string($value)
+            || is_null($value)) // $value can be a string or null
+            && (is_array($params)
+            || is_null($params)) // $params can be an array or null
+            && is_bool($throw)) // $throw must be boolean
         ) {
             throw new \InvalidArgumentException('Invalid input parameters.');
         }
@@ -1172,17 +1192,19 @@ public static function setCookie($name, $value, $params = null, $throw = true)
 
         if ($value === null) {
             $expire = time() - 365 * 24 * 60 * 60;
+            $value = strval($value);
         } elseif (isset($params['expire'])) {
-            $expire = $params['expire'];
+            $expire = intval($params['expire']);
         } elseif ($params['lifetime'] === 0) {
             $expire = 0;
         } else {
-            $expire = time() + $params['lifetime'];
+            $expire = time() + intval($params['lifetime']);
         }
 
-        if (\PHP_VERSION_ID >= 70300) {
+        if (version_compare(PHP_VERSION, '7.3.0', '>=')) {
             /* use the new options array for PHP >= 7.3 */
             if ($params['raw']) {
+                /** @psalm-suppress InvalidArgument  Remove when Psalm >= 3.4.10 */
                 $success = @setrawcookie(
                     $name,
                     $value,
@@ -1196,6 +1218,7 @@ public static function setCookie($name, $value, $params = null, $throw = true)
                     ]
                 );
             } else {
+                /** @psalm-suppress InvalidArgument  Remove when Psalm >= 3.4.10 */
                 $success = @setcookie(
                     $name,
                     $value,
@@ -1211,8 +1234,8 @@ public static function setCookie($name, $value, $params = null, $throw = true)
             }
         } else {
             /* in older versions of PHP we need a nasty hack to set RFC6265bis SameSite attribute */
-            if ($params['samesite'] !== null and !preg_match('/;\s+samesite/i', $params['path'])) {
-                $params['path'] .= '; SameSite='.$params['samesite'];
+            if ($params['samesite'] !== null && !preg_match('/;\s+samesite/i', $params['path'])) {
+                $params['path'] .= '; SameSite=' . $params['samesite'];
             }
             if ($params['raw']) {
                 $success = @setrawcookie(
@@ -1283,7 +1306,7 @@ public static function submitPOSTData($destination, $data)
             self::redirect(self::getSecurePOSTRedirectURL($destination, $data));
         }
 
-        $p = new \SimpleSAML\XHTML\Template($config, 'post.php');
+        $p = new Template($config, 'post.php');
         $p->data['destination'] = $destination;
         $p->data['post'] = $data;
         $p->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HttpAdapter.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HttpAdapter.php
index b823920763..b2e90b475a 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HttpAdapter.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/HttpAdapter.php
@@ -11,6 +11,7 @@ class HttpAdapter
 {
     /**
      * @see HTTP::getServerHTTPS()
+     * @return bool
      */
     public function getServerHTTPS()
     {
@@ -19,6 +20,7 @@ public function getServerHTTPS()
 
     /**
      * @see HTTP::getServerPort()
+     * @return string
      */
     public function getServerPort()
     {
@@ -27,6 +29,10 @@ public function getServerPort()
 
     /**
      * @see HTTP::addURLParameters()
+     *
+     * @param string $url
+     * @param array $parameters
+     * @return string
      */
     public function addURLParameters($url, $parameters)
     {
@@ -35,6 +41,9 @@ public function addURLParameters($url, $parameters)
 
     /**
      * @see HTTP::checkSessionCookie()
+     *
+     * @param string|null $retryURL
+     * @return void
      */
     public function checkSessionCookie($retryURL = null)
     {
@@ -43,6 +52,10 @@ public function checkSessionCookie($retryURL = null)
 
     /**
      * @see HTTP::checkURLAllowed()
+     *
+     * @param string $url
+     * @param array|null $trustedSites
+     * @return string
      */
     public function checkURLAllowed($url, array $trustedSites = null)
     {
@@ -51,6 +64,11 @@ public function checkURLAllowed($url, array $trustedSites = null)
 
     /**
      * @see HTTP::fetch()
+     *
+     * @param string $url
+     * @param array $context
+     * @param bool $getHeaders
+     * @return array|string
      */
     public function fetch($url, $context = [], $getHeaders = false)
     {
@@ -59,6 +77,7 @@ public function fetch($url, $context = [], $getHeaders = false)
 
     /**
      * @see HTTP::getAcceptLanguage()
+     * @return array
      */
     public function getAcceptLanguage()
     {
@@ -67,6 +86,7 @@ public function getAcceptLanguage()
 
     /**
      * @see HTTP::guessBasePath()
+     * @return string
      */
     public function guessBasePath()
     {
@@ -75,6 +95,7 @@ public function guessBasePath()
 
     /**
      * @see HTTP::getBaseURL()
+     * @return string
      */
     public function getBaseURL()
     {
@@ -83,6 +104,9 @@ public function getBaseURL()
 
     /**
      * @see HTTP::getFirstPathElement()
+     *
+     * @param bool $trailingslash
+     * @return string
      */
     public function getFirstPathElement($trailingslash = true)
     {
@@ -91,6 +115,10 @@ public function getFirstPathElement($trailingslash = true)
 
     /**
      * @see HTTP::getPOSTRedirectURL()
+     *
+     * @param string $destination
+     * @param array $data
+     * @return string
      */
     public function getPOSTRedirectURL($destination, $data)
     {
@@ -99,6 +127,7 @@ public function getPOSTRedirectURL($destination, $data)
 
     /**
      * @see HTTP::getSelfHost()
+     * @return string
      */
     public function getSelfHost()
     {
@@ -107,6 +136,7 @@ public function getSelfHost()
 
     /**
      * @see HTTP::getSelfHostWithNonStandardPort()
+     * @return string
      */
     public function getSelfHostWithNonStandardPort()
     {
@@ -115,6 +145,7 @@ public function getSelfHostWithNonStandardPort()
 
     /**
      * @see HTTP::getSelfHostWithPath()
+     * @return string
      */
     public function getSelfHostWithPath()
     {
@@ -123,6 +154,7 @@ public function getSelfHostWithPath()
 
     /**
      * @see HTTP::getSelfURL()
+     * @return string
      */
     public function getSelfURL()
     {
@@ -131,6 +163,7 @@ public function getSelfURL()
 
     /**
      * @see HTTP::getSelfURLHost()
+     * @return string
      */
     public function getSelfURLHost()
     {
@@ -139,6 +172,7 @@ public function getSelfURLHost()
 
     /**
      * @see HTTP::getSelfURLNoQuery()
+     * @return string
      */
     public function getSelfURLNoQuery()
     {
@@ -147,6 +181,7 @@ public function getSelfURLNoQuery()
 
     /**
      * @see HTTP::isHTTPS()
+     * @return bool
      */
     public function isHTTPS()
     {
@@ -155,6 +190,8 @@ public function isHTTPS()
 
     /**
      * @see HTTP::normalizeURL()
+     * @param string $url
+     * @return string
      */
     public function normalizeURL($url)
     {
@@ -163,6 +200,9 @@ public function normalizeURL($url)
 
     /**
      * @see HTTP::parseQueryString()
+     *
+     * @param string $query_string
+     * @return array
      */
     public function parseQueryString($query_string)
     {
@@ -171,6 +211,10 @@ public function parseQueryString($query_string)
 
     /**
      * @see HTTP::redirectTrustedURL()
+     *
+     * @param string $url
+     * @param array $parameters
+     * @return void
      */
     public function redirectTrustedURL($url, $parameters = [])
     {
@@ -179,6 +223,10 @@ public function redirectTrustedURL($url, $parameters = [])
 
     /**
      * @see HTTP::redirectUntrustedURL()
+     *
+     * @param string $url
+     * @param array $parameters
+     * @return void
      */
     public function redirectUntrustedURL($url, $parameters = [])
     {
@@ -187,6 +235,10 @@ public function redirectUntrustedURL($url, $parameters = [])
 
     /**
      * @see HTTP::resolveURL()
+     *
+     * @param string $url
+     * @param string|null $base
+     * @return string
      */
     public function resolveURL($url, $base = null)
     {
@@ -195,6 +247,12 @@ public function resolveURL($url, $base = null)
 
     /**
      * @see HTTP::setCookie()
+     *
+     * @param string $name
+     * @param string $value
+     * @param array|null $params
+     * @param bool $throw
+     * @return void
      */
     public function setCookie($name, $value, $params = null, $throw = true)
     {
@@ -203,6 +261,10 @@ public function setCookie($name, $value, $params = null, $throw = true)
 
     /**
      * @see HTTP::submitPOSTData()
+     *
+     * @param string $destination
+     * @param array $data
+     * @return void
      */
     public function submitPOSTData($destination, $data)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Net.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Net.php
index 02619d2215..351a7cf6e0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Net.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Net.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace SimpleSAML\Utils;
 
 /**
@@ -8,7 +9,6 @@
  */
 class Net
 {
-
     /**
      * Check whether an IP address is part of a CIDR.
      *
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Random.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Random.php
index f3db05154b..7072d76f09 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Random.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Random.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace SimpleSAML\Utils;
 
 /**
@@ -8,7 +9,6 @@
  */
 class Random
 {
-
     /**
      * The fixed length of random identifiers.
      */
@@ -25,6 +25,6 @@ class Random
      */
     public static function generateID()
     {
-        return '_'.bin2hex(openssl_random_pseudo_bytes((int) ((self::ID_LENGTH - 1) / 2)));
+        return '_' . bin2hex(openssl_random_pseudo_bytes((int) ((self::ID_LENGTH - 1) / 2)));
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/System.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/System.php
index 6769ae9b6d..26b0e992f0 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/System.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/System.php
@@ -2,6 +2,7 @@
 
 namespace SimpleSAML\Utils;
 
+use SimpleSAML\Configuration;
 use SimpleSAML\Error;
 
 /**
@@ -72,12 +73,12 @@ public static function getOS()
      */
     public static function getTempDir()
     {
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
 
         $tempDir = rtrim(
             $globalConfig->getString(
                 'tempdir',
-                sys_get_temp_dir().DIRECTORY_SEPARATOR.'simplesaml'
+                sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'simplesaml'
             ),
             DIRECTORY_SEPARATOR
         );
@@ -86,7 +87,7 @@ public static function getTempDir()
             if (!mkdir($tempDir, 0700, true)) {
                 $error = error_get_last();
                 throw new Error\Exception(
-                    'Error creating temporary directory "'.$tempDir.'": '.
+                    'Error creating temporary directory "' . $tempDir . '": ' .
                     (is_array($error) ? $error['message'] : 'no error available')
                 );
             }
@@ -95,7 +96,7 @@ public static function getTempDir()
             $stat = lstat($tempDir);
             if ($stat['uid'] !== posix_getuid()) {
                 throw new Error\Exception(
-                    'Temporary directory "'.$tempDir.'" does not belong to the current user.'
+                    'Temporary directory "' . $tempDir . '" does not belong to the current user.'
                 );
             }
         }
@@ -107,7 +108,9 @@ public static function getTempDir()
     /**
      * Resolve a (possibly) relative path from the given base path.
      *
-     * A path which starts with a '/' is assumed to be absolute, all others are assumed to be
+     * A path which starts with a stream wrapper pattern (e.g. s3://) will not be touched
+     * and returned as is - regardles of the value given as base path.
+     * If it starts with a '/' it is assumed to be absolute, all others are assumed to be
      * relative. The default base path is the root of the SimpleSAMLphp installation.
      *
      * @param string      $path The path we should resolve.
@@ -121,7 +124,7 @@ public static function getTempDir()
     public static function resolvePath($path, $base = null)
     {
         if ($base === null) {
-            $config = \SimpleSAML\Configuration::getInstance();
+            $config = Configuration::getInstance();
             $base = $config->getBaseDir();
         }
 
@@ -144,17 +147,21 @@ public static function resolvePath($path, $base = null)
             $ret = $base;
         }
 
-        $path = explode('/', $path);
-        foreach ($path as $d) {
-            if ($d === '.') {
-                continue;
-            } elseif ($d === '..') {
-                $ret = dirname($ret);
-            } else {
-                if ($ret && substr($ret, -1) !== '/') {
-                    $ret .= '/';
+        if (static::pathContainsStreamWrapper($path)) {
+            $ret = $path;
+        } else {
+            $path = explode('/', $path);
+            foreach ($path as $d) {
+                if ($d === '.') {
+                    continue;
+                } elseif ($d === '..') {
+                    $ret = dirname($ret);
+                } else {
+                    if ($ret && substr($ret, -1) !== '/') {
+                        $ret .= '/';
+                    }
+                    $ret .= $d;
                 }
-                $ret .= $d;
             }
         }
 
@@ -189,13 +196,13 @@ public static function writeFile($filename, $data, $mode = 0600)
             throw new \InvalidArgumentException('Invalid input parameters');
         }
 
-        $tmpFile = self::getTempDir().DIRECTORY_SEPARATOR.rand();
+        $tmpFile = self::getTempDir() . DIRECTORY_SEPARATOR . rand();
 
         $res = @file_put_contents($tmpFile, $data);
         if ($res === false) {
             $error = error_get_last();
             throw new Error\Exception(
-                'Error saving file "'.$tmpFile.'": '.
+                'Error saving file "' . $tmpFile . '": ' .
                 (is_array($error) ? $error['message'] : 'no error available')
             );
         }
@@ -206,7 +213,7 @@ public static function writeFile($filename, $data, $mode = 0600)
                 $error = error_get_last();
                 //$error = (is_array($error) ? $error['message'] : 'no error available');
                 throw new Error\Exception(
-                    'Error changing file mode of "'.$tmpFile.'": '.
+                    'Error changing file mode of "' . $tmpFile . '": ' .
                     (is_array($error) ? $error['message'] : 'no error available')
                 );
             }
@@ -216,7 +223,7 @@ public static function writeFile($filename, $data, $mode = 0600)
             unlink($tmpFile);
             $error = error_get_last();
             throw new Error\Exception(
-                'Error moving "'.$tmpFile.'" to "'.$filename.'": '.
+                'Error moving "' . $tmpFile . '" to "' . $filename . '": ' .
                 (is_array($error) ? $error['message'] : 'no error available')
             );
         }
@@ -239,4 +246,14 @@ private static function pathContainsDriveLetter($path)
         return substr($path, 1, 1) === ':'
                 && $letterAsciiValue >= 65 && $letterAsciiValue <= 90;
     }
+
+    /**
+     * Check if the supplied path contains a stream wrapper
+     * @param string $path
+     * @return bool
+     */
+    private static function pathContainsStreamWrapper($path)
+    {
+        return preg_match('/^[\w\d]*:\/{2}/', $path) === 1;
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Time.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Time.php
index 78246f9415..1889423680 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Time.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/Time.php
@@ -8,6 +8,8 @@
 
 namespace SimpleSAML\Utils;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
 use SimpleSAML\Logger;
 
 class Time
@@ -54,12 +56,12 @@ public static function initTimezone()
             return;
         }
 
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
 
         $timezone = $globalConfig->getString('timezone', null);
         if ($timezone !== null) {
             if (!date_default_timezone_set($timezone)) {
-                throw new \SimpleSAML\Error\Exception('Invalid timezone set in the "timezone" option in config.php.');
+                throw new Error\Exception('Invalid timezone set in the "timezone" option in config.php.');
             }
             self::$tz_initialized = true;
             return;
@@ -95,10 +97,10 @@ public static function parseDuration($duration, $timestamp = null)
         }
 
         // parse the duration. We use a very strict pattern
-        $durationRegEx = '#^(-?)P(?:(?:(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)'.
+        $durationRegEx = '#^(-?)P(?:(?:(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)' .
             '(?:[.,]\d+)?S)?)?)|(?:(\\d+)W))$#D';
         if (!preg_match($durationRegEx, $duration, $matches)) {
-            throw new \InvalidArgumentException('Invalid ISO 8601 duration: '.$duration);
+            throw new \InvalidArgumentException('Invalid ISO 8601 duration: ' . $duration);
         }
 
         $durYears = (empty($matches[2]) ? 0 : (int) $matches[2]);
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/XML.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/XML.php
index 9b1f37766c..28c203cd3c 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/XML.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/Utils/XML.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Utility class for XML and DOM manipulation.
  *
@@ -7,12 +8,19 @@
 
 namespace SimpleSAML\Utils;
 
+use DOMComment;
+use DOMDocument;
+use DOMElement;
+use DOMNode;
+use DOMText;
+use SAML2\DOMDocumentFactory;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
 use SimpleSAML\Logger;
 use SimpleSAML\XML\Errors;
 
 class XML
 {
-
     /**
      * This function performs some sanity checks on XML documents, and optionally validates them against their schema
      * if the 'validatexml' debugging option is enabled. A warning will be printed to the log if validation fails.
@@ -41,19 +49,21 @@ public static function checkSAMLMessage($message, $type)
 
         // a SAML message should not contain a doctype-declaration
         if (strpos($message, '<!DOCTYPE') !== false) {
-            throw new \SimpleSAML\Error\Exception('XML contained a doctype declaration.');
+            throw new Error\Exception('XML contained a doctype declaration.');
         }
 
         // see if debugging is enabled for XML validation
-        $debug = \SimpleSAML\Configuration::getInstance()->getArrayize('debug', ['validatexml' => false]);
-        $enabled = \SimpleSAML\Configuration::getInstance()->getBoolean('debug.validatexml', false);
+        $debug = Configuration::getInstance()->getArrayize('debug', ['validatexml' => false]);
+        $enabled = Configuration::getInstance()->getBoolean('debug.validatexml', false);
 
-        if (!(in_array('validatexml', $debug, true) // implicitly enabled
-            || (array_key_exists('validatexml', $debug) && $debug['validatexml'] === true)
+        if (
+            !(in_array('validatexml', $debug, true) // implicitly enabled
+            || (array_key_exists('validatexml', $debug)
+            && $debug['validatexml'] === true)
             // explicitly enabled
             // TODO: deprecate this option and remove it in 2.0
-            || $enabled // old 'debug.validatexml' configuration option
-        )) {
+            || $enabled) // old 'debug.validatexml' configuration option
+        ) {
             // XML validation is disabled
             return;
         }
@@ -69,7 +79,7 @@ public static function checkSAMLMessage($message, $type)
             case 'saml-meta':
                 $result = self::isValid($message, 'saml-schema-metadata-2.0.xsd');
         }
-        if ($result !== true) {
+        if (is_string($result)) {
             Logger::warning($result);
         }
     }
@@ -94,24 +104,27 @@ public static function checkSAMLMessage($message, $type)
      */
     public static function debugSAMLMessage($message, $type)
     {
-        if (!(is_string($type) && (is_string($message) || $message instanceof \DOMElement))) {
+        if (!(is_string($type) && (is_string($message) || $message instanceof DOMElement))) {
             throw new \InvalidArgumentException('Invalid input parameters.');
         }
 
         // see if debugging is enabled for SAML messages
-        $debug = \SimpleSAML\Configuration::getInstance()->getArrayize('debug', ['saml' => false]);
+        $debug = Configuration::getInstance()->getArrayize('debug', ['saml' => false]);
 
-        if (!(in_array('saml', $debug, true) // implicitly enabled
-            || (array_key_exists('saml', $debug) && $debug['saml'] === true)
+        if (
+            !(in_array('saml', $debug, true) // implicitly enabled
+            || (array_key_exists('saml', $debug)
+            && $debug['saml'] === true)
             // explicitly enabled
             // TODO: deprecate the old style and remove it in 2.0
-            || (array_key_exists(0, $debug) && $debug[0] === true) // old style 'debug'
-        )) {
+            || (array_key_exists(0, $debug)
+            && $debug[0] === true)) // old style 'debug'
+        ) {
             // debugging messages is disabled
             return;
         }
 
-        if ($message instanceof \DOMElement) {
+        if ($message instanceof DOMElement) {
             $message = $message->ownerDocument->saveXML($message);
         }
 
@@ -155,7 +168,7 @@ public static function debugSAMLMessage($message, $type)
      *
      * @author Olav Morken, UNINETT AS <olav.morken@uninett.no>
      */
-    public static function formatDOMElement(\DOMNode $root, $indentBase = '')
+    public static function formatDOMElement(DOMNode $root, $indentBase = '')
     {
         if (!is_string($indentBase)) {
             throw new \InvalidArgumentException('Invalid input parameters');
@@ -166,13 +179,13 @@ public static function formatDOMElement(\DOMNode $root, $indentBase = '')
         $textNodes = []; // text nodes which should be deleted
         $childNodes = []; // other child nodes
         for ($i = 0; $i < $root->childNodes->length; $i++) {
-            /** @var \DOMElement $child */
+            /** @var \DOMNode $child */
             $child = $root->childNodes->item($i);
 
-            if ($child instanceof \DOMText) {
+            if ($child instanceof DOMText) {
                 $textNodes[] = $child;
                 $fullText .= $child->wholeText;
-            } elseif ($child instanceof \DOMComment || $child instanceof \DOMElement) {
+            } elseif ($child instanceof DOMComment || $child instanceof DOMElement) {
                 $childNodes[] = $child;
             } else {
                 // unknown node type. We don't know how to format this
@@ -202,7 +215,7 @@ public static function formatDOMElement(\DOMNode $root, $indentBase = '')
 
         if ($hasText) {
             // only text - add a single text node to the element with the full text
-            $root->appendChild(new \DOMText($fullText));
+            $root->appendChild(new DOMText($fullText));
             return;
         }
 
@@ -214,10 +227,10 @@ public static function formatDOMElement(\DOMNode $root, $indentBase = '')
         /* Element contains only child nodes - add indentation before each one, and
          * format child elements.
          */
-        $childIndentation = $indentBase.'  ';
+        $childIndentation = $indentBase . '  ';
         foreach ($childNodes as $node) {
             // add indentation before node
-            $root->insertBefore(new \DOMText("\n".$childIndentation), $node);
+            $root->insertBefore(new DOMText("\n" . $childIndentation), $node);
 
             // format child elements
             if ($node instanceof \DOMElement) {
@@ -226,7 +239,7 @@ public static function formatDOMElement(\DOMNode $root, $indentBase = '')
         }
 
         // add indentation before closing tag
-        $root->appendChild(new \DOMText("\n".$indentBase));
+        $root->appendChild(new DOMText("\n" . $indentBase));
     }
 
 
@@ -252,7 +265,7 @@ public static function formatXMLString($xml, $indentBase = '')
         }
 
         try {
-            $doc = \SAML2\DOMDocumentFactory::fromString($xml);
+            $doc = DOMDocumentFactory::fromString($xml);
         } catch (\Exception $e) {
             throw new \DOMException('Error parsing XML string.');
         }
@@ -279,7 +292,7 @@ public static function formatXMLString($xml, $indentBase = '')
      * @throws \InvalidArgumentException If $element is not an instance of DOMElement, $localName is not a string or
      *     $namespaceURI is not a string.
      */
-    public static function getDOMChildren(\DOMNode $element, $localName, $namespaceURI)
+    public static function getDOMChildren(DOMNode $element, $localName, $namespaceURI)
     {
         if (!is_string($localName) || !is_string($namespaceURI)) {
             throw new \InvalidArgumentException('Invalid input parameters.');
@@ -288,11 +301,11 @@ public static function getDOMChildren(\DOMNode $element, $localName, $namespaceU
         $ret = [];
 
         for ($i = 0; $i < $element->childNodes->length; $i++) {
-            /** @var \DOMElement $child */
+            /** @var \DOMNode $child */
             $child = $element->childNodes->item($i);
 
             // skip text nodes and comment elements
-            if ($child instanceof \DOMText || $child instanceof \DOMComment) {
+            if ($child instanceof DOMText || $child instanceof DOMComment) {
                 continue;
             }
 
@@ -315,15 +328,15 @@ public static function getDOMChildren(\DOMNode $element, $localName, $namespaceU
      *
      * @author Olav Morken, UNINETT AS <olav.morken@uninett.no>
      */
-    public static function getDOMText(\DOMElement $element)
+    public static function getDOMText(DOMElement $element)
     {
         $txt = '';
 
         for ($i = 0; $i < $element->childNodes->length; $i++) {
             /** @var \DOMElement $child */
             $child = $element->childNodes->item($i);
-            if (!($child instanceof \DOMText)) {
-                throw new \SimpleSAML\Error\Exception($element->localName.' contained a non-text child node.');
+            if (!($child instanceof DOMText)) {
+                throw new Error\Exception($element->localName . ' contained a non-text child node.');
             }
 
             $txt .= $child->wholeText;
@@ -356,7 +369,7 @@ public static function getDOMText(\DOMElement $element)
      * @author Andreas Solberg, UNINETT AS <andreas.solberg@uninett.no>
      * @author Olav Morken, UNINETT AS <olav.morken@uninett.no>
      */
-    public static function isDOMNodeOfType(\DOMNode $element, $name, $nsURI)
+    public static function isDOMNodeOfType(DOMNode $element, $name, $nsURI)
     {
         if (!is_string($name) || !is_string($nsURI) || strlen($nsURI) === 0) {
             // most likely a comment-node
@@ -379,7 +392,7 @@ public static function isDOMNodeOfType(\DOMNode $element, $name, $nsURI)
 
             // check if it is a valid shortcut
             if (!array_key_exists($nsURI, $shortcuts)) {
-                throw new \InvalidArgumentException('Unknown namespace shortcut: '.$nsURI);
+                throw new \InvalidArgumentException('Unknown namespace shortcut: ' . $nsURI);
             }
 
             // expand the shortcut
@@ -405,25 +418,25 @@ public static function isDOMNodeOfType(\DOMNode $element, $name, $nsURI)
      * @param string|\DOMDocument $xml The XML string or document which should be validated.
      * @param string              $schema The filename of the schema that should be used to validate the document.
      *
-     * @return boolean|string Returns a string with errors found if validation fails. True if validation passes ok.
+     * @return bool|string Returns a string with errors found if validation fails. True if validation passes ok.
      * @throws \InvalidArgumentException If $schema is not a string, or $xml is neither a string nor a \DOMDocument.
      *
      * @author Olav Morken, UNINETT AS <olav.morken@uninett.no>
      */
     public static function isValid($xml, $schema)
     {
-        if (!(is_string($schema) && (is_string($xml) || $xml instanceof \DOMDocument))) {
+        if (!(is_string($schema) && (is_string($xml) || $xml instanceof DOMDocument))) {
             throw new \InvalidArgumentException('Invalid input parameters.');
         }
 
         Errors::begin();
 
-        if ($xml instanceof \DOMDocument) {
+        if ($xml instanceof DOMDocument) {
             $dom = $xml;
             $res = true;
         } else {
             try {
-                $dom = \SAML2\DOMDocumentFactory::fromString($xml);
+                $dom = DOMDocumentFactory::fromString($xml);
                 $res = true;
             } catch (\Exception $e) {
                 $res = false;
@@ -431,10 +444,19 @@ public static function isValid($xml, $schema)
         }
 
         if ($res) {
-            $config = \SimpleSAML\Configuration::getInstance();
+            $config = Configuration::getInstance();
             /** @var string $schemaPath */
             $schemaPath = $config->resolvePath('schemas');
-            $schemaFile = $schemaPath.'/'.$schema;
+            $schemaFile = $schemaPath . '/' . $schema;
+
+            libxml_set_external_entity_loader(
+                function ($public, $system, $context) {
+                    if (filter_var($system, FILTER_VALIDATE_URL) === $system) {
+                        return null;
+                    }
+                    return $system;
+                }
+            );
 
             $res = $dom->schemaValidate($schemaFile);
             if ($res) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/EMail.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/EMail.php
deleted file mode 100644
index a9e239029b..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/EMail.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-namespace SimpleSAML\XHTML;
-
-/**
- * A minimalistic Emailer class. Creates and sends HTML emails.
- *
- * @author Andreas kre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
- * @package SimpleSAMLphp
- */
-
-class EMail
-{
-    private $to = null;
-    private $cc = null;
-    private $body = null;
-    private $from = null;
-    private $replyto = null;
-    private $subject = null;
-    private $headers = [];
-
-
-    /**
-     * Constructor
-     */
-    public function __construct($to, $subject, $from = null, $cc = null, $replyto = null)
-    {
-        $this->to = $to;
-        $this->cc = $cc;
-        $this->from = $from;
-        $this->replyto = $replyto;
-        $this->subject = $subject;
-    }
-
-    /*
-     * @param string $body
-     * @return void
-     */
-    public function setBody($body)
-    {
-        $this->body = $body;
-    }
-
-
-    /*
-     * @param string $body
-     * @return string
-     */
-    private function getHTML($body)
-    {
-        return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-	<title>SimpleSAMLphp Email report</title>
-	<style type="text/css">
-pre, div.box {
-	margin: .4em 2em .4em 1em;
-	padding: 4px;
-
-}
-pre {
-	background: #eee;
-	border: 1px solid #aaa;
-}
-	</style>
-</head>
-<body>
-<div class="container" style="background: #fafafa; border: 1px solid #eee; margin: 2em; padding: .6em;">
-'.$body.'
-</div>
-</body>
-</html>';
-    }
-
-
-    /*
-     * @return void
-     */
-    public function send()
-    {
-        if ($this->to === null) {
-            throw new \Exception('EMail field [to] is required and not set.');
-        } elseif ($this->subject === null) {
-            throw new \Exception('EMail field [subject] is required and not set.');
-        } elseif ($this->body === null) {
-            throw new \Exception('EMail field [body] is required and not set.');
-        }
-
-        $random_hash = bin2hex(openssl_random_pseudo_bytes(16));
-
-        if (isset($this->from)) {
-            $this->headers[] = 'From: '.$this->from;
-        }
-        if (isset($this->replyto)) {
-            $this->headers[] = 'Reply-To: '.$this->replyto;
-        }
-
-        $this->headers[] = 'Content-Type: multipart/alternative; boundary="simplesamlphp-'.$random_hash.'"';
-
-        $message = '
---simplesamlphp-'.$random_hash.'
-Content-Type: text/plain; charset="utf-8" 
-Content-Transfer-Encoding: 8bit
-
-'.strip_tags(html_entity_decode($this->body)).'
-
---simplesamlphp-'.$random_hash.'
-Content-Type: text/html; charset="utf-8" 
-Content-Transfer-Encoding: 8bit
-
-'.$this->getHTML($this->body).'
-
---simplesamlphp-'.$random_hash.'--
-';
-        $headers = implode("\n", $this->headers);
-
-        $mail_sent = @mail($this->to, $this->subject, $message, $headers);
-        \SimpleSAML\Logger::debug('Email: Sending e-mail to ['.$this->to.'] : '.($mail_sent ? 'OK' : 'Failed'));
-        if (!$mail_sent) {
-            throw new \Exception('Error when sending e-mail');
-        }
-    }
-}
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/IdPDisco.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/IdPDisco.php
index 8f835f3661..fade6be03e 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/IdPDisco.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/IdPDisco.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\XHTML;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+
 /**
  * This class implements a generic IdP discovery service, for use in various IdP
  * discovery service pages. This should reduce code duplication.
@@ -31,7 +37,6 @@ class IdPDisco
      */
     protected $instance;
 
-
     /**
      * An instance of the metadata handler, which will allow us to fetch metadata about IdPs.
      *
@@ -39,7 +44,6 @@ class IdPDisco
      */
     protected $metadata;
 
-
     /**
      * The users session.
      *
@@ -47,7 +51,6 @@ class IdPDisco
      */
     protected $session;
 
-
     /**
      * The metadata sets we find allowed entities in, in prioritized order.
      *
@@ -55,7 +58,6 @@ class IdPDisco
      */
     protected $metadataSets;
 
-
     /**
      * The entity id of the SP which accesses this IdP discovery service.
      *
@@ -78,7 +80,6 @@ class IdPDisco
      */
     protected $setIdPentityID = null;
 
-
     /**
      * The name of the query parameter which should contain the users choice of IdP.
      * This option default to 'entityID' for Shibboleth compatibility.
@@ -112,16 +113,16 @@ class IdPDisco
      * @param array  $metadataSets Array with metadata sets we find remote entities in.
      * @param string $instance The name of this instance of the discovery service.
      *
-     * @throws Exception If the request is invalid.
+     * @throws \Exception If the request is invalid.
      */
     public function __construct(array $metadataSets, $instance)
     {
         assert(is_string($instance));
 
         // initialize standard classes
-        $this->config = \SimpleSAML\Configuration::getInstance();
-        $this->metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
-        $this->session = \SimpleSAML\Session::getSessionFromRequest();
+        $this->config = Configuration::getInstance();
+        $this->metadata = MetaDataStorageHandler::getMetadataHandler();
+        $this->session = Session::getSessionFromRequest();
         $this->instance = $instance;
         $this->metadataSets = $metadataSets;
 
@@ -140,12 +141,12 @@ public function __construct(array $metadataSets, $instance)
             $this->returnIdParam = $_GET['returnIDParam'];
         }
 
-        $this->log('returnIdParam initially set to ['.$this->returnIdParam.']');
+        $this->log('returnIdParam initially set to [' . $this->returnIdParam . ']');
 
         if (!array_key_exists('return', $_GET)) {
             throw new \Exception('Missing parameter: return');
         } else {
-            $this->returnURL = \SimpleSAML\Utils\HTTP::checkURLAllowed($_GET['return']);
+            $this->returnURL = Utils\HTTP::checkURLAllowed($_GET['return']);
         }
 
         $this->isPassive = false;
@@ -154,7 +155,7 @@ public function __construct(array $metadataSets, $instance)
                 $this->isPassive = true;
             }
         }
-        $this->log('isPassive initially set to ['.($this->isPassive ? 'TRUE' : 'FALSE').']');
+        $this->log('isPassive initially set to [' . ($this->isPassive ? 'TRUE' : 'FALSE') . ']');
 
         if (array_key_exists('IdPentityID', $_GET)) {
             $this->setIdPentityID = $_GET['IdPentityID'];
@@ -173,10 +174,11 @@ public function __construct(array $metadataSets, $instance)
      * discovery service type.
      *
      * @param string $message The message which should be logged.
+     * @return void
      */
     protected function log($message)
     {
-        \SimpleSAML\Logger::info('idpDisco.'.$this->instance.': '.$message);
+        Logger::info('idpDisco.' . $this->instance . ': ' . $message);
     }
 
 
@@ -188,11 +190,11 @@ protected function log($message)
      *
      * @param string $name The name of the cookie.
      *
-     * @return string The value of the cookie with the given name, or null if no cookie with that name exists.
+     * @return string|null The value of the cookie with the given name, or null if no cookie with that name exists.
      */
     protected function getCookie($name)
     {
-        $prefixedName = 'idpdisco_'.$this->instance.'_'.$name;
+        $prefixedName = 'idpdisco_' . $this->instance . '_' . $name;
         if (array_key_exists($prefixedName, $_COOKIE)) {
             return $_COOKIE[$prefixedName];
         } else {
@@ -209,10 +211,11 @@ protected function getCookie($name)
      *
      * @param string $name The name of the cookie.
      * @param string $value The value of the cookie.
+     * @return void
      */
     protected function setCookie($name, $value)
     {
-        $prefixedName = 'idpdisco_'.$this->instance.'_'.$name;
+        $prefixedName = 'idpdisco_' . $this->instance . '_' . $name;
 
         $params = [
             // we save the cookies for 90 days
@@ -222,7 +225,7 @@ protected function setCookie($name, $value)
             'httponly' => false,
         ];
 
-        \SimpleSAML\Utils\HTTP::setCookie($prefixedName, $value, $params, false);
+        Utils\HTTP::setCookie($prefixedName, $value, $params, false);
     }
 
 
@@ -255,7 +258,7 @@ protected function validateIdP($idp)
             }
         }
 
-        $this->log('Unable to validate IdP entity id ['.$idp.'].');
+        $this->log('Unable to validate IdP entity id [' . $idp . '].');
 
         // the entity id wasn't valid
         return null;
@@ -303,7 +306,7 @@ protected function getSelectedIdP()
     /**
      * Retrieve the users saved choice of IdP.
      *
-     * @return string The entity id of the IdP the user has saved, or null if the user hasn't saved any choice.
+     * @return string|null The entity id of the IdP the user has saved, or null if the user hasn't saved any choice.
      */
     protected function getSavedIdP()
     {
@@ -329,7 +332,7 @@ protected function getSavedIdP()
     /**
      * Retrieve the previous IdP the user used.
      *
-     * @return string The entity id of the previous IdP the user used, or null if this is the first time.
+     * @return string|null The entity id of the previous IdP the user used, or null if this is the first time.
      */
     protected function getPreviousIdP()
     {
@@ -361,20 +364,20 @@ protected function getFromCIDRhint()
      * This function will first look at the previous IdP the user has chosen. If the user
      * hasn't chosen an IdP before, it will look at the IP address.
      *
-     * @return string The entity id of the IdP the user should most likely use.
+     * @return string|null The entity id of the IdP the user should most likely use.
      */
     protected function getRecommendedIdP()
     {
         $idp = $this->getPreviousIdP();
         if ($idp !== null) {
-            $this->log('Preferred IdP from previous use ['.$idp.'].');
+            $this->log('Preferred IdP from previous use [' . $idp . '].');
             return $idp;
         }
 
         $idp = $this->getFromCIDRhint();
 
         if (!empty($idp)) {
-            $this->log('Preferred IdP from CIDR hint ['.$idp.'].');
+            $this->log('Preferred IdP from CIDR hint [' . $idp . '].');
             return $idp;
         }
 
@@ -386,12 +389,13 @@ protected function getRecommendedIdP()
      * Save the current IdP choice to a cookie.
      *
      * @param string $idp The entityID of the IdP.
+     * @return void
      */
     protected function setPreviousIdP($idp)
     {
         assert(is_string($idp));
 
-        $this->log('Choice made ['.$idp.'] Setting cookie.');
+        $this->log('Choice made [' . $idp . '] Setting cookie.');
         $this->setCookie('lastidp', $idp);
     }
 
@@ -419,7 +423,7 @@ protected function saveIdP()
     /**
      * Determine which IdP the user should go to, if any.
      *
-     * @return string The entity id of the IdP the user should be sent to, or null if the user should choose.
+     * @return string|null The entity id of the IdP the user should be sent to, or null if the user should choose.
      */
     protected function getTargetIdP()
     {
@@ -443,7 +447,7 @@ protected function getTargetIdP()
         // check if the user has saved an choice earlier
         $idp = $this->getSavedIdP();
         if ($idp !== null) {
-            $this->log('Using saved choice ['.$idp.'].');
+            $this->log('Using saved choice [' . $idp . '].');
             return $idp;
         }
 
@@ -516,8 +520,8 @@ protected function start()
         if ($idp !== null) {
             $extDiscoveryStorage = $this->config->getString('idpdisco.extDiscoveryStorage', null);
             if ($extDiscoveryStorage !== null) {
-                $this->log('Choice made ['.$idp.'] (Forwarding to external discovery storage)');
-                \SimpleSAML\Utils\HTTP::redirectTrustedURL($extDiscoveryStorage, [
+                $this->log('Choice made [' . $idp . '] (Forwarding to external discovery storage)');
+                Utils\HTTP::redirectTrustedURL($extDiscoveryStorage, [
                     'entityID'      => $this->spEntityId,
                     'IdPentityID'   => $idp,
                     'returnIDParam' => $this->returnIdParam,
@@ -526,15 +530,16 @@ protected function start()
                 ]);
             } else {
                 $this->log(
-                    'Choice made ['.$idp.'] (Redirecting the user back. returnIDParam='.$this->returnIdParam.')'
+                    'Choice made [' . $idp . '] (Redirecting the user back. returnIDParam='
+                    . $this->returnIdParam . ')'
                 );
-                \SimpleSAML\Utils\HTTP::redirectTrustedURL($this->returnURL, [$this->returnIdParam => $idp]);
+                Utils\HTTP::redirectTrustedURL($this->returnURL, [$this->returnIdParam => $idp]);
             }
         }
 
         if ($this->isPassive) {
             $this->log('Choice not made. (Redirecting the user back without answer)');
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL($this->returnURL);
+            Utils\HTTP::redirectTrustedURL($this->returnURL);
         }
     }
 
@@ -543,6 +548,7 @@ protected function start()
      * Handles a request to this discovery service.
      *
      * The IdP disco parameters should be set before calling this function.
+     * @return void
      */
     public function handleRequest()
     {
@@ -562,10 +568,10 @@ public function handleRequest()
 
         if (sizeof($idpintersection) == 1) {
             $this->log(
-                'Choice made ['.$idpintersection[0].'] (Redirecting the user back. returnIDParam='.
-                $this->returnIdParam.')'
+                'Choice made [' . $idpintersection[0] . '] (Redirecting the user back. returnIDParam=' .
+                $this->returnIdParam . ')'
             );
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL(
+            Utils\HTTP::redirectTrustedURL(
                 $this->returnURL,
                 [$this->returnIdParam => $idpintersection[0]]
             );
@@ -600,7 +606,7 @@ public function handleRequest()
             foreach ($tryLanguages as $lang) {
                 if ($name = $this->getEntityDisplayName($data, $lang)) {
                     $newlist[$entityid]['name'] = $name;
-                    continue;
+                    break 1;
                 }
             }
             if (empty($newlist[$entityid]['name'])) {
@@ -609,17 +615,22 @@ public function handleRequest()
             foreach ($tryLanguages as $lang) {
                 if (!empty($data['description'][$lang])) {
                     $newlist[$entityid]['description'] = $data['description'][$lang];
-                    continue;
+                    break 1;
                 }
             }
             if (!empty($data['icon'])) {
                 $newlist[$entityid]['icon'] = $data['icon'];
-                $newlist[$entityid]['iconurl'] = \SimpleSAML\Utils\HTTP::resolveURL($data['icon']);
+                $newlist[$entityid]['iconurl'] = Utils\HTTP::resolveURL($data['icon']);
             }
         }
         usort(
             $newlist,
-            function ($idpentry1, $idpentry2) {
+            /**
+             * @param array $idpentry1
+             * @param array $idpentry2
+             * @return int
+             */
+            function (array $idpentry1, array $idpentry2) {
                 return strcasecmp($idpentry1['name'], $idpentry2['name']);
             }
         );
@@ -629,11 +640,17 @@ function ($idpentry1, $idpentry2) {
         $t->data['return'] = $this->returnURL;
         $t->data['returnIDParam'] = $this->returnIdParam;
         $t->data['entityID'] = $this->spEntityId;
-        $t->data['urlpattern'] = htmlspecialchars(\SimpleSAML\Utils\HTTP::getSelfURLNoQuery());
+        $t->data['urlpattern'] = htmlspecialchars(Utils\HTTP::getSelfURLNoQuery());
         $t->data['rememberenabled'] = $this->config->getBoolean('idpdisco.enableremember', false);
         $t->show();
     }
 
+
+    /**
+     * @param array $idpData
+     * @param string $language
+     * @return string|null
+     */
     private function getEntityDisplayName(array $idpData, $language)
     {
         if (isset($idpData['UIInfo']['DisplayName'][$language])) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/Template.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/Template.php
index 43127d9a0d..25371a9245 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/Template.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/Template.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\XHTML;
-
 /**
  * A minimalistic XHTML PHP based template system implemented for SimpleSAMLphp.
  *
@@ -9,10 +7,21 @@
  * @package SimpleSAMLphp
  */
 
-use JaimePerez\TwigConfigurableI18n\Twig\Environment as Twig_Environment;
-use JaimePerez\TwigConfigurableI18n\Twig\Extensions\Extension\I18n as Twig_Extensions_Extension_I18n;
-use Symfony\Component\HttpFoundation\Response;
+namespace SimpleSAML\XHTML;
+
+use SimpleSAML\Configuration;
+use SimpleSAML\Locale\Language;
 use SimpleSAML\Locale\Localization;
+use SimpleSAML\Locale\Translate;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\TwigConfigurableI18n\Twig\Environment as Twig_Environment;
+use SimpleSAML\TwigConfigurableI18n\Twig\Extensions\Extension\I18n as Twig_Extensions_Extension_I18n;
+use SimpleSAML\Utils;
+use Symfony\Component\HttpFoundation\Response;
+use Twig\Loader\FilesystemLoader;
+use Twig\TwigFilter;
+use Twig\TwigFunction;
 
 class Template extends Response
 {
@@ -54,9 +63,10 @@ class Template extends Response
     /**
      * The twig environment.
      *
-     * @var false|Twig_Environment
+     * @var \Twig\Environment
+     * @psalm-suppress PropertyNotSetInConstructor  Remove this annotation in 2.0
      */
-    private $twig = false;
+    private $twig;
 
     /**
      * The template name.
@@ -67,6 +77,8 @@ class Template extends Response
 
     /**
      * Current module, if any.
+     *
+     * @var string
      */
     private $module;
 
@@ -75,7 +87,7 @@ class Template extends Response
      *
      * @var bool
      */
-    private $useNewUI;
+    private $useNewUI = false;
 
 
     /**
@@ -85,9 +97,9 @@ class Template extends Response
      * the 'theme.controller' configuration option to a class that implements the
      * \SimpleSAML\XHTML\TemplateControllerInterface interface to use it.
      *
-     * @var \SimpleSAML\XHTML\TemplateControllerInterface
+     * @var \SimpleSAML\XHTML\TemplateControllerInterface|null
      */
-    private $controller;
+    private $controller = null;
 
 
     /**
@@ -99,7 +111,7 @@ class Template extends Response
      *
      * @var array
      */
-    private $theme;
+    private $theme = ['module' => null, 'name' => 'default'];
 
     /**
      * Constructor
@@ -108,7 +120,7 @@ class Template extends Response
      * @param string                   $template Which template file to load
      * @param string|null              $defaultDictionary The default dictionary where tags will come from.
      */
-    public function __construct(\SimpleSAML\Configuration $configuration, $template, $defaultDictionary = null)
+    public function __construct(Configuration $configuration, $template, $defaultDictionary = null)
     {
         $this->configuration = $configuration;
         $this->template = $template;
@@ -124,8 +136,8 @@ public function __construct(\SimpleSAML\Configuration $configuration, $template,
         );
 
         // initialize internationalization system
-        $this->translator = new \SimpleSAML\Locale\Translate($configuration, $defaultDictionary);
-        $this->localization = new \SimpleSAML\Locale\Localization($configuration);
+        $this->translator = new Translate($configuration, $defaultDictionary);
+        $this->localization = new Localization($configuration);
 
         // check if we are supposed to use the new UI
         $this->useNewUI = $this->configuration->getBoolean('usenewui', false);
@@ -133,14 +145,19 @@ public function __construct(\SimpleSAML\Configuration $configuration, $template,
         if ($this->useNewUI) {
             // check if we need to attach a theme controller
             $controller = $this->configuration->getString('theme.controller', false);
-            if ($controller && class_exists($controller) &&
-                in_array('SimpleSAML\XHTML\TemplateControllerInterface', class_implements($controller))
+            if (
+                $controller
+                && class_exists($controller)
+                && in_array(TemplateControllerInterface::class, class_implements($controller))
             ) {
+                /** @var \SimpleSAML\XHTML\TemplateControllerInterface $this->controller */
                 $this->controller = new $controller();
             }
 
             $this->twig = $this->setupTwig();
         }
+
+        $this->charset = 'UTF-8';
         parent::__construct();
     }
 
@@ -148,24 +165,34 @@ public function __construct(\SimpleSAML\Configuration $configuration, $template,
     /**
      * Return the URL of an asset, including a cache-buster parameter that depends on the last modification time of
      * the original file.
-     *
      * @param string $asset
+     * @param string|null $module
      * @return string
      */
-    public function asset($asset)
+    public function asset($asset, $module = null)
     {
-        $file = $this->configuration->getBaseDir().'www/assets/'.$asset;
+        $baseDir = $this->configuration->getBaseDir();
+        if (is_null($module)) {
+            $file = $baseDir . 'www/assets/' . $asset;
+            $basePath =  $this->configuration->getBasePath();
+            $path = $basePath . 'assets/' . $asset;
+        } else {
+            $file = $baseDir . 'modules/' . $module . '/www/assets/' . $asset;
+            $path = Module::getModuleUrl($module . '/assets/' . $asset);
+        }
+
         if (!file_exists($file)) {
             // don't be too harsh if an asset is missing, just pretend it's there...
-            return $this->configuration->getBasePath().'assets/'.$asset;
+            return $path;
         }
 
         $tag = $this->configuration->getVersion();
         if ($tag === 'master') {
-            $tag = filemtime($file);
+            $tag = strval(filemtime($file));
         }
         $tag = substr(hash('md5', $tag), 0, 5);
-        return $this->configuration->getBasePath().'assets/'.$asset.'?tag='.$tag;
+
+        return $path . '?tag=' . $tag;
     }
 
 
@@ -200,8 +227,8 @@ private function normalizeTemplateName($templateName)
             $templateName = substr($templateName, 0, $tplpos);
         }
 
-        if ($this->useNewUI || $this->theme['module'] !== null) {
-            return $templateName.'.twig';
+        if ($this->useNewUI) {
+            return $templateName . '.twig';
         }
         return $templateName;
     }
@@ -211,7 +238,7 @@ private function normalizeTemplateName($templateName)
      * Set up the places where twig can look for templates.
      *
      * @return TemplateLoader The twig template loader or false if the template does not exist.
-     * @throws \Twig_Error_Loader In case a failure occurs.
+     * @throws \Twig\Error\LoaderError In case a failure occurs.
      */
     private function setupTwigTemplatepaths()
     {
@@ -219,11 +246,13 @@ private function setupTwigTemplatepaths()
 
         // get namespace if any
         list($namespace, $filename) = $this->findModuleAndTemplateName($filename);
-        $this->twig_template = ($namespace !== null) ? '@'.$namespace.'/'.$filename : $filename;
+        $this->twig_template = ($namespace !== null) ? '@' . $namespace . '/' . $filename : $filename;
         $loader = new TemplateLoader();
         $templateDirs = $this->findThemeTemplateDirs();
         if ($this->module && $this->module != 'core') {
-            $templateDirs[] = [$this->module => TemplateLoader::getModuleTemplateDir($this->module)];
+            $modDir = TemplateLoader::getModuleTemplateDir($this->module);
+            $templateDirs[] = [$this->module => $modDir];
+            $templateDirs[] = ['__parent__' => $modDir];
         }
         if ($this->theme['module']) {
             try {
@@ -239,7 +268,7 @@ private function setupTwigTemplatepaths()
 
         // default, themeless templates are checked last
         $templateDirs[] = [
-            \Twig_Loader_Filesystem::MAIN_NAMESPACE => $this->configuration->resolvePath('templates')
+            FilesystemLoader::MAIN_NAMESPACE => $this->configuration->resolvePath('templates')
         ];
         foreach ($templateDirs as $entry) {
             $loader->addPath($entry[key($entry)], key($entry));
@@ -250,16 +279,20 @@ private function setupTwigTemplatepaths()
 
     /**
      * Setup twig.
+     * @return \Twig\Environment
+     * @throws \Exception if the template does not exist
      */
     private function setupTwig()
     {
         $auto_reload = $this->configuration->getBoolean('template.auto_reload', true);
         $cache = $this->configuration->getString('template.cache', false);
+
         // set up template paths
         $loader = $this->setupTwigTemplatepaths();
+
         // abort if twig template does not exist
         if (!$loader->exists($this->twig_template)) {
-            return false;
+            throw new \Exception('Template-file \"' . $this->getTemplateName() . '\" does not exist.');
         }
 
         // load extra i18n domains
@@ -274,13 +307,15 @@ private function setupTwig()
         $options = [
             'cache' => $cache,
             'auto_reload' => $auto_reload,
-            'translation_function' => ['\SimpleSAML\Locale\Translate', 'translateSingularGettext'],
-            'translation_function_plural' => ['\SimpleSAML\Locale\Translate', 'translatePluralGettext'],
+            'translation_function' => [Translate::class, 'translateSingularGettext'],
+            'translation_function_plural' => [Translate::class, 'translatePluralGettext'],
         ];
 
         $twig = new Twig_Environment($loader, $options);
         $twig->addExtension(new Twig_Extensions_Extension_I18n());
 
+        $twig->addFunction(new TwigFunction('moduleURL', [Module::class, 'getModuleURL']));
+
         // initialize some basic context
         $langParam = $this->configuration->getString('language.parameter.name', 'language');
         $twig->addGlobal('languageParameterName', $langParam);
@@ -297,20 +332,21 @@ private function setupTwig()
         $twig->addGlobal('queryParams', $queryParams);
         $twig->addGlobal('templateId', str_replace('.twig', '', $this->normalizeTemplateName($this->template)));
         $twig->addGlobal('isProduction', $this->configuration->getBoolean('production', true));
+        $twig->addGlobal('baseurlpath', ltrim($this->configuration->getBasePath(), '/'));
 
         // add a filter for translations out of arrays
         $twig->addFilter(
-            new \Twig_SimpleFilter(
+            new TwigFilter(
                 'translateFromArray',
-                ['\SimpleSAML\Locale\Translate', 'translateFromArray'],
+                [Translate::class, 'translateFromArray'],
                 ['needs_context' => true]
             )
         );
 
         // add an asset() function
-        $twig->addFunction(new \Twig_SimpleFunction('asset', [$this, 'asset']));
+        $twig->addFunction(new TwigFunction('asset', [$this, 'asset']));
 
-        if ($this->controller) {
+        if ($this->controller !== null) {
             $this->controller->setUpTwig($twig);
         }
 
@@ -324,31 +360,31 @@ private function setupTwig()
      */
     private function findThemeTemplateDirs()
     {
-        if ($this->theme['module'] === null) {
+        if (!isset($this->theme['module'])) {
             // no module involved
             return [];
         }
 
         // setup directories & namespaces
-        $themeDir = \SimpleSAML\Module::getModuleDir($this->theme['module']).'/themes/'.$this->theme['name'];
+        $themeDir = Module::getModuleDir($this->theme['module']) . '/themes/' . $this->theme['name'];
         $subdirs = scandir($themeDir);
         if (empty($subdirs)) {
             // no subdirectories in the theme directory, nothing to do here
             // this is probably wrong, log a message
-            \SimpleSAML\Logger::warning('Empty theme directory for theme "'.$this->theme['name'].'".');
+            Logger::warning('Empty theme directory for theme "' . $this->theme['name'] . '".');
             return [];
         }
 
         $themeTemplateDirs = [];
         foreach ($subdirs as $entry) {
             // discard anything that's not a directory. Expression is negated to profit from lazy evaluation
-            if (!($entry !== '.' && $entry !== '..' && is_dir($themeDir.'/'.$entry))) {
+            if (!($entry !== '.' && $entry !== '..' && is_dir($themeDir . '/' . $entry))) {
                 continue;
             }
 
             // set correct name for the default namespace
-            $ns = ($entry === 'default') ? \Twig_Loader_Filesystem::MAIN_NAMESPACE : $entry;
-            $themeTemplateDirs[] = [$ns => $themeDir.'/'.$entry];
+            $ns = ($entry === 'default') ? FilesystemLoader::MAIN_NAMESPACE : $entry;
+            $themeTemplateDirs[] = [$ns => $themeDir . '/' . $entry];
         }
         return $themeTemplateDirs;
     }
@@ -357,20 +393,21 @@ private function findThemeTemplateDirs()
     /**
      * Get the template directory of a module, if it exists.
      *
+     * @param string $module
      * @return string The templates directory of a module
      *
      * @throws \InvalidArgumentException If the module is not enabled or it has no templates directory.
      */
     private function getModuleTemplateDir($module)
     {
-        if (!\SimpleSAML\Module::isModuleEnabled($module)) {
-            throw new \InvalidArgumentException('The module \''.$module.'\' is not enabled.');
+        if (!Module::isModuleEnabled($module)) {
+            throw new \InvalidArgumentException('The module \'' . $module . '\' is not enabled.');
         }
-        $moduledir = \SimpleSAML\Module::getModuleDir($module);
+        $moduledir = Module::getModuleDir($module);
         // check if module has a /templates dir, if so, append
-        $templatedir = $moduledir.'/templates';
+        $templatedir = $moduledir . '/templates';
         if (!is_dir($templatedir)) {
-            throw new \InvalidArgumentException('The module \''.$module.'\' has no templates directory.');
+            throw new \InvalidArgumentException('The module \'' . $module . '\' has no templates directory.');
         }
         return $templatedir;
     }
@@ -382,13 +419,13 @@ private function getModuleTemplateDir($module)
      * Note that the module must be installed, enabled, and contain a "templates" directory.
      *
      * @param string $module The module where we need to search for templates.
-     *
      * @throws \InvalidArgumentException If the module is not enabled or it has no templates directory.
+     * @return void
      */
     public function addTemplatesFromModule($module)
     {
         $dir = TemplateLoader::getModuleTemplateDir($module);
-        /** @var \Twig_Loader_Filesystem $loader */
+        /** @var \Twig\Loader\FilesystemLoader $loader */
         $loader = $this->twig->getLoader();
         $loader->addPath($dir, $module);
     }
@@ -398,7 +435,7 @@ public function addTemplatesFromModule($module)
      * Generate an array for its use in the language bar, indexed by the ISO 639-2 codes of the languages available,
      * containing their localized names and the URL that should be used in order to change to that language.
      *
-     * @return array The array containing information of all available languages.
+     * @return array|null The array containing information of all available languages.
      */
     private function generateLanguageBar()
     {
@@ -413,7 +450,7 @@ private function generateLanguageBar()
                 $langname = $this->translator->getLanguage()->getLanguageLocalizedName($lang);
                 $url = false;
                 if (!$current) {
-                    $url = htmlspecialchars(\SimpleSAML\Utils\HTTP::addURLParameters(
+                    $url = htmlspecialchars(Utils\HTTP::addURLParameters(
                         '',
                         [$parameterName => $lang]
                     ));
@@ -430,6 +467,7 @@ private function generateLanguageBar()
 
     /**
      * Set some default context
+     * @return void
      */
     private function twigDefaultContext()
     {
@@ -497,12 +535,13 @@ public function send()
      * This method is a remnant of the old templating system, where templates where shown manually instead of
      * returning a response.
      *
+     * @return void
      * @deprecated Do not use this method, use Twig + send() instead. Will be removed in 2.0
      */
     public function show()
     {
-        if ($this->twig !== false) {
-            echo $this->getContents();            
+        if ($this->useNewUI) {
+            echo $this->getContents();
         } else {
             require($this->findTemplatePath($this->template));
         }
@@ -533,14 +572,16 @@ private function findModuleAndTemplateName($template)
      * template file in the given module.
      *
      * @param string $template The relative path from the theme directory to the template file.
+     * @param bool $throw_exception
      *
-     * @return string The absolute path to the template file.
+     * @return string|null The absolute path to the template file.
      *
      * @throws \Exception If the template file couldn't be found.
      */
     private function findTemplatePath($template, $throw_exception = true)
     {
         assert(is_string($template));
+        $extensions = ['.tpl.php', '.php'];
 
         list($templateModule, $templateName) = $this->findModuleAndTemplateName($template);
         $templateModule = ($templateModule !== null) ? $templateModule : 'default';
@@ -549,44 +590,52 @@ private function findTemplatePath($template, $throw_exception = true)
         if ($this->theme['module'] !== null) {
             // .../module/<themeModule>/themes/<themeName>/<templateModule>/<templateName>
 
-            $filename = \SimpleSAML\Module::getModuleDir($this->theme['module']).
-                '/themes/'.$this->theme['name'].'/'.$templateModule.'/'.$templateName;
+            $filename = Module::getModuleDir($this->theme['module']) .
+                '/themes/' . $this->theme['name'] . '/' . $templateModule . '/' . $templateName;
         } elseif ($templateModule !== 'default') {
             // .../module/<templateModule>/templates/<templateName>
-            $filename = \SimpleSAML\Module::getModuleDir($templateModule).'/templates/'.$templateName;
+            $filename = Module::getModuleDir($templateModule) . '/templates/' . $templateName;
         } else {
             // .../templates/<theme>/<templateName>
-            $filename = $this->configuration->getPathValue('templatedir', 'templates/').$templateName;
+            $base = $this->configuration->getPathValue('templatedir', 'templates/') ?: 'templates/';
+            $filename = $base . $templateName;
         }
 
-        if (file_exists($filename)) {
-            return $filename;
+        $filename = $this->normalizeTemplateName($filename);
+        foreach ($extensions as $extension) {
+            if (file_exists($filename . $extension)) {
+                return $filename . $extension;
+            }
         }
 
         // not found in current theme
-        \SimpleSAML\Logger::debug(
-            $_SERVER['PHP_SELF'].' - Template: Could not find template file ['.$template.'] at ['.
-            $filename.'] - now trying the base template'
+        Logger::debug(
+            $_SERVER['PHP_SELF'] . ' - Template: Could not find template file [' . $template . '] at [' .
+            $filename . '] - now trying the base template'
         );
 
         // try default theme
         if ($templateModule !== 'default') {
             // .../module/<templateModule>/templates/<templateName>
-            $filename = \SimpleSAML\Module::getModuleDir($templateModule).'/templates/'.$templateName;
+            $filename = Module::getModuleDir($templateModule) . '/templates/' . $templateName;
         } else {
             // .../templates/<templateName>
-            $filename = $this->configuration->getPathValue('templatedir', 'templates/').'/'.$templateName;
+            $base = $this->configuration->getPathValue('templatedir', 'templates/') ?: 'templates/';
+            $filename = $base . '/' . $templateName;
         }
 
-        if (file_exists($filename)) {
-            return $filename;
+        $filename = $this->normalizeTemplateName($filename);
+        foreach ($extensions as $extension) {
+            if (file_exists($filename . $extension)) {
+                return $filename . $extension;
+            }
         }
 
         // not found in default template
         if ($throw_exception) {
             // log error and throw exception
-            $error = 'Template: Could not find template file ['.$template.'] at ['.$filename.']';
-            \SimpleSAML\Logger::critical($_SERVER['PHP_SELF'].' - '.$error);
+            $error = 'Template: Could not find template file [' . $template . '] at [' . $filename . ']';
+            Logger::critical($_SERVER['PHP_SELF'] . ' - ' . $error);
 
             throw new \Exception($error);
         } else {
@@ -621,7 +670,7 @@ public function getLocalization()
     /**
      * Get the current instance of Twig in use.
      *
-     * @return false|Twig_Environment The Twig instance in use, or false if Twig is not used.
+     * @return \Twig\Environment The Twig instance in use, or null if Twig is not used.
      */
     public function getTwig()
     {
@@ -635,7 +684,7 @@ public function getTwig()
 
 
     /**
-     * @param $name
+     * @param string $name
      *
      * @return string
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Locale\Language::getLanguage()
@@ -659,8 +708,9 @@ public function getLanguage()
 
 
     /**
-     * @param      $language
+     * @param string $language
      * @param bool $setLanguageCookie
+     * @return void
      *
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Locale\Language::setLanguage()
      * instead.
@@ -678,24 +728,27 @@ public function setLanguage($language, $setLanguageCookie = true)
      */
     public static function getLanguageCookie()
     {
-        return \SimpleSAML\Locale\Language::getLanguageCookie();
+        return Language::getLanguageCookie();
     }
 
 
     /**
-     * @param $language
+     * @param string $language
+     * @return void
      *
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Locale\Language::setLanguageCookie()
      * instead.
      */
     public static function setLanguageCookie($language)
     {
-        \SimpleSAML\Locale\Language::setLanguageCookie($language);
+        Language::setLanguageCookie($language);
     }
 
 
     /**
      * Wraps Language->getLanguageList
+     *
+     * @return array
      */
     private function getLanguageList()
     {
@@ -704,9 +757,9 @@ private function getLanguageList()
 
 
     /**
-     * @param $tag
+     * @param string $tag
      *
-     * @return array
+     * @return array|null
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Locale\Translate::getTag() instead.
      */
     public function getTag($tag)
@@ -720,6 +773,9 @@ public function getTag($tag)
      *
      * @deprecated This method will be removed in SSP 2.0. Please use
      * \SimpleSAML\Locale\Translate::getPreferredTranslation() instead.
+     *
+     * @param array $translations
+     * @return string
      */
     public function getTranslation($translations)
     {
@@ -731,6 +787,9 @@ public function getTranslation($translations)
      * Includes a file relative to the template base directory.
      * This function can be used to include headers and footers etc.
      *
+     * @deprecated This function will be removed in SSP 2.0. Use Twig-templates instead
+     * @param string $file
+     * @return void
      */
     private function includeAtTemplateBase($file)
     {
@@ -748,6 +807,10 @@ private function includeAtTemplateBase($file)
      * @see \SimpleSAML\Locale\Translate::includeInlineTranslation()
      * @deprecated This method will be removed in SSP 2.0. Please use
      * \SimpleSAML\Locale\Translate::includeInlineTranslation() instead.
+     *
+     * @param string $tag
+     * @param string $translation
+     * @return void
      */
     public function includeInlineTranslation($tag, $translation)
     {
@@ -758,6 +821,7 @@ public function includeInlineTranslation($tag, $translation)
     /**
      * @param string $file
      * @param \SimpleSAML\Configuration|null $otherConfig
+     * @return void
      *
      * @deprecated This method will be removed in SSP 2.0. Please use
      * \SimpleSAML\Locale\Translate::includeLanguageFile() instead.
@@ -770,6 +834,8 @@ public function includeLanguageFile($file, $otherConfig = null)
 
     /**
      * Wrap Language->isLanguageRTL
+     *
+     * @return bool
      */
     private function isLanguageRTL()
     {
@@ -802,6 +868,9 @@ public static function lang_merge($def, $lang)
      *
      * @see \SimpleSAML\Locale\Translate::noop()
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Locale\Translate::noop() instead.
+     *
+     * @param string $tag
+     * @return string
      */
     public static function noop($tag)
     {
@@ -814,6 +883,13 @@ public static function noop($tag)
      *
      * @see \SimpleSAML\Locale\Translate::t()
      * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Locale\Translate::t() instead.
+     *
+     * @param string $tag
+     * @param array $replacements
+     * @param bool $fallbackdefault
+     * @param array $oldreplacements
+     * @param bool $striptags
+     * @return string|null
      */
     public function t(
         $tag,
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateControllerInterface.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateControllerInterface.php
index 8d6f4e733e..bead9a1c69 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateControllerInterface.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateControllerInterface.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\XHTML;
 
+use Twig\Environment;
+
 /**
  * Interface that allows modules to run several hooks for templates.
  *
@@ -13,11 +15,11 @@ interface TemplateControllerInterface
     /**
      * Implement to modify the twig environment after its initialization (e.g. add filters or extensions).
      *
-     * @param \Twig_Environment $twig The current twig environment.
+     * @param \Twig\Environment $twig The current twig environment.
      *
      * @return void
      */
-    public function setUpTwig(\Twig_Environment &$twig);
+    public function setUpTwig(Environment &$twig);
 
 
     /**
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateLoader.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateLoader.php
index c5090d5544..8fcb45ed85 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateLoader.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XHTML/TemplateLoader.php
@@ -1,20 +1,27 @@
 <?php
 
-
 namespace SimpleSAML\XHTML;
 
+use SimpleSAML\Module;
+
 /**
  * This class extends the Twig\Loader\FilesystemLoader so that we can load templates from modules in twig, even
  * when the main template is not part of a module (or the same one).
  *
  * @package simplesamlphp/simplesamlphp
+ *
+ * @psalm-suppress DeprecatedInterface  This suppress may be removed when Twig 3.0 becomes the default
  */
 class TemplateLoader extends \Twig\Loader\FilesystemLoader
 {
     /**
      * This method adds a namespace dynamically so that we can load templates from modules whenever we want.
      *
-     * @inheritdoc
+     * {@inheritdoc}
+     *
+     * @param string $name
+     * @param bool $throw
+     * @return string|false|null
      */
     protected function findTemplate($name, $throw = true)
     {
@@ -30,6 +37,7 @@ protected function findTemplate($name, $throw = true)
      * Parse the name of a template in a module.
      *
      * @param string $name The full name of the template, including namespace and template name / path.
+     * @param string $default
      *
      * @return array An array with the corresponding namespace and name of the template. The namespace defaults to
      * \Twig\Loader\FilesystemLoader::MAIN_NAMESPACE, if none was specified in $name.
@@ -52,20 +60,21 @@ protected function parseModuleName($name, $default = self::MAIN_NAMESPACE)
     /**
      * Get the template directory of a module, if it exists.
      *
+     * @param string $module
      * @return string The templates directory of a module.
      *
      * @throws \InvalidArgumentException If the module is not enabled or it has no templates directory.
      */
     public static function getModuleTemplateDir($module)
     {
-        if (!\SimpleSAML\Module::isModuleEnabled($module)) {
-            throw new \InvalidArgumentException('The module \''.$module.'\' is not enabled.');
+        if (!Module::isModuleEnabled($module)) {
+            throw new \InvalidArgumentException('The module \'' . $module . '\' is not enabled.');
         }
-        $moduledir = \SimpleSAML\Module::getModuleDir($module);
+        $moduledir = Module::getModuleDir($module);
         // check if module has a /templates dir, if so, append
-        $templatedir = $moduledir.'/templates';
+        $templatedir = $moduledir . '/templates';
         if (!is_dir($templatedir)) {
-            throw new \InvalidArgumentException('The module \''.$module.'\' has no templates directory.');
+            throw new \InvalidArgumentException('The module \'' . $module . '\' has no templates directory.');
         }
         return $templatedir;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Errors.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Errors.php
index 6f6d228ef3..40af03a1cc 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Errors.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Errors.php
@@ -29,6 +29,8 @@ class Errors
 
     /**
      * Append current XML errors to the current stack level.
+     *
+     * @return void
      */
     private static function addErrors()
     {
@@ -45,6 +47,8 @@ private static function addErrors()
      *
      * A call to this function will begin a new error logging context. Every call must have
      * a corresponding call to end().
+     *
+     * @return void
      */
     public static function begin()
     {
@@ -77,7 +81,6 @@ public static function begin()
      */
     public static function end()
     {
-
         // Check whether the error access functions are present
         if (!function_exists('libxml_use_internal_errors')) {
             // Pretend that no errors occurred
@@ -110,8 +113,11 @@ public static function end()
     public static function formatError($error)
     {
         assert($error instanceof LibXMLError);
-        return 'level='.$error->level.',code='.$error->code.',line='.$error->line.',col='.$error->column.
-            ',msg='.trim($error->message);
+        return 'level=' . $error->level
+            . ',code=' . $error->code
+            . ',line=' . $error->line
+            . ',col=' . $error->column
+            . ',msg=' . trim($error->message);
     }
 
 
@@ -131,7 +137,7 @@ public static function formatErrors($errors)
 
         $ret = '';
         foreach ($errors as $error) {
-            $ret .= self::formatError($error)."\n";
+            $ret .= self::formatError($error) . "\n";
         }
 
         return $ret;
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Parser.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Parser.php
index 39287b2cb9..073faa93ee 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Parser.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Parser.php
@@ -11,49 +11,75 @@
 
 class Parser
 {
-    public $simplexml = null;
+    /** @var \SimpleXMLElement */
+    public $simplexml;
 
+    /**
+     * @param string $xml
+     */
     public function __construct($xml)
     {
-        ;
         $this->simplexml = new \SimpleXMLElement($xml);
         $this->simplexml->registerXPathNamespace('saml2', 'urn:oasis:names:tc:SAML:2.0:assertion');
         $this->simplexml->registerXPathNamespace('saml2meta', 'urn:oasis:names:tc:SAML:2.0:metadata');
         $this->simplexml->registerXPathNamespace('ds', 'http://www.w3.org/2000/09/xmldsig#');
     }
     
+
+    /**
+     * @param \SimpleXMLElement $element
+     * @return \SimpleSAML\XML\Parser
+     * @psalm-return \SimpleSAML\XML\Parser
+     */
     public static function fromSimpleXMLElement(\SimpleXMLElement $element)
     {
-        
         // Traverse all existing namespaces in element
         $namespaces = $element->getNamespaces();
         foreach ($namespaces as $prefix => $ns) {
-            $element[(($prefix === '') ? 'xmlns' : 'xmlns:'.$prefix)] = $ns;
+            $element[(($prefix === '') ? 'xmlns' : 'xmlns:' . $prefix)] = $ns;
         }
         
         /* Create a new parser with the xml document where the namespace definitions
          * are added.
          */
-        $parser = new Parser($element->asXML());
-        return $parser;
+        $xml = $element->asXML();
+        if ($xml === false) {
+            throw new \Exception('Error converting SimpleXMLElement to well-formed XML string.');
+        }
+        return new Parser($xml);
     }
     
+
+    /**
+     * @param string $xpath
+     * @param string $defvalue
+     * @throws \Exception
+     * @return string
+     */
     public function getValueDefault($xpath, $defvalue)
     {
         try {
+            /** @var string */
             return $this->getValue($xpath, true);
         } catch (\Exception $e) {
             return $defvalue;
         }
     }
     
+
+    /**
+     * @param string $xpath
+     * @param bool $required
+     * @throws \Exception
+     * @return string|null
+     */
     public function getValue($xpath, $required = false)
     {
         $result = $this->simplexml->xpath($xpath);
         if (!is_array($result) || empty($result)) {
             if ($required) {
                 throw new \Exception(
-                    'Could not get value from XML document using the following XPath expression: '.$xpath
+                    'Could not get value from XML document using the following XPath expression: ' . $xpath
                 );
             } else {
                 return null;
@@ -62,6 +88,13 @@ public function getValue($xpath, $required = false)
         return (string) $result[0];
     }
     
+
+    /**
+     * @param array $xpath
+     * @param bool $required
+     * @throws \Exception
+     * @return string|null
+     */
     public function getValueAlternatives(array $xpath, $required = false)
     {
         foreach ($xpath as $x) {
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnRequest.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnRequest.php
index 221951d9b7..899e195574 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnRequest.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnRequest.php
@@ -6,37 +6,68 @@
  *
  * @author Andreas Åkre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
+ * @deprecated This class will be removed in a future release
  */
 
 namespace SimpleSAML\XML\Shib13;
 
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+
 class AuthnRequest
 {
+    /** @var string|null */
     private $issuer = null;
+
+    /** @var string|null */
     private $relayState = null;
 
+
+    /**
+     * @param string|null $relayState
+     * @return void
+     */
     public function setRelayState($relayState)
     {
         $this->relayState = $relayState;
     }
     
+
+    /**
+     * @return string|null
+     */
     public function getRelayState()
     {
         return $this->relayState;
     }
     
+
+    /**
+     * @param string|null $issuer
+     * @return void
+     */
     public function setIssuer($issuer)
     {
         $this->issuer = $issuer;
     }
+
+
+    /**
+     * @return string|null
+     */
     public function getIssuer()
     {
         return $this->issuer;
     }
 
+
+    /**
+     * @param string $destination
+     * @param string $shire
+     * @return string
+     */
     public function createRedirect($destination, $shire)
     {
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $idpmetadata = $metadata->getMetaDataConfig($destination, 'shib13-idp-remote');
 
         $desturl = $idpmetadata->getDefaultEndpoint(
@@ -46,11 +77,13 @@ public function createRedirect($destination, $shire)
         $desturl = $desturl['Location'];
 
         $target = $this->getRelayState();
-        
-        $url = $desturl.'?'.
-            'providerId='.urlencode($this->getIssuer()).
-            '&shire='.urlencode($shire).
-            (isset($target) ? '&target='.urlencode($target) : '');
+        $issuer = $this->getIssuer();
+        assert($issuer !== null);
+
+        $url = $desturl . '?' .
+            'providerId=' . urlencode($issuer) .
+            '&shire=' . urlencode($shire) .
+            (isset($target) ? '&target=' . urlencode($target) : '');
         return $url;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnResponse.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnResponse.php
index 8b6c1fb6e3..f50045d8f6 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnResponse.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Shib13/AuthnResponse.php
@@ -5,23 +5,25 @@
  *
  * @author Andreas Åkre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
+ * @deprecated This class will be removed in a future release
  */
 
 namespace SimpleSAML\XML\Shib13;
 
 use DOMDocument;
 use DOMNode;
+use DOMXpath;
 use SAML2\DOMDocumentFactory;
-use SAML2\Utils;
-use SimpleSAML\Utils\Config;
-use SimpleSAML\Utils\Random;
-use SimpleSAML\Utils\Time;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Utils;
 use SimpleSAML\XML\Validator;
 
 class AuthnResponse
 {
     /**
-     * @var \SimpleSAML\XML\Validator This variable contains an XML validator for this message.
+     * @var \SimpleSAML\XML\Validator|null This variable contains an XML validator for this message.
      */
     private $validator = null;
 
@@ -32,14 +34,18 @@ class AuthnResponse
     private $messageValidated = false;
 
 
+    /** @var string */
     const SHIB_PROTOCOL_NS = 'urn:oasis:names:tc:SAML:1.0:protocol';
+
+
+    /** @var string */
     const SHIB_ASSERT_NS = 'urn:oasis:names:tc:SAML:1.0:assertion';
 
 
     /**
-     * @var \DOMDocument The DOMDocument which represents this message.
+     * @var \DOMDocument|null The DOMDocument which represents this message.
      */
-    private $dom;
+    private $dom = null;
 
     /**
      * @var string|null The relaystate which is associated with this response.
@@ -51,6 +57,7 @@ class AuthnResponse
      * Set whether this message was validated externally.
      *
      * @param bool $messageValidated  TRUE if the message is already validated, FALSE if not.
+     * @return void
      */
     public function setMessageValidated($messageValidated)
     {
@@ -60,6 +67,11 @@ public function setMessageValidated($messageValidated)
     }
 
 
+    /**
+     * @param string $xml
+     * @throws \Exception
+     * @return void
+     */
     public function setXML($xml)
     {
         assert(is_string($xml));
@@ -71,16 +83,30 @@ public function setXML($xml)
         }
     }
 
+
+    /**
+     * @param string|null $relayState
+     * @return void
+     */
     public function setRelayState($relayState)
     {
         $this->relayState = $relayState;
     }
 
+
+    /**
+     * @return string|null
+     */
     public function getRelayState()
     {
         return $this->relayState;
     }
 
+
+    /**
+     * @throws \SimpleSAML\Error\Exception
+     * @return bool
+     */
     public function validate()
     {
         assert($this->dom instanceof DOMDocument);
@@ -97,7 +123,7 @@ public function validate()
         $issuer = $this->getIssuer();
 
         // Get the metadata of the issuer
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $md = $metadata->getMetaDataConfig($issuer, 'shib13-idp-remote');
 
         $publicKeys = $md->getPublicKeys('signing');
@@ -117,10 +143,10 @@ public function validate()
             $this->validator->validateFingerprint($certFingerprints);
         } elseif ($md->hasValue('caFile')) {
             // Validate against CA
-            $this->validator->validateCA(Config::getCertPath($md->getString('caFile')));
+            $this->validator->validateCA(Utils\Config::getCertPath($md->getString('caFile')));
         } else {
-            throw new \SimpleSAML\Error\Exception(
-                'Missing certificate in Shibboleth 1.3 IdP Remote metadata for identity provider ['.$issuer.'].'
+            throw new Error\Exception(
+                'Missing certificate in Shibboleth 1.3 IdP Remote metadata for identity provider [' . $issuer . '].'
             );
         }
 
@@ -131,7 +157,7 @@ public function validate()
     /**
      * Checks if the given node is validated by the signature on this response.
      *
-     * @param \DOMElement $node Node to be validated.
+     * @param \DOMElement|\SimpleXMLElement $node Node to be validated.
      * @return bool TRUE if the node is validated or FALSE if not.
      */
     private function isNodeValidated($node)
@@ -150,7 +176,7 @@ private function isNodeValidated($node)
             $node = dom_import_simplexml($node);
         }
 
-        assert($node instanceof \DOMNode);
+        assert($node instanceof DOMNode);
 
         return $this->validator->isNodeValidated($node);
     }
@@ -167,21 +193,22 @@ private function isNodeValidated($node)
     private function doXPathQuery($query, $node = null)
     {
         assert(is_string($query));
-        assert($this->dom instanceof \DOMDocument);
+        assert($this->dom instanceof DOMDocument);
 
         if ($node === null) {
             $node = $this->dom->documentElement;
         }
 
-        assert($node instanceof \DOMNode);
+        assert($node instanceof DOMNode);
 
-        $xPath = new \DOMXpath($this->dom);
+        $xPath = new DOMXpath($this->dom);
         $xPath->registerNamespace('shibp', self::SHIB_PROTOCOL_NS);
         $xPath->registerNamespace('shib', self::SHIB_ASSERT_NS);
 
         return $xPath->query($query, $node);
     }
 
+
     /**
      * Retrieve the session index of this response.
      *
@@ -201,13 +228,17 @@ public function getSessionIndex()
     }
 
     
+    /**
+     * @throws \Exception
+     * @return array
+     */
     public function getAttributes()
     {
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $md = $metadata->getMetaData($this->getIssuer(), 'shib13-idp-remote');
         $base64 = isset($md['base64attributes']) ? $md['base64attributes'] : false;
 
-        if (!($this->dom instanceof \DOMDocument)) {
+        if (!($this->dom instanceof DOMDocument)) {
             return [];
         }
 
@@ -229,7 +260,7 @@ public function getAttributes()
 
                 if ($start && $end) {
                     if (!self::checkDateConditions($start, $end)) {
-                        error_log('Date check failed ... (from '.$start.' to '.$end.')');
+                        error_log('Date check failed ... (from ' . $start . ' to ' . $end . ')');
                         continue;
                     }
                 }
@@ -239,18 +270,22 @@ public function getAttributes()
                 'shib:AttributeStatement/shib:Attribute/shib:AttributeValue',
                 $assertion
             );
-            /** @var \DOMElement $attribute */
+
             foreach ($attribute_nodes as $attribute) {
+                /** @var \DOMElement $attribute */
+
                 $value = $attribute->textContent;
-                $name = $attribute->parentNode->getAttribute('AttributeName');
+                /** @var \DOMElement $parentNode */
+                $parentNode = $attribute->parentNode;
+                $name = $parentNode->getAttribute('AttributeName');
 
                 if ($attribute->hasAttribute('Scope')) {
-                    $scopePart = '@'.$attribute->getAttribute('Scope');
+                    $scopePart = '@' . $attribute->getAttribute('Scope');
                 } else {
                     $scopePart = '';
                 }
 
-                if (!is_string($name)) {
+                if (empty($name)) {
                     throw new \Exception('Shib13 Attribute node without an AttributeName.');
                 }
 
@@ -261,10 +296,10 @@ public function getAttributes()
                 if ($base64) {
                     $encodedvalues = explode('_', $value);
                     foreach ($encodedvalues as $v) {
-                        $attributes[$name][] = base64_decode($v).$scopePart;
+                        $attributes[$name][] = base64_decode($v) . $scopePart;
                     }
                 } else {
-                    $attributes[$name][] = $value.$scopePart;
+                    $attributes[$name][] = $value . $scopePart;
                 }
             }
         }
@@ -273,6 +308,10 @@ public function getAttributes()
     }
 
     
+    /**
+     * @throws \Exception
+     * @return string
+     */
     public function getIssuer()
     {
         $query = '/shibp:Response/shib:Assertion/@Issuer';
@@ -285,6 +324,10 @@ public function getIssuer()
         }
     }
 
+
+    /**
+     * @return array
+     */
     public function getNameID()
     {
         $nameID = [];
@@ -310,7 +353,7 @@ public function getNameID()
      * @param array|null $attributes The attributes which should be included in the response.
      * @return string The response.
      */
-    public function generate(\SimpleSAML\Configuration $idp, \SimpleSAML\Configuration $sp, $shire, $attributes)
+    public function generate(Configuration $idp, Configuration $sp, $shire, $attributes)
     {
         assert(is_string($shire));
         assert($attributes === null || is_array($attributes));
@@ -323,16 +366,16 @@ public function generate(\SimpleSAML\Configuration $idp, \SimpleSAML\Configurati
             $scopedAttributes = [];
         }
 
-        $id = Random::generateID();
+        $id = Utils\Random::generateID();
         
-        $issueInstant = Time::generateTimestamp();
+        $issueInstant = Utils\Time::generateTimestamp();
         
         // 30 seconds timeskew back in time to allow differing clocks
-        $notBefore = Time::generateTimestamp(time() - 30);
+        $notBefore = Utils\Time::generateTimestamp(time() - 30);
         
         
-        $assertionExpire = Time::generateTimestamp(time() + 300); // 5 minutes
-        $assertionid = Random::generateID();
+        $assertionExpire = Utils\Time::generateTimestamp(time() + 300); // 5 minutes
+        $assertionid = Utils\Random::generateID();
 
         $spEntityId = $sp->getString('entityid');
 
@@ -340,20 +383,20 @@ public function generate(\SimpleSAML\Configuration $idp, \SimpleSAML\Configurati
         $base64 = $sp->getBoolean('base64attributes', false);
 
         $namequalifier = $sp->getString('NameQualifier', $spEntityId);
-        $nameid = Random::generateID();
+        $nameid = Utils\Random::generateID();
         $subjectNode =
-            '<Subject>'.
-            '<NameIdentifier'.
-            ' Format="urn:mace:shibboleth:1.0:nameIdentifier"'.
-            ' NameQualifier="'.htmlspecialchars($namequalifier).'"'.
-            '>'.
-            htmlspecialchars($nameid).
-            '</NameIdentifier>'.
-            '<SubjectConfirmation>'.
-            '<ConfirmationMethod>'.
-            'urn:oasis:names:tc:SAML:1.0:cm:bearer'.
-            '</ConfirmationMethod>'.
-            '</SubjectConfirmation>'.
+            '<Subject>' .
+            '<NameIdentifier' .
+            ' Format="urn:mace:shibboleth:1.0:nameIdentifier"' .
+            ' NameQualifier="' . htmlspecialchars($namequalifier) . '"' .
+            '>' .
+            htmlspecialchars($nameid) .
+            '</NameIdentifier>' .
+            '<SubjectConfirmation>' .
+            '<ConfirmationMethod>' .
+            'urn:oasis:names:tc:SAML:1.0:cm:bearer' .
+            '</ConfirmationMethod>' .
+            '</SubjectConfirmation>' .
             '</Subject>';
 
         $encodedattributes = '';
@@ -375,25 +418,25 @@ public function generate(\SimpleSAML\Configuration $idp, \SimpleSAML\Configurati
         $response = '<Response xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
     xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
     xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" IssueInstant="'.$issueInstant.'"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" IssueInstant="' . $issueInstant . '"
     MajorVersion="1" MinorVersion="1"
-    Recipient="'.htmlspecialchars($shire).'" ResponseID="'.$id.'">
+    Recipient="' . htmlspecialchars($shire) . '" ResponseID="' . $id . '">
     <Status>
         <StatusCode Value="samlp:Success" />
     </Status>
     <Assertion xmlns="urn:oasis:names:tc:SAML:1.0:assertion"
-        AssertionID="'.$assertionid.'" IssueInstant="'.$issueInstant.'"
-        Issuer="'.htmlspecialchars($idp->getString('entityid')).'" MajorVersion="1" MinorVersion="1">
-        <Conditions NotBefore="'.$notBefore.'" NotOnOrAfter="'.$assertionExpire.'">
+        AssertionID="' . $assertionid . '" IssueInstant="' . $issueInstant . '"
+        Issuer="' . htmlspecialchars($idp->getString('entityid')) . '" MajorVersion="1" MinorVersion="1">
+        <Conditions NotBefore="' . $notBefore . '" NotOnOrAfter="' . $assertionExpire . '">
             <AudienceRestrictionCondition>
-                <Audience>'.htmlspecialchars($audience).'</Audience>
+                <Audience>' . htmlspecialchars($audience) . '</Audience>
             </AudienceRestrictionCondition>
         </Conditions>
-        <AuthenticationStatement AuthenticationInstant="'.$issueInstant.'"
-            AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified">'.
-            $subjectNode.'
+        <AuthenticationStatement AuthenticationInstant="' . $issueInstant . '"
+            AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified">' .
+            $subjectNode . '
         </AuthenticationStatement>
-        '.$encodedattributes.'
+        ' . $encodedattributes . '
     </Assertion>
 </Response>';
 
@@ -423,7 +466,7 @@ private function encAttribute($name, $values, $base64, $scopedAttributes)
             $scoped = false;
         }
 
-        $attr = '<Attribute AttributeName="'.htmlspecialchars($name).
+        $attr = '<Attribute AttributeName="' . htmlspecialchars($name) .
             '" AttributeNamespace="urn:mace:shibboleth:1.0:attributeNamespace:uri">';
         foreach ($values as $value) {
             $scopePart = '';
@@ -431,7 +474,7 @@ private function encAttribute($name, $values, $base64, $scopedAttributes)
                 $tmp = explode('@', $value, 2);
                 if (count($tmp) === 2) {
                     $value = $tmp[0];
-                    $scopePart = ' Scope="'.htmlspecialchars($tmp[1]).'"';
+                    $scopePart = ' Scope="' . htmlspecialchars($tmp[1]) . '"';
                 }
             }
 
@@ -439,7 +482,7 @@ private function encAttribute($name, $values, $base64, $scopedAttributes)
                 $value = base64_encode($value);
             }
 
-            $attr .= '<AttributeValue'.$scopePart.'>'.htmlspecialchars($value).'</AttributeValue>';
+            $attr .= '<AttributeValue' . $scopePart . '>' . htmlspecialchars($value) . '</AttributeValue>';
         }
         $attr .= '</Attribute>';
 
@@ -468,14 +511,14 @@ protected static function checkDateConditions($start = null, $end = null)
         $currentTime = time();
 
         if (!empty($start)) {
-            $startTime = Utils::xsDateTimeToTimestamp($start);
+            $startTime = \SAML2\Utils::xsDateTimeToTimestamp($start);
             // allow for a 10 minute difference in time
             if (($startTime < 0) || (($startTime - 600) > $currentTime)) {
                 return false;
             }
         }
         if (!empty($end)) {
-            $endTime = Utils::xsDateTimeToTimestamp($end);
+            $endTime = \SAML2\Utils::xsDateTimeToTimestamp($end);
             if (($endTime < 0) || ($endTime <= $currentTime)) {
                 return false;
             }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Signer.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Signer.php
index 26f46ab62f..bae8a0ce4f 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Signer.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Signer.php
@@ -16,7 +16,7 @@
 use DOMText;
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
-use SimpleSAML\Utils\Config;
+use SimpleSAML\Utils;
 
 class Signer
 {
@@ -26,7 +26,7 @@ class Signer
     private $idAttrName = '';
 
     /**
-     * @var XMLSecurityKey|bool  The private key (as an XMLSecurityKey).
+     * @var XMLSecurityKey|false  The private key (as an XMLSecurityKey).
      */
     private $privateKey = false;
 
@@ -96,6 +96,7 @@ public function __construct($options = [])
      * by \SimpleSAML\Utils\Crypto::loadPrivateKey(...).
      *
      * @param array $privatekey  The private key.
+     * @return void
      */
     public function loadPrivateKeyArray($privatekey)
     {
@@ -122,6 +123,7 @@ public function loadPrivateKeyArray($privatekey)
      * @param bool $full_path  Whether the filename found in the configuration contains the
      *                         full path to the private key or not. Default to false.
      * @throws \Exception
+     * @return void
      */
     public function loadPrivateKey($file, $pass = null, $full_path = false)
     {
@@ -130,17 +132,17 @@ public function loadPrivateKey($file, $pass = null, $full_path = false)
         assert(is_bool($full_path));
 
         if (!$full_path) {
-            $keyFile = Config::getCertPath($file);
+            $keyFile = Utils\Config::getCertPath($file);
         } else {
             $keyFile = $file;
         }
 
         if (!file_exists($keyFile)) {
-            throw new \Exception('Could not find private key file "'.$keyFile.'".');
+            throw new \Exception('Could not find private key file "' . $keyFile . '".');
         }
         $keyData = file_get_contents($keyFile);
         if ($keyData === false) {
-            throw new \Exception('Unable to read private key file "'.$keyFile.'".');
+            throw new \Exception('Unable to read private key file "' . $keyFile . '".');
         }
 
         $privatekey = ['PEM' => $keyData];
@@ -159,6 +161,7 @@ public function loadPrivateKey($file, $pass = null, $full_path = false)
      *
      * @param array $publickey The public key.
      * @throws \Exception
+     * @return void
      */
     public function loadPublicKeyArray($publickey)
     {
@@ -185,6 +188,7 @@ public function loadPublicKeyArray($publickey)
      * @param bool $full_path  Whether the filename found in the configuration contains the
      *                         full path to the private key or not. Default to false.
      * @throws \Exception
+     * @return void
      */
     public function loadCertificate($file, $full_path = false)
     {
@@ -192,18 +196,18 @@ public function loadCertificate($file, $full_path = false)
         assert(is_bool($full_path));
 
         if (!$full_path) {
-            $certFile = Config::getCertPath($file);
+            $certFile = Utils\Config::getCertPath($file);
         } else {
             $certFile = $file;
         }
 
         if (!file_exists($certFile)) {
-            throw new \Exception('Could not find certificate file "'.$certFile.'".');
+            throw new \Exception('Could not find certificate file "' . $certFile . '".');
         }
 
         $cert = file_get_contents($certFile);
         if ($cert === false) {
-            throw new \Exception('Unable to read certificate file "'.$certFile.'".');
+            throw new \Exception('Unable to read certificate file "' . $certFile . '".');
         }
         $this->certificate = $cert;
     }
@@ -213,6 +217,7 @@ public function loadCertificate($file, $full_path = false)
      * Set the attribute name for the ID value.
      *
      * @param string $idAttrName  The name of the attribute which contains the id.
+     * @return void
      */
     public function setIDAttribute($idAttrName)
     {
@@ -232,6 +237,7 @@ public function setIDAttribute($idAttrName)
      * @param bool $full_path  Whether the filename found in the configuration contains the
      *                         full path to the private key or not. Default to false.
      * @throws \Exception
+     * @return void
      */
     public function addCertificate($file, $full_path = false)
     {
@@ -239,18 +245,18 @@ public function addCertificate($file, $full_path = false)
         assert(is_bool($full_path));
 
         if (!$full_path) {
-            $certFile = Config::getCertPath($file);
+            $certFile = Utils\Config::getCertPath($file);
         } else {
             $certFile = $file;
         }
 
         if (!file_exists($certFile)) {
-            throw new \Exception('Could not find extra certificate file "'.$certFile.'".');
+            throw new \Exception('Could not find extra certificate file "' . $certFile . '".');
         }
 
         $certificate = file_get_contents($certFile);
         if ($certificate === false) {
-            throw new \Exception('Unable to read extra certificate file "'.$certFile.'".');
+            throw new \Exception('Unable to read extra certificate file "' . $certFile . '".');
         }
 
         $this->extraCertificates[] = $certificate;
@@ -268,6 +274,7 @@ public function addCertificate($file, $full_path = false)
      *                                   in which case the signature will be appended to the element spesified in
      *                                   $insertInto.
      * @throws \Exception
+     * @return void
      */
     public function sign($node, $insertInto, $insertBefore = null)
     {
@@ -276,7 +283,8 @@ public function sign($node, $insertInto, $insertBefore = null)
         assert($insertBefore === null || $insertBefore instanceof DOMElement ||
             $insertBefore instanceof DOMComment || $insertBefore instanceof DOMText);
 
-        if ($this->privateKey === false) {
+        $privateKey = $this->privateKey;
+        if ($privateKey === false) {
             throw new \Exception('Private key not set.');
         }
 
@@ -296,9 +304,7 @@ public function sign($node, $insertInto, $insertBefore = null)
             $options
         );
 
-        /** @var \RobRichards\XMLSecLibs\XMLSecurityKey $this->privateKey */
-        $objXMLSecDSig->sign($this->privateKey);
-
+        $objXMLSecDSig->sign($privateKey);
 
         // Add the certificate to the signature
         $objXMLSecDSig->add509Cert($this->certificate, true);
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Validator.php b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Validator.php
index 8dd46f8971..0e201c8898 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Validator.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/XML/Validator.php
@@ -16,10 +16,10 @@
 class Validator
 {
     /**
-     * @var string This variable contains the X509 certificate the XML document
+     * @var string|null This variable contains the X509 certificate the XML document
      *             was signed with, or NULL if it wasn't signed with an X509 certificate.
      */
-    private $x509Certificate;
+    private $x509Certificate = null;
 
     /**
      * @var array|null This variable contains the nodes which are signed.
@@ -37,7 +37,7 @@ class Validator
      * - A string: Assumed to be a PEM-encoded certificate / public key.
      * - An array: Assumed to be an array returned by \SimpleSAML\Utils\Crypto::loadPublicKey.
      *
-     * @param \DOMNode $xmlNode The XML node which contains the Signature element.
+     * @param \DOMDocument $xmlNode The XML node which contains the Signature element.
      * @param string|array $idAttribute The ID attribute which is used in node references. If
      *          this attribute is NULL (the default), then we will use whatever is the default
      *          ID. Can be eigther a string with one value, or an array with multiple ID
@@ -47,7 +47,7 @@ class Validator
      */
     public function __construct($xmlNode, $idAttribute = null, $publickey = false)
     {
-        assert($xmlNode instanceof \DOMNode);
+        assert($xmlNode instanceof \DOMDocument);
 
         if ($publickey === null) {
             $publickey = false;
@@ -115,7 +115,7 @@ public function __construct($xmlNode, $idAttribute = null, $publickey = false)
                 $certificate = $objKey->getX509Certificate();
                 if ($certificate === null) {
                     // Wasn't signed with an X509 certificate
-                    throw new \Exception('Message wasn\'t signed with an X509 certificate,'.
+                    throw new \Exception('Message wasn\'t signed with an X509 certificate,' .
                         ' and no public key was provided in the metadata.');
                 }
 
@@ -143,7 +143,7 @@ public function __construct($xmlNode, $idAttribute = null, $publickey = false)
      * This function will return the certificate as a PEM-encoded string. If the XML
      * wasn't signed by an X509 certificate, NULL will be returned.
      *
-     * @return string  The certificate as a PEM-encoded string, or NULL if not signed with an X509 certificate.
+     * @return string|null  The certificate as a PEM-encoded string, or NULL if not signed with an X509 certificate.
      */
     public function getX509Certificate()
     {
@@ -156,7 +156,7 @@ public function getX509Certificate()
      *
      * @param string $x509cert  The certificate as a base64-encoded string. The string may optionally
      *                          be framed with '-----BEGIN CERTIFICATE-----' and '-----END CERTIFICATE-----'.
-     * @return string  The fingerprint as a 40-character lowercase hexadecimal number. NULL is returned if the
+     * @return string|null  The fingerprint as a 40-character lowercase hexadecimal number. NULL is returned if the
      *                 argument isn't an X509 certificate.
      */
     private static function calculateX509Fingerprint($x509cert)
@@ -201,6 +201,7 @@ private static function calculateX509Fingerprint($x509cert)
      * @param string $certificate The X509 certificate we should validate.
      * @param array $fingerprints The valid fingerprints.
      * @throws \Exception
+     * @return void
      */
     private static function validateCertificateFingerprint($certificate, $fingerprints)
     {
@@ -210,7 +211,7 @@ private static function validateCertificateFingerprint($certificate, $fingerprin
         $certFingerprint = self::calculateX509Fingerprint($certificate);
         if ($certFingerprint === null) {
             // Couldn't calculate fingerprint from X509 certificate. Should not happen.
-            throw new \Exception('Unable to calculate fingerprint from X509'.
+            throw new \Exception('Unable to calculate fingerprint from X509' .
                 ' certificate. Maybe it isn\'t an X509 certificate?');
         }
 
@@ -224,8 +225,8 @@ private static function validateCertificateFingerprint($certificate, $fingerprin
         }
 
         // None of the fingerprints matched. Throw an exception describing the error.
-        throw new \Exception('Invalid fingerprint of certificate. Expected one of ['.
-            implode('], [', $fingerprints).'], but got ['.$certFingerprint.']');
+        throw new \Exception('Invalid fingerprint of certificate. Expected one of [' .
+            implode('], [', $fingerprints) . '], but got [' . $certFingerprint . ']');
     }
 
 
@@ -239,6 +240,7 @@ private static function validateCertificateFingerprint($certificate, $fingerprin
      * @param string|array $fingerprints  The fingerprints which should match. This can be a single string,
      *                                    or an array of fingerprints.
      * @throws \Exception
+     * @return void
      */
     public function validateFingerprint($fingerprints)
     {
@@ -275,12 +277,14 @@ public function isNodeValidated($node)
     {
         assert($node instanceof \DOMNode);
 
-        while ($node !== null) {
-            if (in_array($node, $this->validNodes, true)) {
-                return true;
-            }
+        if ($this->validNodes !== null) {
+            while ($node !== null) {
+                if (in_array($node, $this->validNodes, true)) {
+                    return true;
+                }
 
-            $node = $node->parentNode;
+                $node = $node->parentNode;
+            }
         }
 
         /* Neither this node nor any of the parent nodes could be found in the list of
@@ -297,6 +301,7 @@ public function isNodeValidated($node)
      *
      * @param string $caFile  File with trusted certificates, in PEM-format.
      * @throws \Exception
+     * @return void
      */
     public function validateCA($caFile)
     {
@@ -332,7 +337,7 @@ private static function validateCABuiltIn($certificate, $caFile)
         $errors = '';
         // Log errors
         while (($error = openssl_error_string()) !== false) {
-            $errors .= ' ['.$error.']';
+            $errors .= ' [' . $error . ']';
         }
 
         if ($res !== true) {
@@ -369,7 +374,7 @@ private static function validateCAExec($certificate, $caFile)
 
         $cmdline = '';
         foreach ($command as $c) {
-            $cmdline .= escapeshellarg($c).' ';
+            $cmdline .= escapeshellarg($c) . ' ';
         }
 
         $cmdline .= '2>&1';
@@ -379,7 +384,7 @@ private static function validateCAExec($certificate, $caFile)
         ];
         $process = proc_open($cmdline, $descSpec, $pipes);
         if (!is_resource($process)) {
-            throw new \Exception('Failed to execute verification command: '.$cmdline);
+            throw new \Exception('Failed to execute verification command: ' . $cmdline);
         }
 
         if (fwrite($pipes[0], $certificate) === false) {
@@ -391,7 +396,7 @@ private static function validateCAExec($certificate, $caFile)
         while (!feof($pipes[1])) {
             $line = trim(fgets($pipes[1]));
             if (strlen($line) > 0) {
-                $out .= ' ['.$line.']';
+                $out .= ' [' . $line . ']';
             }
         }
         fclose($pipes[1]);
@@ -413,6 +418,7 @@ private static function validateCAExec($certificate, $caFile)
      * @param string $certificate The certificate, in PEM format.
      * @param string $caFile File with trusted certificates, in PEM-format.
      * @throws \Exception
+     * @return void
      * @deprecated
      */
     public static function validateCertificate($certificate, $caFile)
@@ -421,21 +427,21 @@ public static function validateCertificate($certificate, $caFile)
         assert(is_string($caFile));
 
         if (!file_exists($caFile)) {
-            throw new \Exception('Could not load CA file: '.$caFile);
+            throw new \Exception('Could not load CA file: ' . $caFile);
         }
 
-        Logger::debug('Validating certificate against CA file: '.var_export($caFile, true));
+        Logger::debug('Validating certificate against CA file: ' . var_export($caFile, true));
 
         $resBuiltin = self::validateCABuiltIn($certificate, $caFile);
         if ($resBuiltin !== true) {
-            Logger::debug('Failed to validate with internal function: '.var_export($resBuiltin, true));
+            Logger::debug('Failed to validate with internal function: ' . var_export($resBuiltin, true));
 
             $resExternal = self::validateCAExec($certificate, $caFile);
             if ($resExternal !== true) {
-                Logger::debug('Failed to validate with external function: '.var_export($resExternal, true));
-                throw new \Exception('Could not verify certificate against CA file "'.
-                    $caFile.'". Internal result:'.$resBuiltin.
-                    ' External result:'.$resExternal);
+                Logger::debug('Failed to validate with external function: ' . var_export($resExternal, true));
+                throw new \Exception('Could not verify certificate against CA file "' .
+                    $caFile . '". Internal result:' . var_export($resBuiltin, true) .
+                    ' External result:' . var_export($resExternal, true));
             }
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/_autoload.php b/vendor/simplesamlphp/simplesamlphp/lib/_autoload.php
index 245acd1e55..e44c70f977 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/_autoload.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/_autoload.php
@@ -9,12 +9,12 @@
  */
 
 // SSP is loaded as a separate project
-if (file_exists(dirname(dirname(__FILE__)).'/vendor/autoload.php')) {
-    require_once dirname(dirname(__FILE__)).'/vendor/autoload.php';
+if (file_exists(dirname(dirname(__FILE__)) . '/vendor/autoload.php')) {
+    require_once dirname(dirname(__FILE__)) . '/vendor/autoload.php';
 } else {
     // SSP is loaded as a library
-    if (file_exists(dirname(dirname(__FILE__)).'/../../autoload.php')) {
-        require_once dirname(dirname(__FILE__)).'/../../autoload.php';
+    if (file_exists(dirname(dirname(__FILE__)) . '/../../autoload.php')) {
+        require_once dirname(dirname(__FILE__)) . '/../../autoload.php';
     } else {
         throw new Exception('Unable to load Composer autoloader');
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/_autoload_modules.php b/vendor/simplesamlphp/simplesamlphp/lib/_autoload_modules.php
index 223ebc5fd6..765dfd899b 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/_autoload_modules.php
+++ b/vendor/simplesamlphp/simplesamlphp/lib/_autoload_modules.php
@@ -21,7 +21,7 @@ function temporaryLoader($class)
 {
     // handle the upgrade to the latest version of XMLSecLibs using namespaces
     if (strstr($class, 'XMLSec') && !strstr($class, '\\RobRichards\\XMLSecLibs\\')) {
-        $new = '\\RobRichards\\XMLSecLibs\\'.$class;
+        $new = '\\RobRichards\\XMLSecLibs\\' . $class;
         if (class_exists($new, true)) {
             class_alias($new, $class);
             SimpleSAML\Logger::warning("The class '$class' is now using namespaces, please use '$new'.");
@@ -44,6 +44,7 @@ class_alias($new, $class);
         'SimpleSAML_IdP_LogoutHandler' => 'SimpleSAML_IdP_LogoutHandlerInterface',
         'SimpleSAML_IdP_LogoutIFrame' => 'SimpleSAML_IdP_IFrameLogoutHandler',
         'SimpleSAML_IdP_LogoutTraditional' => 'SimpleSAML_IdP_TraditionalLogoutHandler',
+        'SimpleSAML_Auth_Default' => 'SimpleSAML_Auth_DefaultAuth',
     ];
     if (array_key_exists($class, $renamed)) {
         // the class has been renamed, try to load it and create an alias
@@ -52,7 +53,7 @@ class_alias($new, $class);
 
     // try to load it from the corresponding file
     $path = explode('_', $class);
-    $file = dirname(__FILE__).DIRECTORY_SEPARATOR.join(DIRECTORY_SEPARATOR, $path).'.php';
+    $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . join(DIRECTORY_SEPARATOR, $path) . '.php';
     if (file_exists($file)) {
         require_once $file;
     }
@@ -110,7 +111,7 @@ function sspmodAutoloadPSR0($className)
         return;
     }
 
-    $file = \SimpleSAML\Module::getModuleDir($module).'/lib/'.join('/', $path).'.php';
+    $file = \SimpleSAML\Module::getModuleDir($module) . '/lib/' . join('/', $path) . '.php';
     if (!file_exists($file)) {
         return;
     }
@@ -119,13 +120,14 @@ function sspmodAutoloadPSR0($className)
     if (!class_exists($className, false) && !interface_exists($className, false)) {
         // the file exists, but the class is not defined. Is it using namespaces?
         $nspath = join('\\', $path);
-        if (class_exists('SimpleSAML\\Module\\'.$module.'\\'.$nspath) ||
-            interface_exists('SimpleSAML\\Module\\'.$module.'\\'.$nspath)
+        if (
+            class_exists('SimpleSAML\\Module\\' . $module . '\\' . $nspath)
+            || interface_exists('SimpleSAML\\Module\\' . $module . '\\' . $nspath)
         ) {
             // the class has been migrated, create an alias and warn about it
             \SimpleSAML\Logger::warning(
-                "The class or interface '$className' is now using namespaces, please use 'SimpleSAML\\Module\\".
-                $module."\\".$nspath."' instead."
+                "The class or interface '$className' is now using namespaces, please use 'SimpleSAML\\Module\\" .
+                $module . "\\" . $nspath . "' instead."
             );
             class_alias("SimpleSAML\\Module\\$module\\$nspath", $className);
         }
@@ -161,7 +163,7 @@ function sspmodAutoloadPSR4($className)
         return; // module not enabled, avoid giving out any information at all
     }
 
-    $file = \SimpleSAML\Module::getModuleDir($module).'/lib/'.implode('/', $elements).'.php';
+    $file = \SimpleSAML\Module::getModuleDir($module) . '/lib/' . implode('/', $elements) . '.php';
 
     if (file_exists($file)) {
         require_once($file);
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..30634432a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Algemene naam"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Algemene naam"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Algemene naam"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domein komponent (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domein komponent (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domein komponent (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Vertoon naam"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisasie tuisblad"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisasie tuisblad"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisasie tuisblad"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Wettige naam"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Wettige naam"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Wettige naam"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Affiliasie"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Affiliasie"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Affiliasie"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Identiteitsversekerings profiel"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identiteitsversekerings profiel"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identiteitsversekerings profiel"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Reg mbt. die diens"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Reg mbt. die diens"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Reg mbt. die diens"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Bynaam"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Bynaam"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Bynaam"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Kenmerkende naam (DN) van die person se tuisorganisasie"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Kenmerkende naam (DN) van die person se tuisorganisasie"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Kenmerkende naam (DN) van die person se tuisorganisasie"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Kenmerkende naam (DN) van die persoon se organisatoriese afdeling"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Kenmerkende naam (DN) van die persoon se organisatoriese afdeling"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Kenmerkende naam (DN) van die persoon se organisatoriese afdeling"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primêre affiliasie"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primêre affiliasie"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primêre affiliasie"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Kenmerkende naam (DN) van die persoon se primêre organisatoriese afdeling"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Kenmerkende naam (DN) van die persoon se primêre organisatoriese afdeling"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Kenmerkende naam (DN) van die persoon se primêre organisatoriese afdeling"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Affiliasie by Tuis organisasie"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Affiliasie by Tuis organisasie"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Affiliasie by Tuis organisasie"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faksnommer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faksnommer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faksnommer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Voornaam"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Tuistelefoon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Tuistelefoon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Tuistelefoon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Tuis posadres"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Tuis posadres"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Tuis posadres"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG Foto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG Foto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG Foto"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Ligging"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Ligging"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Ligging"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-pos"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-pos"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-pos"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Bestuurder"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Bestuurder"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Bestuurder"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Selfoon"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Selfoon"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Selfoon"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisasie nommer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisasie nommer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisasie nommer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Geboorte datum"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Geboorte datum"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Geboorte datum"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Identiteitsnommer"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Identiteitsnommer"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Identiteitsnommer"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Identiteitsnommer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Identiteitsnommer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Identiteitsnommer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organisasie naam"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organisasie naam"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organisasie naam"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisasie eenheid"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisasie eenheid"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisasie eenheid"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Posbus"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Posbus"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Posbus"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Posadres"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Posadres"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Posadres"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Poskode"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Poskode"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Poskode"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Taal voorkeur"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Taal voorkeur"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Taal voorkeur"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Tuis Organisasie domein naam"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Tuis Organisasie domein naam"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Tuis Organisasie domein naam"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Tuis Organisasie domein naam"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Private informasie elemente"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informasie elemente"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Private informasie elemente"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informasie elemente"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Van"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Van"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Van"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Straat"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Straat"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Straat"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefoon nommer"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefoon nommer"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefoon nommer"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Gebruikers ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Gebruikerswagwoord"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Gebruikerswagwoord"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Gebruikerswagwoord"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Algemene naam"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Vertoon naam"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Vertoon naam"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Persoonlike ID by tuis organisasie"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Aanhoudende anonieme ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faksnommer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Voornaam"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Tuistelefoon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Ligging"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-pos"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-pos"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-pos"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-pos"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-pos"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Selfoon"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organisasie naam"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Poskode"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Poskode"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Taal voorkeur"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Taal voorkeur"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Taal voorkeur"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Taal voorkeur"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Taal voorkeur"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Van"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Van"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Van"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Van"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Van"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefoon nommer"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefoon nommer"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Gebruikers ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/messages.po
index 6de84e3fbd..011b77335c 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/af/LC_MESSAGES/messages.po
@@ -38,12 +38,6 @@ msgstr "Gebruikersnaam"
 msgid "{errors:title_METADATA}"
 msgstr "Fout met die laai van die metadata"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Reg mbt. die diens"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG Foto"
-
 msgid "{errors:descr_LOGOUTINFOLOST}"
 msgstr ""
 "Die inligting vir die huidige uiteken sessie is verlore. Jy moet "
@@ -122,15 +116,9 @@ msgstr ""
 "administrateur is van dié diens moet jy verseker dat jou metadata "
 "konfigurasie korrek is."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Kenmerkende naam (DN) van die person se tuisorganisasie"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Foutiewe versoek ontvang"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Posadres"
-
 msgid "{logout:title}"
 msgstr "Afgemeld"
 
@@ -143,41 +131,20 @@ msgstr "Kies jou tuisorganisasie"
 msgid "{logout:hold}"
 msgstr "Hou die verbinding"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Affiliasie by Tuis organisasie"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Van"
-
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organisasie naam"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefoon nommer"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Die gestuurde parameters na die ontdekkings diens was not volgens die "
 "korrekte spesifikasies nie."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-pos"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Daar was 'n fout met die skepping van die SAML versoek."
 
 msgid "{logout:return}"
 msgstr "Terug na diens"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Vertoon naam"
-
 msgid "{logout:logout_all}"
 msgstr "Ja, alle dienste"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Tuis posadres"
-
 msgid "{disco:select}"
 msgstr "Kies"
 
@@ -205,9 +172,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Wil jy van alle bogenoemde dienste afmeld?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Geen toegang"
 
@@ -224,9 +188,6 @@ msgstr ""
 "Toestandsinformasie verlore en daar is geen manier om die versoek weer te"
 " stuur nie"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Identiteitsnommer"
-
 msgid "{login:password}"
 msgstr "Wagwoord"
 
@@ -247,15 +208,9 @@ msgstr "Instellings fout"
 msgid "{errors:title_LOGOUTREQUEST}"
 msgstr "Fout met die verwerking van die Afmeldings Versoek"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Affiliasie"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata nie gevind nie"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Voornaam"
-
 msgid "{login:contact_info}"
 msgstr "Kontak detail:"
 
@@ -279,9 +234,6 @@ msgstr ""
 "Verifikasie het misluk: die sertifikaat wat jou webblaaier gestuur het is"
 " onbekend"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisasie tuisblad"
-
 msgid "{logout:logging_out_from}"
 msgstr "Afmelding van die volgende dienste:"
 
@@ -291,36 +243,21 @@ msgstr "Jy is suksesvol afgemeld van %SP% af."
 msgid "{errors:errorreport_text}"
 msgstr "Die foutmeldings verslag is gestuur na die administrateurs."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Geboorte datum"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Daar was 'n probleem tydens die verwerking van die Afmelding  Versoek"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Aanhoudende anonieme ID"
-
 msgid "{logout:success}"
 msgstr "Jy het suksesvol afgemeld."
 
 msgid "{errors:descr_USERABORTED}"
 msgstr "Die verifikasie is gestop deur die gebruiker"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primêre affiliasie"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Poskode"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Fout tydens kommunikasie met die CAS bediener."
 
 msgid "{general:no}"
 msgstr "Nee"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Algemene naam"
-
 msgid "{logout:completed}"
 msgstr "Voltooid"
 
@@ -329,18 +266,9 @@ msgstr ""
 "Die wagwoord in die konfigurasie (auth.adminpassword) is nie aangepas "
 "nie. Redigeer asb die konfigurasie leër."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisasie eenheid"
-
 msgid "{general:service_provider}"
 msgstr "Diens Verskaffer"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Tuistelefoon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domein komponent (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Daar is 'n fout in die versoek na die bladsy. Die rede is: %REASON%"
 
@@ -359,23 +287,14 @@ msgstr "Voer jou gebruikersnaam en wagwoord in"
 msgid "{errors:report_explain}"
 msgstr "Verduidelik wat jy gedoen het toe jy die probleem ervaar..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Bestuurder"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Geen SAML versoek gevind nie"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Bynaam"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Jy het toegang verkry na die SingleLogoutService koppelvlak('interface'),"
 " maar het geen SAML LogoutRequest of LogoutResponse gestuur nie."
 
-msgid "{attributes:attribute_street}"
-msgstr "Straat"
-
 msgid "{login:organization}"
 msgstr "Organisasie"
 
@@ -401,9 +320,6 @@ msgstr "Fout in verifikasie bron %AUTHSOURCE%. Die rede was %REASON%"
 msgid "{login:change_home_org_button}"
 msgstr "Kies tuisorganisasie"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI"
-
 msgid "{errors:report_email}"
 msgstr "Epos adres:"
 
@@ -418,12 +334,6 @@ msgstr ""
 "Die inisieerder van hierdie versoek het nie 'n aflos staat('RelayState') "
 "parameter wat aandui waarheen om volgende te gaan nie."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Wettige naam"
-
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Tuis Organisasie domein naam"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Bladsy nie gevind nie"
 
@@ -433,33 +343,18 @@ msgstr "Foutmelding ontvang vanaf die Identiteits Verskaffer"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ongeldige sertifikaat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Kenmerkende naam (DN) van die persoon se organisatoriese afdeling"
-
 msgid "{general:remember}"
 msgstr "Onthou"
 
 msgid "{disco:selectidp}"
 msgstr "Kies jou identiteits verskaffer"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Posbus"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Persoonlike ID by tuis organisasie"
-
 msgid "{login:help_desk_email}"
 msgstr "Stuur e-pos aan hulplyn"
 
 msgid "{login:help_desk_link}"
 msgstr "Hulplyn-tuisblad"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Groeplidmaatskap"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Gebruikers ID"
-
 msgid "{login:remember_me}"
 msgstr "Onthou my"
 
@@ -480,12 +375,6 @@ msgstr "Ja, voortgaan"
 msgid "{disco:remember}"
 msgstr "Onthou my keuse"
 
-msgid "{attributes:attribute_l}"
-msgstr "Ligging"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identiteitsversekerings profiel"
-
 msgid "{disco:login_at}"
 msgstr "Meld aan by"
 
@@ -513,9 +402,6 @@ msgstr "Jy is afgemeld."
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Onbekende sertifikaat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faksnommer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP Fout"
 
@@ -534,27 +420,12 @@ msgstr ""
 "instellings in SimpleSAMLphp. Kontak die administrateur in beheer van die"
 " aanmeld diens en stuur die bostaande fout boodskap aan."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Selfoon"
-
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Taal voorkeur"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Jy het nie 'n geldige sertifikaat gestuur nie."
 
 msgid "{logout:logout_only}"
 msgstr "Nee, net %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organisasie naam"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Kenmerkende naam (DN) van die persoon se primêre organisatoriese afdeling"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Identiteitsnommer"
-
 msgid "{login:next}"
 msgstr "Volgende"
 
@@ -574,29 +445,17 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Geen sertifikaat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Gebruikerswagwoord"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Afmelding informasie verlore"
 
 msgid "{errors:descr_CONFIG}"
 msgstr "SimpleSAMLphp is nie korrek ingestel nie"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Private informasie elemente"
-
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
 "Verifikasie het misluk: Jou webblaaier het 'n ongeldige of korrupte "
 "sertifikaat gestuur"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Wettige naam"
-
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisasie nommer"
-
 msgid "Person's principal name at home organization"
 msgstr "Persoonlike ID by tuis organisasie"
 
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..e5a3246ee9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "أسماء اخري"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "أسماء اخري"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "أسماء اخري"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "مكونات النطاق"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "مكونات النطاق"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "مكونات النطاق"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "الاسم المستخدم "
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr " عنوان الصفحة الالكترونية للمنظمة"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr " عنوان الصفحة الالكترونية للمنظمة"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr " عنوان الصفحة الالكترونية للمنظمة"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "الاسم القانوني للمنظمة"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "الاسم القانوني للمنظمة"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "الاسم القانوني للمنظمة"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "جهة العمل"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "جهة العمل"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "جهة العمل"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "هوية الضمان"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "هوية الضمان"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "هوية الضمان"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "استحقاقات الخدمة"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "استحقاقات الخدمة"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "استحقاقات الخدمة"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "الكنية"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "الكنية"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "الكنية"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "الاسم المميز للمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "الاسم المميز للمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "الاسم المميز للمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "الاسم المميز للوحدة بالمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "الاسم المميز للوحدة بالمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "الاسم المميز للوحدة بالمنظمة رب العمل"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "الوظيفة الاساسية"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "الوظيفة الاساسية"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "الوظيفة الاساسية"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "الاسم المميز للوحدة الأساسية بالمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "الاسم المميز للوحدة الأساسية بالمنظمة رب العمل"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "الاسم المميز للوحدة الأساسية بالمنظمة رب العمل"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "الوضع أو الوظيفة بالمنظمةالام\\الموقع الام"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "الوضع أو الوظيفة بالمنظمةالام\\الموقع الام"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "الوضع أو الوظيفة بالمنظمةالام\\الموقع الام"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "الاسم المستعار "
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "الاسم المستعار "
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "الاسم المستعار "
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "رقم الفاكس"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "رقم الفاكس"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "رقم الفاكس"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "الاسم"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "الاسم"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "الاسم"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "رقم الهاتف المنزلي"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "رقم الهاتف المنزلي"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "رقم الهاتف المنزلي"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "العنوان البريدي"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "العنوان البريدي"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "العنوان البريدي"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "صورة (JPEG)"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "صورة (JPEG)"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "صورة (JPEG)"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "المحلية"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "المحلية"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "المحلية"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI أسم "
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI أسم "
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI أسم "
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "العنوان البريدي"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "العنوان البريدي"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "العنوان البريدي"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "المدير"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "المدير"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "المدير"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "رقم الهاتف السيار"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "رقم الهاتف السيار"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "رقم الهاتف السيار"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "الرقم بالمنظمة"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "الرقم بالمنظمة"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "الرقم بالمنظمة"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "تاريخ الميلاد"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "تاريخ الميلاد"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "تاريخ الميلاد"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "رقم الهوية المحلي"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "رقم الهوية المحلي"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "رقم الهوية المحلي"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "الرقم التعريفي المعين من قبل السلطات العامة "
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "الرقم التعريفي المعين من قبل السلطات العامة "
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "الرقم التعريفي المعين من قبل السلطات العامة "
+
+# English string: Organization name
+msgid "o"
+msgstr "اسم المنظمة"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "اسم المنظمة"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "اسم المنظمة"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "الوحدة"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "الوحدة"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "الوحدة"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "الصندوق البريدي"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "الصندوق البريدي"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "الصندوق البريدي"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "العنوان البريدي للمنظمة"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "العنوان البريدي للمنظمة"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "العنوان البريدي للمنظمة"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "الرمز البريدي"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "الرمز البريدي"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "الرمز البريدي"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "اللغة المفضلة"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "اللغة المفضلة"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "اللغة المفضلة"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "اسم النطاق المخصص للمنظمةالام\\الموقع الام "
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "اسم النطاق المخصص للمنظمةالام\\الموقع الام "
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "اسم النطاق المخصص للمنظمةالام\\الموقع الام "
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "اسم النطاق المخصص للمنظمةالام\\الموقع الام "
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "وحدات التعريف الخاصة"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "وحدات التعريف الخاصة"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "وحدات التعريف الخاصة"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "وحدات التعريف الخاصة"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "اسم العائله"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "اسم العائله"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "اسم العائله"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "الشارع"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "الشارع"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "الشارع"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "رقم الهاتف"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "رقم الهاتف"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "رقم الهاتف"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "اللقب"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "اللقب"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "اللقب"
+
+# English string: User ID
+msgid "uid"
+msgstr "الاسم التعريفي للمستخدم"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "الاسم التعريفي للمستخدم"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "الاسم التعريفي للمستخدم"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "كلمة السر"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "كلمة السر"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "كلمة السر"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "أسماء اخري"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "الاسم المستخدم "
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "الاسم المستخدم "
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "ألاسم بالمنظمة الام\\الموقع الام "
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "الاسم المستعار "
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "الاسم المستعار "
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "الاسم المستعار "
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "الاسم المستعار "
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "رقم الفاكس"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "الاسم"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "الاسم"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "الاسم"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "الاسم"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "الاسم"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "رقم الهاتف المنزلي"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "المحلية"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI أسم "
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI أسم "
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "العنوان البريدي"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "العنوان البريدي"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "العنوان البريدي"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "العنوان البريدي"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "العنوان البريدي"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "رقم الهاتف السيار"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "اسم المنظمة"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "الرمز البريدي"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "الرمز البريدي"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "اللغة المفضلة"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "اللغة المفضلة"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "اللغة المفضلة"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "اللغة المفضلة"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "اللغة المفضلة"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "اسم العائله"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "اسم العائله"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "اسم العائله"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "اسم العائله"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "اسم العائله"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "رقم الهاتف"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "رقم الهاتف"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "اللقب"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "اللقب"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "الاسم التعريفي للمستخدم"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "الاسم التعريفي للمستخدم"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "الاسم التعريفي للمستخدم"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "الاسم التعريفي للمستخدم"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "الاسم التعريفي للمستخدم"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/messages.po
index 657205af2a..45600f9e77 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ar/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "خطا بتحميل البيانات الوصفية/ الميتادات
 msgid "{admin:metaconv_title}"
 msgstr "محلل البيانات الوصفية/الميتاداتا"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "استحقاقات الخدمة"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "صورة (JPEG)"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "لا توجد أخطاء "
 
@@ -126,9 +120,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "عد لصفحة إنزال SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "مقدم خدمة WS-الفدرالية البعيد"
-
 msgid "{errors:error_header}"
 msgstr "خطا ب SimpleSAMLphp"
 
@@ -145,18 +136,12 @@ msgstr ""
 "هناك خطا بترتيب SimpleSAMLphp الخاص بك. ان كنت المشرف علي الموقع، تأكد "
 "رجاءاً من ان ترتيب الميتاداتا صحيح"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "الاسم المميز للمنظمة رب العمل"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "استقبال طلب سيء"
 
 msgid "{status:sessionsize}"
 msgstr "حجم الجلسة ٪حجم٪"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "العنوان البريدي للمنظمة"
-
 msgid "{logout:title}"
 msgstr "خروج"
 
@@ -178,30 +163,15 @@ msgstr "بالانتظار "
 msgid "{admin:cfg_check_header}"
 msgstr "مراجعة الترتيب"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "الوضع أو الوظيفة بالمنظمةالام\\الموقع الام"
-
-msgid "{attributes:attribute_sn}"
-msgstr "اسم العائله"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "سلم الرسالة"
 
 msgid "{status:logout}"
 msgstr "تسجيل الخروج"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "اسم المنظمةالام\\الموقع الام"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "رقم الهاتف"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "الخصائص المرفقة لا تطابق المواصفات"
 
-msgid "{attributes:attribute_mail}"
-msgstr "العنوان البريدي"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "حدث خطا عند محاولة تكوين طلب SAML"
 
@@ -211,9 +181,6 @@ msgstr "حقل اختياري"
 msgid "{logout:return}"
 msgstr "عد للخدمة"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "الاسم المستخدم "
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "يمكنك الحصول علي بياناتك الوصفية بملف xml ب URL متخصص بإدخال<a "
@@ -227,9 +194,6 @@ msgstr ""
 "يمكنك إغلاق حالة التصحيح بملف ترتيب "
 "SimpleSAMLphp<tt>config/config.php</tt>"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "العنوان البريدي"
-
 msgid "{disco:select}"
 msgstr "اختار"
 
@@ -254,9 +218,6 @@ msgstr "حصل مقدم الهوية هذا علي طلب توثيق من مقد
 msgid "{logout:logout_all_question}"
 msgstr "هل ترغب بتسجيل الخروج من جميع الخدمات أعلا؟"
 
-msgid "{attributes:attribute_title}"
-msgstr "اللقب"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "ممنوع الدخول"
 
@@ -271,9 +232,6 @@ msgstr "انعدام التقوية"
 msgid "{errors:descr_NOSTATE}"
 msgstr "فقدان معلومات الحالة و لا يمكن اعادة البدء للطلب"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "الرقم التعريفي المعين من قبل السلطات العامة "
-
 msgid "{login:password}"
 msgstr "كلمة السر"
 
@@ -298,15 +256,9 @@ msgstr "خطا عند تسجيل الخروج"
 msgid "{admin:metaover_errorentry}"
 msgstr "خطا بهذا البيان الوصفي/ الميتاداتا"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "جهة العمل"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "الميتاداتا مفقودة"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "الاسم"
-
 msgid "{login:contact_info}"
 msgstr "بيانات الاتصال"
 
@@ -348,30 +300,18 @@ msgstr "اختارملف الترتيب الذي ترغب  بمراجعته"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "فشل التوثيق لان متصفحك ارسل شهاده غير معلومة"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr " عنوان الصفحة الالكترونية للمنظمة"
-
 msgid "{logout:logging_out_from}"
 msgstr "تسجيل خروج من الخدمات أدناه "
 
 msgid "{logout:loggedoutfrom}"
 msgstr "لقد خرجت بنجاح من %SP%"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "مقدم خدمة WS-الفدرالية المستضاف "
-
 msgid "{errors:errorreport_text}"
 msgstr "تم إرسال التقرير عن الخطأ  للمشرف"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "تاريخ الميلاد"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "خطا عند محاولة تسجيل الخروج"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "الاسم المستعار "
-
 msgid "{logout:success}"
 msgstr "تسجيل خروج ناجح من جميع الخدمات أعلاه "
 
@@ -381,12 +321,6 @@ msgstr "ملحوظات"
 msgid "{errors:descr_USERABORTED}"
 msgstr "تم إيقاف التوثيق بواسطة المستخدم"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "الوظيفة الاساسية"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "الرمز البريدي"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "خطا عند محاولة الاتصال بمقدم خدمة CAS"
 
@@ -399,9 +333,6 @@ msgstr "البيانات الوصفية ل SAML 2.0 SP"
 msgid "{admin:metaconv_converted}"
 msgstr "بيانات وصفية محولة"
 
-msgid "{attributes:attribute_cn}"
-msgstr "أسماء اخري"
-
 msgid "{logout:completed}"
 msgstr "اكتمل"
 
@@ -410,18 +341,9 @@ msgstr ""
 "لم تقم بتغيير كلمة السر الافتراضية بالترتيب (auth.adminpassword). رجاءاً "
 "قم بتحرير ملف الترتيب"
 
-msgid "{attributes:attribute_ou}"
-msgstr "الوحدة"
-
 msgid "{general:service_provider}"
 msgstr "مقدم خدمات"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "رقم الهاتف المنزلي"
-
-msgid "{attributes:attribute_dc}"
-msgstr "مكونات النطاق"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "خطا بطلب هذه الصفحة. السبب %REASON%"
 
@@ -440,23 +362,14 @@ msgstr "ادخل اسم المستخدم و كلمة السر"
 msgid "{errors:report_explain}"
 msgstr "اشرح ما فعلته عند حدوث الخطأ "
 
-msgid "{attributes:attribute_manager}"
-msgstr "المدير"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "لا توجد استجابة SAML"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "الكنية"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "لقد وصلت لنقطة تسجيل الخروج الموحد لكنك لم توفر طلب تسجيل خروج SAML او "
 "استجابة لطلب الخروج"
 
-msgid "{attributes:attribute_street}"
-msgstr "الشارع"
-
 msgid "{login:organization}"
 msgstr "الجهة "
 
@@ -490,9 +403,6 @@ msgstr "اختار جهتك الام"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "خيارات فائضة بملف الترتيب"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI أسم "
-
 msgid "{errors:report_email}"
 msgstr "عنوان الأميل"
 
@@ -505,9 +415,6 @@ msgstr "لم تقم بتحديد كلمة السر"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "لم يوفر طالب الخدمة خصائص تقوية تقود للخطوة التالية"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "الاسم الشرعي"
-
 msgid "{status:header_diagnostics}"
 msgstr "تشخيص SimpleSAMLphp"
 
@@ -516,9 +423,6 @@ msgstr ""
 "مرحباً بكم في صفحة حالة SimpleSAMLphp. يمكنك هنا مراقبة وقت انتهاء جلستك،"
 " فترة استمرارها، متي ستنتهي و جميع السمات المرتبطة بالجلسة"
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "اسم النطاق المخصص للمنظمةالام\\الموقع الام "
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "الصفحة غير موجودة"
 
@@ -537,30 +441,18 @@ msgstr "لإلغاء نظرة علي تفاصيل احدي وحدات SAML, اض
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "شهادة غير صحيحة"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "الاسم المميز للوحدة بالمنظمة رب العمل"
-
 msgid "{general:remember}"
 msgstr "تذكرألغت ذكر"
 
 msgid "{disco:selectidp}"
 msgstr "اختار موقع هويتك"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "الصندوق البريدي"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "ألاسم بالمنظمة الام\\الموقع الام "
-
 msgid "{login:help_desk_email}"
 msgstr "ارسل إيميل لصفحة المساعدة"
 
 msgid "{login:help_desk_link}"
 msgstr "صفحة المساعدة"
 
-msgid "{attributes:attribute_uid}"
-msgstr "الاسم التعريفي للمستخدم"
-
 msgid "{errors:title_CASERROR}"
 msgstr "خطا CAS"
 
@@ -581,12 +473,6 @@ msgstr "تذكر خياراتي"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "مقدم خدمة SAML 2.0 (المستضاف)"
 
-msgid "{attributes:attribute_l}"
-msgstr "المحلية"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "هوية الضمان"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "بصيغة SimpleSAMLphp- استخدم هذه الصيغة ان كنت تستخدم وحدة SimpleSAMLphp "
@@ -631,9 +517,6 @@ msgstr "رسالة"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "شهادة غير معلومة"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "رقم الفاكس"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "خطا LDAP"
 
@@ -651,15 +534,9 @@ msgstr ""
 " بالمشرف علي تسجيل الدخول لهذه الخدمة و قم بإرسال تقرير الخطأ أعلاه لهم "
 "أيضاً "
 
-msgid "{attributes:attribute_mobile}"
-msgstr "رقم الهاتف السيار"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "مقدم هوية Shib 1.3 المستضاف"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "اللغة المفضلة"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "لم تقدم شهادة صحيحة"
 
@@ -672,15 +549,6 @@ msgstr "الحقول الاختيارية أدناه مفقودة"
 msgid "{logout:logout_only}"
 msgstr "لا من %SP% فقط"
 
-msgid "{attributes:attribute_o}"
-msgstr "اسم المنظمة"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "الاسم المميز للوحدة الأساسية بالمنظمة رب العمل"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "رقم الهوية المحلي"
-
 msgid "{login:next}"
 msgstr "التالي"
 
@@ -696,9 +564,6 @@ msgstr "الصفحة غير موجودة. السبب %REASON% و العنوان
 msgid "{errors:title_NOCERT}"
 msgstr "الشهادات مفقودة"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "كلمة السر"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "معلومات تسجيل الخروج مفقودة"
 
@@ -713,30 +578,18 @@ msgstr ""
 "هذه هي بياناتك الوصفية المجهزة بواسطة SAMLphp. للتجهيز لفدرالية موثوق بها"
 " قم بإرسال هذه الوثيقة  لشركاء موثوق بهم"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "وحدات التعريف الخاصة"
-
-msgid "{status:header_wsfed}"
-msgstr "استعراض مثال ل WS-Fed"
-
 msgid "{admin:metadata_cert}"
 msgstr "الشهادات"
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr "فشل التوثيق لان متصفحك ارسل شهادات غير صحيحة او لا يمكن قراءتها "
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "الاسم القانوني للمنظمة"
-
 msgid "{status:header_shib}"
 msgstr "استعراض Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "حلل"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "الرقم بالمنظمة"
-
 msgid "Person's principal name at home organization"
 msgstr "ألاسم بالمنظمة الام\\الموقع الام "
 
@@ -1058,7 +911,7 @@ msgstr ""
 "أيضاً "
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
+msgid "Your session is valid for %remaining% seconds from now."
 msgstr "ستستمر جلستك ل٪عدد ثواني٪ ثانية تبدأ الان"
 
 msgid "Domain component (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..1bb59063a9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nom comú"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nom comú"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nom comú"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Component de domini (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Component de domini (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Component de domini (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nom a mostrar"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Pàgina inicial d'organització"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Pàgina inicial d'organització"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Pàgina inicial d'organització"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nom legal de l'organització"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nom legal de l'organització"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nom legal de l'organització"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Afiliació"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Afiliació"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Afiliació"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Perfil d'assegurament de la identitat"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Perfil d'assegurament de la identitat"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Perfil d'assegurament de la identitat"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Dret referent al servei"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Dret referent al servei"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Dret referent al servei"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Sobrenom"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Sobrenom"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Sobrenom"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Nom distingit (DN) de l'organització principal de la persona"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Nom distingit (DN) de l'organització principal de la persona"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Nom distingit (DN) de l'organització principal de la persona"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Nom distingit (DN) de la unitat organitzativa de la persona"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Nom distingit (DN) de la unitat organitzativa de la persona"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Nom distingit (DN) de la unitat organitzativa de la persona"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Afiliació primària"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Afiliació primària"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Afiliació primària"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Nom distingit (DN) de la unitat organitzativa principal de la persona"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Nom distingit (DN) de la unitat organitzativa principal de la persona"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Nom distingit (DN) de la unitat organitzativa principal de la persona"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "El nom principal de la persona a l'organització principal"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "El nom principal de la persona a l'organització principal"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "El nom principal de la persona a l'organització principal"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Afiliació a l’organització principal"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Afiliació a l’organització principal"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Afiliació a l’organització principal"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Identificació anònima persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Identificació anònima persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Identificació anònima persistent"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "Identificació anònima persistent i no reasignable de la persona a l'organització principal"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "Identificació anònima persistent i no reasignable de la persona a l'organització principal"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "Identificació anònima persistent i no reasignable de la persona a l'organització principal"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Número de fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Número de fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Número de fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Nom"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Nom"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Nom"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telèfon de casa"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telèfon de casa"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telèfon de casa"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Adreça postal de casa"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Adreça postal de casa"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Adreça postal de casa"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Localitat"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Localitat"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Localitat"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI etiquetat"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI etiquetat"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI etiquetat"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Correu electrònic"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Correu electrònic"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Correu electrònic"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Gestor"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Gestor"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Gestor"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mòbil"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mòbil"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mòbil"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Número d’organització"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Número d’organització"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Número d’organització"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Data de naixement"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Data de naixement"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Data de naixement"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Número d'identitat local"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Número d'identitat local"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Número d'identitat local"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Número d’identitat assignat per autoritats públiques"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Número d’identitat assignat per autoritats públiques"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Número d’identitat assignat per autoritats públiques"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nom de l'organització"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nom de l'organització"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nom de l'organització"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Unitat organitzativa"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Unitat organitzativa"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Unitat organitzativa"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "Identificació aònima específica del servei a l'organització principal"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "Identificació aònima específica del servei a l'organització principal"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Apartat de correus"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Apartat de correus"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Apartat de correus"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adreça postal"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adreça postal"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adreça postal"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Codi Postal"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Codi Postal"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Codi Postal"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Idioma preferit"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Idioma preferit"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Idioma preferit"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Nom de domini de l’organització principal"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Nom de domini de l’organització principal"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Nom de domini de l’organització principal"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Nom de domini de l’organització principal"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Elements d'informació privats"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Elements d'informació privats"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Elements d'informació privats"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Elements d'informació privats"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Cognom"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Cognom"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Cognom"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Carrer"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Carrer"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Carrer"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "Identificació pseudònima en l'organització principal"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "Identificació pseudònima en l'organització principal"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Número de telèfon"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Número de telèfon"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Número de telèfon"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Títol"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Títol"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Títol"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identificador d'usuari"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identificador d'usuari"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identificador d'usuari"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Hash de la contrasenya de l'usuari"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Hash de la contrasenya de l'usuari"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Hash de la contrasenya de l'usuari"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nom comú"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nom a mostrar"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nom a mostrar"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Identificador únic de la persona a la seva organització d'origen"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Identificador únic de la persona a la seva organització d'origen"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Identificador únic de la persona a la seva organització d'origen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Identificador únic de la persona a la seva organització d'origen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Identificador únic de la persona a la seva organització d'origen"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Identificació anònima persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Identificació anònima persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Identificació anònima persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Identificació anònima persistent"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Número de fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Nom"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Nom"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Nom"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Nom"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Nom"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telèfon de domicili"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Localitat"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI etiquetat"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI etiquetat"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Correu electrònic"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Correu electrònic"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Correu electrònic"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Correu electrònic"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Correu electrònic"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mòbil"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nom de l'organització"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Codi Postal"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Codi Postal"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Idioma preferit"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Idioma preferit"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Idioma preferit"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Idioma preferit"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Idioma preferit"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Cognom"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Cognom"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Cognom"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Cognom"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Cognom"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Número de telèfon"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Número de telèfon"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Títol"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Títol"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identificador d'usuari"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identificador d'usuari"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identificador d'usuari"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identificador d'usuari"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identificador d'usuari"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/messages.po
index 94292d704a..ee71ca7193 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ca/LC_MESSAGES/messages.po
@@ -15,148 +15,6 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Babel 2.3.4\n"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Dret relatiu al servei"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Fotografia en JPEG"
-
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Nom distingit (DN) de l'organització d'origen"
-
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adreça postal"
-
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Afiliació a l'organització d'origen"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Cognoms"
-
-msgid "{attributes:attribute_organisationname}"
-msgstr "Nom de l'organització"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Número de telèfon"
-
-msgid "{attributes:attribute_mail}"
-msgstr "Correu electrònic"
-
-msgid "{attributes:attribute_displayname}"
-msgstr "Nom de visualització"
-
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Adreça del domicili"
-
-msgid "{attributes:attribute_title}"
-msgstr "Tractament"
-
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Número de la Seguretat Social"
-
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Afiliació"
-
-msgid "{attributes:attribute_givenname}"
-msgstr "Nom"
-
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Pàgina inicial de l'organització"
-
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Data de naixement"
-
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Identificador pseudònim persistent"
-
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Afiliació primària"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Codi postal"
-
-msgid "{attributes:attribute_cn}"
-msgstr "Nom comú (CN)"
-
-msgid "{attributes:attribute_ou}"
-msgstr "Unitat organitzativa"
-
-msgid "{attributes:attribute_homephone}"
-msgstr "Telèfon del domicili"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Component de domini (DC)"
-
-msgid "{attributes:attribute_manager}"
-msgstr "Gestor"
-
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Àlies"
-
-msgid "{attributes:attribute_street}"
-msgstr "Carrer"
-
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI etiquetat"
-
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Nom legal"
-
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Identificador únic de l'organització d'origen"
-
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr ""
-"Nom distingit (DN) de la Unitat Organitzativa (OU) de l'organització "
-"d'origen"
-
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Apartat de correus"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Identificador únic de la persona a la seva organització d'origen"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Identificador d'usuari"
-
-msgid "{attributes:attribute_l}"
-msgstr "Localitat"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identificador del perfil de garantia"
-
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Número de fax"
-
-msgid "{attributes:attribute_mobile}"
-msgstr "Telèfon mòbil"
-
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Idioma preferit"
-
-msgid "{attributes:attribute_o}"
-msgstr "Nom de l'organització"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr ""
-"Nom distingit (DN) de l'entrada del directori que representa "
-"l'identificador"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Número d'identificació local"
-
-msgid "{attributes:attribute_userpassword}"
-msgstr "Clau o contrasenya i mètode d'encriptació usat"
-
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Elements d'informació privada"
-
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nom legal de l'organització"
-
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Número de l'organització"
-
 msgid "Person's principal name at home organization"
 msgstr "Identificador únic de la persona a la seva organització d'origen"
 
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..4145772329
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Celé jméno (CN)"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Celé jméno (CN)"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Celé jméno (CN)"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Doména (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Doména (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Doména (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Jméno k zobrazení"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "URL organizace"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "URL organizace"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "URL organizace"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Plné jméno organizace"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Plné jméno organizace"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Plné jméno organizace"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Vztah k organizaci"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Vztah k organizaci"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Vztah k organizaci"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Poskytovatel identifikačního profilu"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Poskytovatel identifikačního profilu"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Poskytovatel identifikačního profilu"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Právo ke službě"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Právo ke službě"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Právo ke službě"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Přezdívka"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Přezdívka"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Přezdívka"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Uživatelské jméno přidělené organizací"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Uživatelské jméno přidělené organizací"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Uživatelské jméno přidělené organizací"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Uživatelské jméno přidělené organizační jednotkou"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Uživatelské jméno přidělené organizační jednotkou"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Uživatelské jméno přidělené organizační jednotkou"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Hlavní příslušnost"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Hlavní příslušnost"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Hlavní příslušnost"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Jméno hlavní organizační jednotky"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Jméno hlavní organizační jednotky"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Jméno hlavní organizační jednotky"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Jméno nadřízeného"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Jméno nadřízeného"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Jméno nadřízeného"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Vztah k domovksé organizaci"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Vztah k domovksé organizaci"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Vztah k domovksé organizaci"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Křestní jméno"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Křestní jméno"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Křestní jméno"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefon domů"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefon domů"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefon domů"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Adresa domů"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Adresa domů"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Adresa domů"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Lokalita"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Lokalita"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Lokalita"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Email"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manažer"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manažer"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manažer"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobil"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobil"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobil"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Čislo organizace"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Čislo organizace"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Čislo organizace"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Datum narozeni"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Datum narozeni"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Datum narozeni"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokální identifikační kód"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokální identifikační kód"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokální identifikační kód"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Identifikační kód přidělený veřejnou autoritou"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Identifikační kód přidělený veřejnou autoritou"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Identifikační kód přidělený veřejnou autoritou"
+
+# English string: Organization name
+msgid "o"
+msgstr "Jméno organizace"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Jméno organizace"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Jméno organizace"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizační jednotka"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizační jednotka"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizační jednotka"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postbox"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postbox"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postbox"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Poštovní adresa"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Poštovní adresa"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Poštovní adresa"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Poštovní kód PSČ"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Poštovní kód PSČ"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Poštovní kód PSČ"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Preferovaný jazyk"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Preferovaný jazyk"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Preferovaný jazyk"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Jméno organizace"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Jméno organizace"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Jméno organizace"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Jméno organizace"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Privátní informační elementy"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Privátní informační elementy"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Privátní informační elementy"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Privátní informační elementy"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Příjmení"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Příjmení"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Příjmení"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Ulice"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Ulice"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Ulice"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefon"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Nadpis"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Nadpis"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Nadpis"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identifikátor (UID)"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identifikátor (UID)"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identifikátor (UID)"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Uživatelské heslo (hash)"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Uživatelské heslo (hash)"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Uživatelské heslo (hash)"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Celé jméno (CN)"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Jméno k zobrazení"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Jméno k zobrazení"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Jméno nadřízeného"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Jméno nadřízeného"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Jméno nadřízeného"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Jméno nadřízeného"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Jméno nadřízeného"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Perzistentí pseudoanonymní ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Křestní jméno"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Křestní jméno"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Křestní jméno"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Křestní jméno"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Křestní jméno"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefon domů"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Lokalita"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Email"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Email"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Email"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Email"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobil"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Jméno organizace"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Poštovní kód PSČ"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Poštovní kód PSČ"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Preferovaný jazyk"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Preferovaný jazyk"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Preferovaný jazyk"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Preferovaný jazyk"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Preferovaný jazyk"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Příjmení"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Příjmení"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Příjmení"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Příjmení"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Příjmení"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefon"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Nadpis"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Nadpis"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identifikátor (UID)"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identifikátor (UID)"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identifikátor (UID)"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identifikátor (UID)"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identifikátor (UID)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/messages.po
index 1f58c27e84..ca82ad8b34 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/cs/LC_MESSAGES/messages.po
@@ -25,7 +25,7 @@ msgstr ""
 "zkontrolujte login a zkuste se přihlásit znovu."
 
 msgid "{logout:failed}"
-msgstr "Odhlašení selhalo"
+msgstr "Odhlášení selhalo"
 
 msgid "{status:attributes_header}"
 msgstr "Vaše atributy"
@@ -46,17 +46,11 @@ msgid "{login:username}"
 msgstr "Uživatel"
 
 msgid "{errors:title_METADATA}"
-msgstr "Chyba nahravání metadat"
+msgstr "Chyba nahrávání metadat"
 
 msgid "{admin:metaconv_title}"
 msgstr "Metadata parser"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Právo ke službě"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Foto JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nenalezeny žádné chyby"
 
@@ -64,8 +58,8 @@ msgid "{errors:descr_LOGOUTINFOLOST}"
 msgstr ""
 "Informace o odhlašovací operaci byla ztracena. Můžete se vrátit do "
 "aplikace, ze které jste se odhlašovali a zkusit to znova. Tato chyba byla"
-" způsobena vypršením odhlašovacíh informací. Ty jsou uloženy omezený čas "
-"(jednotky hodin). To by mělo stači na normální odhlašení a tato chyba "
+" způsobena vypršením odhlašovacích informací. Ty jsou uloženy po omezený čas "
+"(jednotky hodin). To by mělo stačit na normální odhlášení a tato chyba "
 "může ukazovat na chyby v konfiguraci. Pokud problém přetrvává, "
 "kontaktujte administrátora."
 
@@ -77,15 +71,15 @@ msgstr "Zpátky na seznam souborů"
 
 msgid "{errors:report_trackid}"
 msgstr ""
-"Pokud budete reportovat tuto chybu, prosím zašlete také toto ID, toto "
-"umožní najít vaší session v logu, který je dostupný systmovým "
+"Pokud budete reportovat tuto chybu, prosím zašlete také toto ID, které "
+"umožní najít vaši session v logu, který je dostupný systémovým "
 "administrátorem:  "
 
 msgid "{login:change_home_org_title}"
-msgstr "Změnte svou organizaci"
+msgstr "Změňte svou organizaci"
 
 msgid "{errors:descr_METADATANOTFOUND}"
-msgstr "Nebyly nalezeny metadata pro %ENTITYID%"
+msgstr "Nebyla nalezena metadata pro %ENTITYID%"
 
 msgid "{admin:metadata_metadata}"
 msgstr "Metadata"
@@ -101,7 +95,7 @@ msgstr "Oznámit chyby"
 msgid "{login:change_home_org_text}"
 msgstr ""
 "Máte nastavenu <b>%HOMEORG%</b> jako domovskou organizaci. Pokud je to "
-"špatně zvolte jinou."
+"špatně, zvolte jinou."
 
 msgid "{errors:title_PROCESSAUTHNREQUEST}"
 msgstr "Chyba provádění žádosti poskytovatele služby"
@@ -113,7 +107,7 @@ msgid "{errors:debuginfo_header}"
 msgstr "Ladicí informace"
 
 msgid "{admin:debug_sending_message_msg_text}"
-msgstr "Pokud jste v debug módu, můžete videt obsah zprávy, kterou posíláte:"
+msgstr "Pokud jste v debug módu, můžete vidět obsah zprávy, kterou posíláte:"
 
 msgid "{errors:descr_RESPONSESTATUSNOSUCCESS}"
 msgstr "Poskytovatel identity odpověděl chybou. (Stavový kód v SAML nebyl úspěšný)"
@@ -123,20 +117,17 @@ msgstr "Shib 1.3 IdP Metadata"
 
 msgid "{login:help_text}"
 msgstr ""
-"Problém! Bez jména a hesla se nemůžete identifikovat. Existuje někdo kdo "
-"vám pomůže. Konzultujte helpdesk vaší organizace."
+"Bez jména a hesla se nemůžete identifikovat. Zkuste "
+"kontaktovat helpdesk své organizace."
 
 msgid "{logout:default_link_text}"
 msgstr "Zpátky na SimpleSAMLphp instalační stránku"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (Remote - vzdálený)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp chyba"
 
 msgid "{login:help_header}"
-msgstr "Chci pomoci. Zapomněl jsem heslo."
+msgstr "Zapomněl jsem heslo."
 
 msgid "{errors:descr_LDAPERROR}"
 msgstr ""
@@ -145,11 +136,8 @@ msgstr ""
 
 msgid "{errors:descr_METADATA}"
 msgstr ""
-"Je zde chyba v konfiguraci SimpleSAMLphp. Pokud jsi administrátorem "
-"služby zkontroluj metadata."
-
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Uživatelské jméno přidělené organizací"
+"Je zde chyba v konfiguraci SimpleSAMLphp. Pokud jste administrátorem "
+"služby, zkontrolujte metadata."
 
 msgid "{errors:title_BADREQUEST}"
 msgstr "Zaslán špatný požadavek"
@@ -157,9 +145,6 @@ msgstr "Zaslán špatný požadavek"
 msgid "{status:sessionsize}"
 msgstr "Velikost sezeni: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Poštovní adresa"
-
 msgid "{logout:title}"
 msgstr "Odhlášen"
 
@@ -181,30 +166,15 @@ msgstr "Čekám"
 msgid "{admin:cfg_check_header}"
 msgstr "Verifikace konfigurace"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Vztah k domovksé organizaci"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Příjmení"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Poslat zprávu"
 
 msgid "{status:logout}"
 msgstr "Odhlášení"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Jméno organizace"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefon"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Parametr zaslaný vyhledávací službě neodpovídá specifikaci."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Email"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Chyba vznikla při vytváření SAML požadavku."
 
@@ -214,9 +184,6 @@ msgstr "Volitelná pole"
 msgid "{logout:return}"
 msgstr "Zpátky na službu"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Jméno k zobrazení"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "<a href=\"%METAURL%\">Získejte metadata v XML formátu na dedikované "
@@ -227,17 +194,14 @@ msgstr "Ano, všechny služby"
 
 msgid "{admin:debug_disable_debug_mode}"
 msgstr ""
-"Můžete vypnout debug mód v globalní konfiguraci SimpleSAMLphp "
+"Můžete vypnout debug mód v globální konfiguraci SimpleSAMLphp "
 "<tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Adresa domů"
-
 msgid "{disco:select}"
-msgstr "Zvol"
+msgstr "Zvolte"
 
 msgid "{logout:also_from}"
-msgstr "Jste ješte přihlášen na tyto služby:"
+msgstr "Jste ještě přihlášen(a) na tyto služby:"
 
 msgid "{login:login_button}"
 msgstr "Přihlásit"
@@ -246,7 +210,7 @@ msgid "{logout:progress}"
 msgstr "Odhlašuji..."
 
 msgid "{login:error_wrongpassword}"
-msgstr "Nekorektní jmeno nebo heslo."
+msgstr "Nesprávné jméno nebo heslo."
 
 msgid "{admin:metaover_group_metadata.shib13-sp-remote}"
 msgstr "Shib 1.3 Service Provider (Remote - vzdálený)"
@@ -254,20 +218,17 @@ msgstr "Shib 1.3 Service Provider (Remote - vzdálený)"
 msgid "{errors:descr_PROCESSAUTHNREQUEST}"
 msgstr ""
 "Tento poskytovatel identity přijal požadavek od poskytovatele služby, ale"
-" při jeho provádení vznikla chyba."
+" při jeho provádění vznikla chyba."
 
 msgid "{logout:logout_all_question}"
 msgstr "Chcete se odhlásit ze všech těchto služeb?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Nadpis"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Nemáte přístup"
 
 msgid "{login:error_nopassword}"
 msgstr ""
-"Odeslal jste data do přihlašovací stranky, ale z nějakého důvodu nebylo "
+"Odeslal jste data do přihlašovací stránky, ale z nějakého důvodu nebylo "
 "odesláno heslo. Prosím zkuste to znovu."
 
 msgid "{errors:title_NORELAYSTATE}"
@@ -276,9 +237,6 @@ msgstr "Nenalezen RelayState."
 msgid "{errors:descr_NOSTATE}"
 msgstr "Stavová informace "
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Identifikační kód přidělený veřejnou autoritou"
-
 msgid "{login:password}"
 msgstr "Heslo"
 
@@ -286,10 +244,10 @@ msgid "{errors:debuginfo_text}"
 msgstr "Následující ladicí informace může zajímat administrátora (helpdesk)"
 
 msgid "{admin:cfg_check_missing}"
-msgstr "Chybejici polozky v konfiguracnim souboru"
+msgstr "Chybějící položky v konfiguračním souboru"
 
 msgid "{errors:descr_UNHANDLEDEXCEPTION}"
-msgstr "Neočekávaná vyjímka vznikla."
+msgstr "Vznikla neočekávaná výjimka."
 
 msgid "{general:yes}"
 msgstr "Ano"
@@ -303,23 +261,14 @@ msgstr "Chyba zpracování odhlašovacího požadavku"
 msgid "{admin:metaover_errorentry}"
 msgstr "Chyba v této položce metadat"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Vztah k organizaci"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata nenalezena"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Křestní jméno"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktní informace"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
-msgstr "Neočekávaná vyjímka"
-
-msgid "{status:validfor}"
-msgstr "Vaše sezení je platné %SECONDS% sekund od teď."
+msgstr "Neočekávaná výjimka"
 
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo"
@@ -332,11 +281,11 @@ msgstr "Přihlášení odmítnuto"
 
 msgid "{logout:incapablesps}"
 msgstr ""
-"Jedna, nebo více služeb, do kterých jste přihlašen, nepodporuje "
+"Jedna nebo více služeb, do kterých jste přihlášen(a), nepodporuje "
 "odhlašení. Pokud se chcete odhlásit, musíte ukončit váš webový prohlížeč."
 
 msgid "{admin:metadata_xmlformat}"
-msgstr "Ve SAML 2.0 metadata xml formátu:"
+msgstr "V SAML 2.0 metadata XML formátu:"
 
 msgid "{admin:metaover_group_metadata.saml20-idp-remote}"
 msgstr "SAML 2.0 Identity Provider (Remote - vzdálený)"
@@ -353,48 +302,30 @@ msgstr "Vyber konfiguračního souboru k verifikaci:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Přihlášení neproběhlo: certifikát který odeslal Váš prohlížeč je neznámý"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "URL organizace"
-
 msgid "{logout:logging_out_from}"
 msgstr "Odhlášení z následujících služeb:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr ""
-"Zahájil jste <strong>globální odhlášení</strong> z služby "
+"Zahájil jste <strong>globální odhlášení</strong> ze služby "
 "<strong>%REQUESTERNAME%</strong>. Globální odhlášení znamená, že budete "
-"odhlášen z všech následující služeb."
-
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Hosted - lokální)"
+"odhlášen ze všech následující služeb."
 
 msgid "{errors:errorreport_text}"
-msgstr "Chybový report byl zaslán administrátorům."
-
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Datum narozeni"
+msgstr "Zpráva o chybě byla zaslána administrátorům."
 
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Při procesu odhlášení vznikla chyba."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Perzistentí pseudoanonymní ID"
-
 msgid "{logout:success}"
 msgstr "Úspěšně jste se odhlásili z následujících služeb."
 
 msgid "{admin:cfg_check_notices}"
-msgstr "Poznamky"
+msgstr "Poznámky"
 
 msgid "{errors:descr_USERABORTED}"
 msgstr "Přihlášení bylo přerušeno uživatelem"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Hlavní příslušnost"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Poštovní kód PSČ"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Chyba při komunikaci s CAS serverem."
 
@@ -407,9 +338,6 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Konvertovaná metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Celé jméno (CN)"
-
 msgid "{logout:completed}"
 msgstr "Dokončeno"
 
@@ -418,20 +346,11 @@ msgstr ""
 "Heslo v konfiguraci (auth.adminpassword) není nastaveno. Prosím nastavte "
 "ho."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizační jednotka"
-
 msgid "{general:service_provider}"
 msgstr "Poskytovatel služby"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefon domů"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Doména (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
-msgstr "Toho je chyba požadavku pro tuto stránku. Důvod je: %REASON%"
+msgstr "Chyba požadavku pro tuto stránku. Důvod je: %REASON%"
 
 msgid "{logout:no}"
 msgstr "Ne"
@@ -446,24 +365,15 @@ msgid "{login:user_pass_header}"
 msgstr "Vložte své jméno a heslo"
 
 msgid "{errors:report_explain}"
-msgstr "Vysvětlete jak došlo k této chybě ..."
-
-msgid "{attributes:attribute_manager}"
-msgstr "Manažer"
+msgstr "Vysvětlete, jak došlo k této chybě ..."
 
 msgid "{errors:title_ACSPARAMS}"
-msgstr "Žádná SAML odpověď nebyla zaslána"
-
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Přezdívka"
+msgstr "Nebyla zaslána SAML odpověď"
 
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Přistupujete k SingleLogoutService rozhraní, ale nezadáváte SAML "
-"LogoutRequest, nebo LogoutResponse."
-
-msgid "{attributes:attribute_street}"
-msgstr "Ulice"
+"LogoutRequest ani LogoutResponse."
 
 msgid "{login:organization}"
 msgstr "Organizace"
@@ -478,11 +388,11 @@ msgid "{errors:descr_NOACCESS}"
 msgstr "Tento koncový bod není povolen. Zkontrolujte konfiguraci (zapněte volby)."
 
 msgid "{errors:title_SLOSERVICEPARAMS}"
-msgstr "Žádná SAML zpráva nebyla zaslána"
+msgstr "Nebyla zaslána SAML zpráva"
 
 msgid "{errors:descr_ACSPARAMS}"
 msgstr ""
-"Přistupujete k Assertion Consumer Service rozhraní, ale neposílálate SAML"
+"Přistupujete k Assertion Consumer Service rozhraní, ale neposíláte SAML"
 " Authentication Response."
 
 msgid "{admin:debug_sending_message_text_link}"
@@ -492,7 +402,7 @@ msgid "{errors:descr_AUTHSOURCEERROR}"
 msgstr "Autentizační chyba ve zdroji %AUTHSOURCE%. Důvodem bylo: %REASON%"
 
 msgid "{status:some_error_occurred}"
-msgstr "Nalezena chyba"
+msgstr "Chyba"
 
 msgid "{login:change_home_org_button}"
 msgstr "Zvolte domovskou organizaci"
@@ -500,9 +410,6 @@ msgstr "Zvolte domovskou organizaci"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Nadbytečné položky v konfiguračním souboru"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI"
-
 msgid "{errors:report_email}"
 msgstr "Email"
 
@@ -513,10 +420,7 @@ msgid "{errors:title_NOTSET}"
 msgstr "Heslo nebylo zadáno."
 
 msgid "{errors:descr_NORELAYSTATE}"
-msgstr "Původce této žádosti nezadal parametr RelayState, který určuje kam dál."
-
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Právní jméno"
+msgstr "Původce této žádosti nezadal parametr RelayState, který určuje kam pokračovat."
 
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostika"
@@ -526,9 +430,6 @@ msgstr ""
 "Vítejte na informační stránce. Zde uvidíte, pokud vypršelo vaše sezení, "
 "jak dlouho jste pryč a všechny atributy připojené k vašemu sezení."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Jméno organizace"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Stránka nenalezena"
 
@@ -547,30 +448,18 @@ msgstr "Pro zobrazení detailu SAML entity, klikni na hlavičku entity"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Špatný certifikát"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Uživatelské jméno přidělené organizační jednotkou"
-
 msgid "{general:remember}"
 msgstr "Zapamatuj"
 
 msgid "{disco:selectidp}"
 msgstr "Zvol svého poskytovatele identity (IdP)"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postbox"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Jméno nadřízeného"
-
 msgid "{login:help_desk_email}"
 msgstr "Email helpdesku zaslán."
 
 msgid "{login:help_desk_link}"
 msgstr "Help desk"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Identifikátor (UID)"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS chyba"
 
@@ -589,15 +478,9 @@ msgstr "Zapamatuj moji volbu"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Hosted - lokální)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Lokalita"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Poskytovatel identifikačního profilu"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
-"Ve SimpleSAMLphp souborovém formátu (flat-file) - použijte je, pokud "
+"V SimpleSAMLphp souborovém formátu (flat-file) - použijte, pokud "
 "potřebujete používat SimpleSAMLphp na druhé straně:"
 
 msgid "{disco:login_at}"
@@ -607,7 +490,7 @@ msgid "{errors:title_GENERATEAUTHNRESPONSE}"
 msgstr "Nelze vytvořit odpověď"
 
 msgid "{errors:errorreport_header}"
-msgstr "Chybový report zaslán"
+msgstr "Zpráva o chybě odeslána"
 
 msgid "{errors:title_CREATEREQUEST}"
 msgstr "Chyba při vytváření požadavku"
@@ -616,10 +499,10 @@ msgid "{admin:metaover_header}"
 msgstr "Přehled metadat"
 
 msgid "{errors:report_submit}"
-msgstr "Zaslat chybový report"
+msgstr "Odeslat zprávu o chybě"
 
 msgid "{errors:title_INVALIDCERT}"
-msgstr "Špatný certifikát"
+msgstr "Nesprávný certifikát"
 
 msgid "{errors:title_NOTFOUND}"
 msgstr "Stránka nenalezena."
@@ -639,9 +522,6 @@ msgstr "Zpráva"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Neznámý certifikát"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP chyba"
 
@@ -657,18 +537,12 @@ msgstr "Stránka nenalezena. URL je: %URL%"
 msgid "{errors:howto_text}"
 msgstr ""
 "Tato chyba pravděpodobně vznikla neočekávanou událostí, nebo chybou v "
-"konfiguraci. Kontaktujte administratora této přihlašovací služby a "
+"konfiguraci. Kontaktujte administrátora této přihlašovací služby a "
 "zašlete mu tuto zprávu."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobil"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Hosted - lokální)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Preferovaný jazyk"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Nepředložil jste validní certifikát."
 
@@ -676,39 +550,27 @@ msgid "{admin:debug_sending_message_text_button}"
 msgstr "Můžete poslat zprávu. Požijte tlačítko k pokračování."
 
 msgid "{admin:metaover_optional_not_found}"
-msgstr "Nasledující volitelná pole nenalezena"
+msgstr "Následující volitelná pole nenalezena"
 
 msgid "{logout:logout_only}"
 msgstr "Ne, jen %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Jméno organizace"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Jméno hlavní organizační jednotky"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokální identifikační kód"
-
 msgid "{login:next}"
 msgstr "Další"
 
 msgid "{errors:descr_GENERATEAUTHNRESPONSE}"
 msgstr ""
-"Při vytváření přihlašovací odpovědi tímto poskytovatelem identity, "
+"Při vytváření přihlašovací odpovědi tímto poskytovatelem identity "
 "vznikla chyba."
 
 msgid "{disco:selectidp_full}"
-msgstr "Prosím zvolte sveého poskytovatele identity, který vám dovolí se přihlásit"
+msgstr "Prosím zvolte svého poskytovatele identity, který vám dovolí se přihlásit"
 
 msgid "{errors:descr_NOTFOUNDREASON}"
 msgstr "Stránka nenalezena. Důvod je: %REASON%  URL je: %URL%"
 
 msgid "{errors:title_NOCERT}"
-msgstr "Chybí certiifikát"
-
-msgid "{attributes:attribute_userpassword}"
-msgstr "Uživatelské heslo (hash)"
+msgstr "Chybí certifikát"
 
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Odhlašovací informace ztracena"
@@ -724,34 +586,22 @@ msgstr ""
 "Zde jsou metadata, která pro vás SimpleSAMLphp generuje. Můžete zaslat "
 "tento dokument svým důvěryhodným partnerům a založit tak federaci."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Privátní informační elementy"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certifikáty"
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
-"Přihlášení neproběhlo: certifikát který odeslal Váš rohlížeč nemohl být "
+"Přihlášení neproběhlo: certifikát, který odeslal Váš prohlížeč, nemohl být "
 "přečten"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Plné jméno organizace"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analýza"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Čislo organizace"
-
 msgid "Person's principal name at home organization"
-msgstr "Jméno nadřízeného"
+msgstr "Hlavní jméno osoby v organizaci"
 
 msgid "Superfluous options in config file"
 msgstr "Nadbytečné položky v konfiguračním souboru"
@@ -767,7 +617,7 @@ msgid ""
 "an LDAP database. An error occurred when we tried it this time."
 msgstr ""
 "LDAP je databáze uživatelů, a když se chcete přihlásit, je potřeba se "
-"přihlásit do LDAP databáze. Chyba nastala během připojování."
+"k ní připojit. Chyba nastala během připojování."
 
 msgid ""
 "Optionally enter your email address, for the administrators to be able "
@@ -777,7 +627,7 @@ msgstr ""
 "kontaktovat:"
 
 msgid "Display name"
-msgstr "Jméno k zobrazení"
+msgstr "Zobrazované jméno"
 
 msgid "Remember my choice"
 msgstr "Zapamatuj moji volbu"
@@ -786,7 +636,7 @@ msgid "SAML 2.0 SP Metadata"
 msgstr "SAML 2.0 SP Metadata"
 
 msgid "Notices"
-msgstr "Poznamky"
+msgstr "Poznámky"
 
 msgid "Home telephone"
 msgstr "Telefon domů"
@@ -800,22 +650,22 @@ msgstr ""
 "jak dlouho jste pryč a všechny atributy připojené k vašemu sezení."
 
 msgid "Explain what you did when this error occurred..."
-msgstr "Vysvětlete jak došlo k této chybě ..."
+msgstr "Vysvětlete, jak došlo k této chybě ..."
 
 msgid "An unhandled exception was thrown."
-msgstr "Neočekávaná vyjímka vznikla."
+msgstr "Vznikla neočekávaná výjimka."
 
 msgid "Invalid certificate"
-msgstr "Špatný certifikát"
+msgstr "Nesprávný certifikát"
 
 msgid "Service Provider"
 msgstr "Poskytovatel služby"
 
 msgid "Incorrect username or password."
-msgstr "Nekorektní jmeno nebo heslo."
+msgstr "Nesprávné jméno nebo heslo."
 
 msgid "There is an error in the request to this page. The reason was: %REASON%"
-msgstr "Toho je chyba požadavku pro tuto stránku. Důvod je: %REASON%"
+msgstr "Chyba požadavku pro tuto stránku. Důvod je: %REASON%"
 
 msgid "E-mail address:"
 msgstr "Email"
@@ -833,7 +683,7 @@ msgid "Locality"
 msgstr "Lokalita"
 
 msgid "Unhandled exception"
-msgstr "Neočekávaná vyjímka"
+msgstr "Neočekávaná výjimka"
 
 msgid "The following required fields was not found"
 msgstr "Následující požadovaná pole nenalezena"
@@ -843,10 +693,10 @@ msgstr "Stáhněte certifikát X509 jako PEM-encoded soubor"
 
 #, python-format
 msgid "Unable to locate metadata for %ENTITYID%"
-msgstr "Nebyly nalezeny metadata pro %ENTITYID%"
+msgstr "Nebyla nalezena metadata pro %ENTITYID%"
 
 msgid "Organizational number"
-msgstr "Čislo organizace"
+msgstr "Číslo organizace"
 
 msgid "Password not set"
 msgstr "Heslo nebylo zadáno."
@@ -910,7 +760,7 @@ msgid ""
 "wrong you may choose another one."
 msgstr ""
 "Máte nastavenu <b>%HOMEORG%</b> jako domovskou organizaci. Pokud je to "
-"špatně zvolte jinou."
+"špatně, zvolte jinou."
 
 msgid "Error processing request from Service Provider"
 msgstr "Chyba provádění žádosti poskytovatele služby"
@@ -921,7 +771,7 @@ msgstr "Jméno hlavní organizační jednotky"
 msgid ""
 "To look at the details for an SAML entity, click on the SAML entity "
 "header."
-msgstr "Pro zobrazení detailu SAML entity, klikni na hlavičku entity"
+msgstr "Pro zobrazení detailu SAML entity klikni na hlavičku entity"
 
 msgid "Enter your username and password"
 msgstr "Vložte své jméno a heslo"
@@ -948,7 +798,7 @@ msgid "Do you want to logout from all the services above?"
 msgstr "Chcete se odhlásit ze všech těchto služeb?"
 
 msgid "Select"
-msgstr "Zvol"
+msgstr "Zvolit"
 
 msgid "The authentication was aborted by the user"
 msgstr "Přihlášení bylo přerušeno uživatelem"
@@ -972,7 +822,7 @@ msgid "Organization name"
 msgstr "Jméno organizace"
 
 msgid "Authentication failed: the certificate your browser sent is unknown"
-msgstr "Přihlášení neproběhlo: certifikát který odeslal Váš prohlížeč je neznámý"
+msgstr "Přihlášení neproběhlo: certifikát, který odeslal Váš prohlížeč, je neznámý"
 
 msgid ""
 "You are about to send a message. Hit the submit message button to "
@@ -980,22 +830,22 @@ msgid ""
 msgstr "Můžete poslat zprávu. Požijte tlačítko k pokračování."
 
 msgid "Home organization domain name"
-msgstr "Jméno organizace"
+msgstr "Doménové jméno organizace"
 
 msgid "Go back to the file list"
 msgstr "Zpátky na seznam souborů"
 
 msgid "Error report sent"
-msgstr "Chybový report zaslán"
+msgstr "Zpráva o chybě odeslána"
 
 msgid "Common name"
-msgstr "Celé jméno (CN)"
+msgstr "Celé jméno"
 
 msgid "Please select the identity provider where you want to authenticate:"
-msgstr "Prosím zvolte sveého poskytovatele identity, který vám dovolí se přihlásit"
+msgstr "Prosím zvolte svého poskytovatele identity, který vám dovolí se přihlásit"
 
 msgid "Logout failed"
-msgstr "Odhlašení selhalo"
+msgstr "Odhlášení selhalo"
 
 msgid "Identity number assigned by public authorities"
 msgstr "Identifikační kód přidělený veřejnou autoritou"
@@ -1020,9 +870,9 @@ msgid ""
 "provider."
 msgstr ""
 "Informace o odhlašovací operaci byla ztracena. Můžete se vrátit do "
-"aplikace, ze které jste se odhlašovali a zkusit to znova. Tato chyba byla"
-" způsobena vypršením odhlašovacíh informací. Ty jsou uloženy omezený čas "
-"(jednotky hodin). To by mělo stači na normální odhlašení a tato chyba "
+"aplikace, ze které jste se odhlašovali, a zkusit to znova. Tato chyba byla"
+" způsobena vypršením odhlašovacích informací. Ty jsou uloženy po omezený čas "
+"(jednotky hodin). To by mělo stačit na normální odhlášení a tato chyba "
 "může ukazovat na chyby v konfiguraci. Pokud problém přetrvává, "
 "kontaktujte administrátora."
 
@@ -1033,16 +883,16 @@ msgid "Organization"
 msgstr "Organizace"
 
 msgid "No certificate"
-msgstr "Chybí certiifikát"
+msgstr "Chybí certifikát"
 
 msgid "Choose home organization"
 msgstr "Zvolte domovskou organizaci"
 
 msgid "Persistent pseudonymous ID"
-msgstr "Perzistentí pseudoanonymní ID"
+msgstr "Perzistentní pseudoanonymní ID"
 
 msgid "No SAML response provided"
-msgstr "Žádná SAML odpověď nebyla zaslána"
+msgstr "Nebyla zaslána SAML odpověď"
 
 msgid "No errors found."
 msgstr "Nenalezeny žádné chyby"
@@ -1068,12 +918,12 @@ msgid ""
 "login service, and send them the error message above."
 msgstr ""
 "Tato chyba pravděpodobně vznikla neočekávanou událostí, nebo chybou v "
-"konfiguraci. Kontaktujte administratora této přihlašovací služby a "
+"konfiguraci. Kontaktujte administrátora této přihlašovací služby a "
 "zašlete mu tuto zprávu."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Vaše sezení je platné %SECONDS% sekund od teď."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Vaše sezení je platné ještě %remaining% sekund."
 
 msgid "Domain component (DC)"
 msgstr "Doména (DC)"
@@ -1094,11 +944,11 @@ msgid ""
 "Authentication failed: the certificate your browser sent is invalid or "
 "cannot be read"
 msgstr ""
-"Přihlášení neproběhlo: certifikát který odeslal Váš rohlížeč nemohl být "
+"Přihlášení neproběhlo: certifikát, který odeslal Váš prohlížeč, nemohl být "
 "přečten"
 
 msgid "The error report has been sent to the administrators."
-msgstr "Chybový report byl zaslán administrátorům."
+msgstr "Zpráva o chybě byla zaslána administrátorům."
 
 msgid "Date of birth"
 msgstr "Datum narozeni"
@@ -1107,7 +957,7 @@ msgid "Private information elements"
 msgstr "Privátní informační elementy"
 
 msgid "You are also logged in on these services:"
-msgstr "Jste ješte přihlášen na tyto služby:"
+msgstr "Jste ještě přihlášen k těmto službám:"
 
 msgid "SimpleSAMLphp Diagnostics"
 msgstr "SimpleSAMLphp diagnostika"
@@ -1129,9 +979,9 @@ msgstr "Úspěšně jste se odhlásili z následujících služeb."
 
 msgid "You are now successfully logged out from %SP%."
 msgstr ""
-"Zahájil jste <strong>globální odhlášení</strong> z služby "
+"Zahájil jste <strong>globální odhlášení</strong> ze služby "
 "<strong>%REQUESTERNAME%</strong>. Globální odhlášení znamená, že budete "
-"odhlášen z všech následující služeb."
+"odhlášen ze všech následující služeb."
 
 msgid "Affiliation"
 msgstr "Vztah k organizaci"
@@ -1179,7 +1029,7 @@ msgid "User ID"
 msgstr "Identifikátor (UID)"
 
 msgid "JPEG Photo"
-msgstr "Foto JPEG"
+msgstr "Fotografie (JPEG)"
 
 msgid "Postal address"
 msgstr "Poštovní adresa"
@@ -1191,7 +1041,7 @@ msgid "Sending message"
 msgstr "Posílám zprávu"
 
 msgid "In SAML 2.0 Metadata XML format:"
-msgstr "Ve SAML 2.0 metadata xml formátu:"
+msgstr "Ve formátu SAML 2.0 XML metadata:"
 
 msgid "Logging out of the following services:"
 msgstr "Odhlášení z následujících služeb:"
@@ -1226,7 +1076,7 @@ msgid ""
 "Provider, but an error occurred when trying to process the request."
 msgstr ""
 "Tento poskytovatel identity přijal požadavek od poskytovatele služby, ale"
-" při jeho provádení vznikla chyba."
+" při jeho provádění vznikla chyba."
 
 msgid "Yes, all services"
 msgstr "Ano, všechny služby"
@@ -1235,7 +1085,7 @@ msgid "Logged out"
 msgstr "Odhlášen"
 
 msgid "Postal code"
-msgstr "Poštovní kód PSČ"
+msgstr "PSČ"
 
 msgid "Logging out..."
 msgstr "Odhlašuji..."
@@ -1259,7 +1109,7 @@ msgstr ""
 "administrátorem:  "
 
 msgid "XML metadata"
-msgstr "XML Metadata"
+msgstr "XML metadata"
 
 msgid ""
 "The parameters sent to the discovery service were not according to "
@@ -1292,7 +1142,7 @@ msgstr "Shib 1.3 SP Metadata"
 msgid ""
 "As you are in debug mode, you get to see the content of the message you "
 "are sending:"
-msgstr "Pokud jste v debug módu, můžete videt obsah zprávy, kterou posíláte:"
+msgstr "Pokud jste v debug módu, můžete vidět obsah zprávy, kterou posíláte:"
 
 msgid "Certificates"
 msgstr "Certifikáty"
@@ -1325,7 +1175,7 @@ msgid "Shib 1.3 IdP Metadata"
 msgstr "Shib 1.3 IdP Metadata"
 
 msgid "Change your home organization"
-msgstr "Změnte svou organizaci"
+msgstr "Změňte svou organizaci"
 
 msgid "User's password hash"
 msgstr "Uživatelské heslo (hash)"
@@ -1334,7 +1184,7 @@ msgid ""
 "In SimpleSAMLphp flat file format - use this if you are using a "
 "SimpleSAMLphp entity on the other side:"
 msgstr ""
-"Ve SimpleSAMLphp souborovém formátu (flat-file) - použijte je, pokud "
+"V SimpleSAMLphp souborovém formátu (flat-file) - použijte, pokud "
 "potřebujete používat SimpleSAMLphp na druhé straně:"
 
 msgid "Yes, continue"
@@ -1349,7 +1199,7 @@ msgid ""
 msgstr "Poskytovatel identity odpověděl chybou. (Stavový kód v SAML nebyl úspěšný)"
 
 msgid "Error loading metadata"
-msgstr "Chyba nahravání metadat"
+msgstr "Chyba nahrávání metadat"
 
 msgid "Select configuration file to check:"
 msgstr "Vyber konfiguračního souboru k verifikaci:"
@@ -1361,16 +1211,16 @@ msgid "Error when communicating with the CAS server."
 msgstr "Chyba při komunikaci s CAS serverem."
 
 msgid "No SAML message provided"
-msgstr "Žádná SAML zpráva nebyla zaslána"
+msgstr "SAML zpráva nebyla zaslána"
 
 msgid "Help! I don't remember my password."
-msgstr "Chci pomoci. Zapomněl jsem heslo."
+msgstr "Zapomněl jsem heslo."
 
 msgid ""
 "You can turn off debug mode in the global SimpleSAMLphp configuration "
 "file <tt>config/config.php</tt>."
 msgstr ""
-"Můžete vypnout debug mód v globalní konfiguraci SimpleSAMLphp "
+"Můžete vypnout debug mód v globální konfiguraci SimpleSAMLphp "
 "<tt>config/config.php</tt>."
 
 msgid "How to get help"
@@ -1382,7 +1232,7 @@ msgid ""
 "not intended to be accessed directly."
 msgstr ""
 "Přistupujete k SingleLogoutService rozhraní, ale nezadáváte SAML "
-"LogoutRequest, nebo LogoutResponse."
+"LogoutRequest ani LogoutResponse."
 
 msgid "SimpleSAMLphp error"
 msgstr "SimpleSAMLphp chyba"
@@ -1392,17 +1242,17 @@ msgid ""
 "logout</i>. To ensure that all your sessions are closed, you are "
 "encouraged to <i>close your webbrowser</i>."
 msgstr ""
-"Jedna, nebo více služeb, do kterých jste přihlašen, nepodporuje "
-"odhlašení. Pokud se chcete odhlásit, musíte ukončit váš webový prohlížeč."
+"Jedna nebo více služeb, do kterých jste přihlášen(a), nepodporuje "
+"odhlášení. Pokud se chcete odhlásit, musíte ukončit váš webový prohlížeč."
 
 msgid "Organization's legal name"
-msgstr "Plné jméno organizace"
+msgstr "Oficiální jméno organizace"
 
 msgid "Options missing from config file"
-msgstr "Chybejici polozky v konfiguracnim souboru"
+msgstr "Chybějící položky v konfiguračním souboru"
 
 msgid "The following optional fields was not found"
-msgstr "Nasledující volitelná pole nenalezena"
+msgstr "Následující volitelná pole nenalezena"
 
 msgid "Authentication failed: your browser did not send any certificate"
 msgstr "Přihlášení neproběhlo: Váš prohlížeč neodeslal žádný certifikát"
@@ -1425,8 +1275,8 @@ msgid ""
 " are the administrator of this service, you should make sure your "
 "metadata configuration is correctly setup."
 msgstr ""
-"Je zde chyba v konfiguraci SimpleSAMLphp. Pokud jsi administrátorem "
-"služby zkontroluj metadata."
+"Chyba v konfiguraci SimpleSAMLphp. Pokud jste administrátorem "
+"služby, zkontrolujte metadata."
 
 msgid "Incorrect username or password"
 msgstr "Špatné jméno a heslo."
@@ -1441,7 +1291,7 @@ msgid "Unknown certificate"
 msgstr "Neznámý certifikát"
 
 msgid "Legal name"
-msgstr "Právní jméno"
+msgstr "Oficiální jméno"
 
 msgid "Optional fields"
 msgstr "Volitelná pole"
@@ -1449,7 +1299,7 @@ msgstr "Volitelná pole"
 msgid ""
 "The initiator of this request did not provide a RelayState parameter "
 "indicating where to go next."
-msgstr "Původce této žádosti nezadal parametr RelayState, který určuje kam dál."
+msgstr "Původce této žádosti nezadal parametr RelayState, který určuje kam pokračovat."
 
 msgid "You have previously chosen to authenticate at"
 msgstr "Dříve jste zvolil(a) ověření u"
@@ -1458,7 +1308,7 @@ msgid ""
 "You sent something to the login page, but for some reason the password "
 "was not sent. Try again please."
 msgstr ""
-"Odeslal jste data do přihlašovací stranky, ale z nějakého důvodu nebylo "
+"Odeslal jste data do přihlašovací stránky, ale z nějakého důvodu nebylo "
 "odesláno heslo. Prosím zkuste to znovu."
 
 msgid "Fax number"
@@ -1481,8 +1331,8 @@ msgid ""
 "yourself for access to the service. There may be someone that can help "
 "you. Consult the help desk at your organization!"
 msgstr ""
-"Problém! Bez jména a hesla se nemůžete identifikovat. Existuje někdo kdo "
-"vám pomůže. Konzultujte helpdesk vaší organizace."
+"Bez jména a hesla se nemůžete identifikovat. Zkuste "
+"kontaktovat helpdesk své organizace."
 
 msgid "Metadata parser"
 msgstr "Metadata parser"
@@ -1509,7 +1359,7 @@ msgid "Authentication source error"
 msgstr "Chyba autentizačního zdroje"
 
 msgid "Affiliation at home organization"
-msgstr "Vztah k domovksé organizaci"
+msgstr "Vztah k domovské organizaci"
 
 msgid "Help desk homepage"
 msgstr "Help desk"
@@ -1545,7 +1395,7 @@ msgid ""
 "provide a SAML Authentication Response. Please note that this endpoint is"
 " not intended to be accessed directly."
 msgstr ""
-"Přistupujete k Assertion Consumer Service rozhraní, ale neposílálate SAML"
+"Přistupujete k Assertion Consumer Service rozhraní, ale neposíláte SAML"
 " Authentication Response."
 
 
@@ -1556,4 +1406,4 @@ msgid ""
 "probably got the wrong link, and should <b>not be here</b>."
 msgstr ""
 "Právě přistupujete k testovacímu systému. Pokud nejste administrátor, "
-"nebo tester, máte pravděpodobně špatný link."
+"nebo tester, máte pravděpodobně špatný odkaz."
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..b2440db468
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Kaldenavn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Kaldenavn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Kaldenavn"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domænekomponent"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domænekomponent"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domænekomponent"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Visningsnavn"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Hjemmeside"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Hjemmeside"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Hjemmeside"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organisationens officielle navn"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organisationens officielle navn"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organisationens officielle navn"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Brugerens tilknytning til hjemmeorganisationen"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Brugerens tilknytning til hjemmeorganisationen"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Brugerens tilknytning til hjemmeorganisationen"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Tillidsniveau for autentificering"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Tillidsniveau for autentificering"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Tillidsniveau for autentificering"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Specifik rolle i forhold til tjenesten"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Specifik rolle i forhold til tjenesten"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Specifik rolle i forhold til tjenesten"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Kaldenavn"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Kaldenavn"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Kaldenavn"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Din hjemmeorganisations 'distinguished name' (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Din hjemmeorganisations 'distinguished name' (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Din hjemmeorganisations 'distinguished name' (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Din organisatoriske enheds 'distinguished name' (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Din organisatoriske enheds 'distinguished name' (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Din organisatoriske enheds 'distinguished name' (DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primær tilknytning"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primær tilknytning"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primær tilknytning"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Primær enhed/institution"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Primær enhed/institution"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Primær enhed/institution"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Gruppemedlemskab"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Gruppemedlemskab"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Gruppemedlemskab"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faxnummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Fornavn(e)"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Fornavn(e)"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Fornavn(e)"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefonnummer (privat)"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefonnummer (privat)"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefonnummer (privat)"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Privatadresse"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Privatadresse"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Privatadresse"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG-foto"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Sted"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Sted"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Sted"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Labeled URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Labeled URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Labeled URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Emailadresse"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Emailadresse"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Emailadresse"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Telefonnummer (mobil)"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Telefonnummer (mobil)"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Telefonnummer (mobil)"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "CVR-nummer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "CVR-nummer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "CVR-nummer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Fødselsdato"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Fødselsdato"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Fødselsdato"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokalt identifikationsnummer"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokalt identifikationsnummer"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokalt identifikationsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "CPR-nummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "CPR-nummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "CPR-nummer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Hjemmeorganisationens kaldenavn"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Hjemmeorganisationens kaldenavn"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Hjemmeorganisationens kaldenavn"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisatorisk enhed"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisatorisk enhed"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisatorisk enhed"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postboks"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postboks"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postboks"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adresse"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adresse"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adresse"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postnummer"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Foretrukket sprog (evt. flere)"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Hjemmeorganisationens entydige ID (domænenavn)"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Hjemmeorganisationens entydige ID (domænenavn)"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Hjemmeorganisationens entydige ID (domænenavn)"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Hjemmeorganisationens entydige ID (domænenavn)"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Private informationselementer"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informationselementer"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Private informationselementer"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informationselementer"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Efternavn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Efternavn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Efternavn"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Gade"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Gade"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Gade"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonnummer"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Brugernavn"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Brugernavn"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Brugernavn"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Hash-værdi af brugerens kodeord"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Hash-værdi af brugerens kodeord"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Hash-værdi af brugerens kodeord"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Kaldenavn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Visningsnavn"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Visningsnavn"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Bruger-ID hos hjemmeorganisationen"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Pseudonymt bruger-ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faxnummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Fornavn(e)"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Fornavn(e)"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Fornavn(e)"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Fornavn(e)"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Fornavn(e)"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefonnummer (privat)"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Sted"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Labeled URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Labeled URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Emailadresse"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Emailadresse"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Emailadresse"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Emailadresse"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Emailadresse"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Telefonnummer (mobil)"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Hjemmeorganisationens kaldenavn"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postnummer"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Foretrukket sprog (evt. flere)"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Efternavn"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Efternavn"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Efternavn"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Efternavn"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Efternavn"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonnummer"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Brugernavn"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Brugernavn"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Brugernavn"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Brugernavn"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Brugernavn"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/messages.po
index 1037383153..fa8cbc6b15 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/da/LC_MESSAGES/messages.po
@@ -50,12 +50,6 @@ msgstr "Fejl i læsning af metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Metadata parser"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Specifik rolle i forhold til tjenesten"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG-foto"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Ingen fejl"
 
@@ -129,9 +123,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Tilbage til SimpleSAMLphp installationssiden"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation identitetsudbyder (remote)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp fejl"
 
@@ -147,18 +138,12 @@ msgstr ""
 "du er administrator for denne server, check at din metadata konfiguration"
 " er korrekt."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Din hjemmeorganisations 'distinguished name' (DN)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Fejlagtig forespørgsel"
 
 msgid "{status:sessionsize}"
 msgstr "Sessionsstørrelse: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adresse"
-
 msgid "{logout:title}"
 msgstr "Du er logget ud"
 
@@ -186,30 +171,15 @@ msgstr "I kø"
 msgid "{admin:cfg_check_header}"
 msgstr "Undersøgelse af konfiguration"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Gruppemedlemskab"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Efternavn"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Send besked"
 
 msgid "{status:logout}"
 msgstr "Log ud"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Hjemmeorganisationens kaldenavn"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonnummer"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "De afsendte værdier overholder ikke Discovery Servicens' krav"
 
-msgid "{attributes:attribute_mail}"
-msgstr "Emailadresse"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Fejl ved generering af SAML-forespørgsel"
 
@@ -219,9 +189,6 @@ msgstr "Valgfrie felter"
 msgid "{logout:return}"
 msgstr "Tilbage til service"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Visningsnavn"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Du kan få metadata-xml <a href=\"%METAURL%\">her</a>:"
 
@@ -233,9 +200,6 @@ msgstr ""
 "Du kan slå debug-mode fra i den globale SimpleSAMLphp-konfigurationsfil "
 "<tt>config/config.php</tt>"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Privatadresse"
-
 msgid "{disco:select}"
 msgstr "Vælg"
 
@@ -265,9 +229,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Vil du logge ud fra alle ovenstående services?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ingen Adgang"
 
@@ -280,9 +241,6 @@ msgstr "RelayState mangler"
 msgid "{errors:descr_NOSTATE}"
 msgstr "State information er tabt og der er ikke muligt at gentage forspørgelsen"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "CPR-nummer"
-
 msgid "{login:password}"
 msgstr "Kodeord"
 
@@ -307,24 +265,15 @@ msgstr "Fejl i Logout Request"
 msgid "{admin:metaover_errorentry}"
 msgstr "Fejl i denne sektion af metadata"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Brugerens tilknytning til hjemmeorganisationen"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata ikke fundet"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Fornavn(e)"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktoplysninger"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Unhandled exception"
 
-msgid "{status:validfor}"
-msgstr "Du har %SECONDS% tilbage af din session"
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 tjenesteudbyder-demo"
 
@@ -361,33 +310,21 @@ msgstr "Vælg den konfiguration som skal undersøges"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Authentifikation fejlede: Certifikatet som din browser har send er ukendt"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Hjemmeside"
-
 msgid "{logout:logging_out_from}"
 msgstr "Du logger ud af følgende services:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Du er nu logget ud fra %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation tjenesteudbyder (hosted)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Fejlrapporten er nu sendt til system-administrator"
 
 msgid "{status:subject_header}"
 msgstr "SAML emne"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Fødselsdato"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Der opstod en fejl under behandlingen af Logout forespørgelsen"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Pseudonymt bruger-ID"
-
 msgid "{logout:success}"
 msgstr "Du har logget ud fra alle overnævnte services. "
 
@@ -397,12 +334,6 @@ msgstr "Beskeder"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Autentificering blev afbrudt af brugeren"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primær tilknytning"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postnummer"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Der opstod en fejl ved kommunikationen med CAS serveren"
 
@@ -415,9 +346,6 @@ msgstr "SAML 2.0 tjenesteudbyders metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Konverteret metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Kaldenavn"
-
 msgid "{logout:completed}"
 msgstr "Færdig"
 
@@ -427,18 +355,9 @@ msgstr ""
 "(auth.adminpassword). Opdater konfigurationen med et nyt password, der er"
 " forskelligt fra stadardpasswordet."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisatorisk enhed"
-
 msgid "{general:service_provider}"
 msgstr "Tjenesteudbyder"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefonnummer (privat)"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domænekomponent"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Der er en fejl i forespørgslen til siden. Grunden er: %REASON%"
 
@@ -457,23 +376,14 @@ msgstr "Indtast brugernavn og kodeord"
 msgid "{errors:report_explain}"
 msgstr "Forklar hvad du gjorde og hvordan fejlen opstod"
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAML response mangler"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Kaldenavn"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Du forsøger at tilgå Single Logout grænsefladen, uden at sendet et SAML "
 "LogoutRequest eller LogoutResponse"
 
-msgid "{attributes:attribute_street}"
-msgstr "Gade"
-
 msgid "{login:organization}"
 msgstr "Organisationsnavn"
 
@@ -509,9 +419,6 @@ msgstr "Vælg hjemmeinstitution"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Overflødigt valg i konfigurationsfil"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Labeled URI"
-
 msgid "{errors:report_email}"
 msgstr "E-mailadresse:"
 
@@ -526,9 +433,6 @@ msgstr ""
 "Afsenderen af denne forespørgelse har ikke angivet en RelayStay "
 "parameter, der hvilket hvor der skal fortsættes"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Officielt navn"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostik"
 
@@ -538,9 +442,6 @@ msgstr ""
 "udløbet, hvor lang tid der er til at den udløber, samt alle øvrige "
 "oplysninger om din session."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Hjemmeorganisationens entydige ID (domænenavn)"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Siden kunne ikke findes"
 
@@ -559,33 +460,18 @@ msgstr "For at se detaljer vedrørende SAML-entiteten, klik på entitets-headere
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ugyldigt Certifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Din organisatoriske enheds 'distinguished name' (DN)"
-
 msgid "{general:remember}"
 msgstr "Husk samtykke"
 
 msgid "{disco:selectidp}"
 msgstr "Vælg institution (identitetsudbyder)"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postboks"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Bruger-ID hos hjemmeorganisationen"
-
 msgid "{login:help_desk_email}"
 msgstr "Send en e-mail til servicedesk"
 
 msgid "{login:help_desk_link}"
 msgstr "Servicedesk"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Gruppemedlemsskab"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Brugernavn"
-
 msgid "{login:remember_me}"
 msgstr "Husk mig"
 
@@ -609,12 +495,6 @@ msgstr "Husk valget"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 tjenesteudbyder (hosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Sted"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Tillidsniveau for autentificering"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "I SimpleSAMLphp flat-file format - brug dette hvis du også bruger "
@@ -665,9 +545,6 @@ msgstr "ADFS identitetsudbyder (hosted)"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Ukendt certifikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faxnummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP fejl"
 
@@ -685,18 +562,12 @@ msgstr ""
 "alternativt en ukendt fejl. Kontakt administratoren af denne tjeneste og "
 "rapportér så mange detaljer som muligt om fejlen"
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Telefonnummer (mobil)"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "ADFS identitetsudbyder metadata"
 
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shibboleth 1.3 identitetsudbyder (hosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Foretrukket sprog (evt. flere)"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Du har ikke valgt et gyldigt certifikat"
 
@@ -709,15 +580,6 @@ msgstr "Følgende valgfrie felter kunne ikke findes"
 msgid "{logout:logout_only}"
 msgstr "Nej, kun %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Hjemmeorganisationens kaldenavn"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Primær enhed/institution"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokalt identifikationsnummer"
-
 msgid "{login:next}"
 msgstr "Næste"
 
@@ -733,9 +595,6 @@ msgstr "Siden kunne ikke findes på grund af %REASON%. Url'en var %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Intet certifikat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Hash-værdi af brugerens kodeord"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Manglende logout-oplysninger"
 
@@ -750,12 +609,6 @@ msgstr ""
 "Her er det metadata, som SimpleSAMLphp har genereret. Du kan sende det "
 "til dem du stoler i forbindelse med oprettelsen af en føderation."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Private informationselementer"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Federation tjenesteudbyder-demo"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certifikater"
 
@@ -764,18 +617,12 @@ msgstr ""
 "Authentifikation fejlede: Certifikatet som din browser har sendt er "
 "ugyldigt og kan ikke læses"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organisationens officielle navn"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth-demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parse"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "CVR-nummer"
-
 msgid "Person's principal name at home organization"
 msgstr "Bruger-ID hos hjemmeorganisationen"
 
@@ -1109,8 +956,8 @@ msgstr ""
 "rapportér så mange detaljer som muligt om fejlen"
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Du har %SECONDS% tilbage af din session"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Du har %remaining% tilbage af din session"
 
 msgid "Domain component (DC)"
 msgstr "Domænekomponent"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..beb719b79d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Voller Name"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Voller Name"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Voller Name"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domain-Komponente"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domain-Komponente"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domain-Komponente"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Anzeigename"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Homepage der Organisation"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Homepage der Organisation"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Homepage der Organisation"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Name der Körperschaft"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Name der Körperschaft"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Name der Körperschaft"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Organisationszugehörigkeit"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Organisationszugehörigkeit"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Organisationszugehörigkeit"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Identity Assurance Profil"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identity Assurance Profil"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identity Assurance Profil"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Berechtigung"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Berechtigung"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Berechtigung"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Spitzname"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Spitzname"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Spitzname"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) der Organisation"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) der Organisation"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) der Organisation"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) der Organisationseinheit"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) der Organisationseinheit"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) der Organisationseinheit"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primäre Organisationszugehörigkeit"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primäre Organisationszugehörigkeit"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primäre Organisationszugehörigkeit"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) der primären Organisationseinheit"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) der primären Organisationseinheit"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Distinguished name (DN) der primären Organisationseinheit"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Organisationszugehörigkeit bei der Heimorganisation"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Organisationszugehörigkeit bei der Heimorganisation"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Organisationszugehörigkeit bei der Heimorganisation"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faxnummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Vorname"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Vorname"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Vorname"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Private Telefonnummer"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Private Telefonnummer"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Private Telefonnummer"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Privatanschrift"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Privatanschrift"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Privatanschrift"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG Foto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG Foto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG Foto"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Ort"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Ort"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Ort"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI mit zusätzlicher Kennzeichnung"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI mit zusätzlicher Kennzeichnung"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI mit zusätzlicher Kennzeichnung"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-Mail-Adresse"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-Mail-Adresse"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-Mail-Adresse"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager/in"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager/in"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager/in"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiltelefon"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Firmennummer nach dem Norwegischen Firmenregister"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Firmennummer nach dem Norwegischen Firmenregister"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Firmennummer nach dem Norwegischen Firmenregister"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Geburtsdatum"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Geburtsdatum"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Geburtsdatum"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokale Identitätsnummer"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokale Identitätsnummer"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokale Identitätsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Norwegische Personenkennziffer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Norwegische Personenkennziffer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Norwegische Personenkennziffer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Name der Organisation"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Name der Organisation"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Name der Organisation"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisationseinheit"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisationseinheit"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisationseinheit"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "Service-spezifische pseudonyme ID bei der Heimorganisation"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "Service-spezifische pseudonyme ID bei der Heimorganisation"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postfach"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postfach"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postfach"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Anschrift"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Anschrift"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Anschrift"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postleitzahl"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postleitzahl"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postleitzahl"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Bevorzugte Sprache"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Bevorzugte Sprache"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Bevorzugte Sprache"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Domain-Name der Heimorganisation"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Domain-Name der Heimorganisation"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Domain-Name der Heimorganisation"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Domain-Name der Heimorganisation"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Private Informationselemente"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Private Informationselemente"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Private Informationselemente"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Private Informationselemente"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Nachname"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Nachname"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Nachname"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Straße"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Straße"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Straße"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "Pseudonyme ID bei der Heimorganisation"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "Pseudonyme ID bei der Heimorganisation"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonnummer"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Benutzer-ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Benutzer-ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Benutzer-ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Passwort Hash des Benutzers"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Passwort Hash des Benutzers"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Passwort Hash des Benutzers"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Voller Name"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Anzeigename"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Anzeigename"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Persönliche ID bei der Heimorganisation"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Persistente pseudonyme ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faxnummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Vorname"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Vorname"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Vorname"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Vorname"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Vorname"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Private Telefonnummer"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Ort"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI mit zusätzlicher Kennzeichnung"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI mit zusätzlicher Kennzeichnung"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-Mail-Adresse"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-Mail-Adresse"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-Mail-Adresse"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-Mail-Adresse"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-Mail-Adresse"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiltelefon"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Name der Organisation"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postleitzahl"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postleitzahl"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Bevorzugte Sprache"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Bevorzugte Sprache"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Bevorzugte Sprache"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Bevorzugte Sprache"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Bevorzugte Sprache"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Nachname"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Nachname"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Nachname"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Nachname"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Nachname"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonnummer"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Benutzer-ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Benutzer-ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Benutzer-ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Benutzer-ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Benutzer-ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/messages.po
index 5093d0f4b2..65364292e3 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/de/LC_MESSAGES/messages.po
@@ -20,9 +20,9 @@ msgstr "SAML 2.0 IdP Metadaten"
 
 msgid "{errors:descr_WRONGUSERPASS}"
 msgstr ""
-"Entweder es konnte kein Nutzer mit dem angegebenen Nutzernamen gefunden "
+"Entweder es konnte kein Benutzer mit dem angegebenen Benutzernamen gefunden "
 "werden oder das Passwort ist falsch. Überprüfen Sie die Zugangsdaten und "
-"probieren Sie es nochmal."
+"probieren Sie es erneut."
 
 msgid "{logout:failed}"
 msgstr "Abmeldung fehlgeschlagen"
@@ -34,7 +34,7 @@ msgid "{admin:metaover_group_metadata.saml20-sp-remote}"
 msgstr "SAML 2.0 Service Provider (entfernt)"
 
 msgid "{errors:descr_NOCERT}"
-msgstr "Authentifizierung fehlgeschlagen: ihr Browser hat kein Zertifikat gesandt"
+msgstr "Authentifizierung fehlgeschlagen: Ihr Browser hat kein Zertifikat gesendet"
 
 msgid "{errors:title_PROCESSASSERTION}"
 msgstr "Fehler beim Bearbeiten der Antwort des IdP"
@@ -43,7 +43,7 @@ msgid "{errors:title_NOSTATE}"
 msgstr "Statusinformationen verloren"
 
 msgid "{login:username}"
-msgstr "Nutzername"
+msgstr "Benutzername"
 
 msgid "{errors:title_METADATA}"
 msgstr "Fehler beim Laden der Metadaten"
@@ -51,26 +51,20 @@ msgstr "Fehler beim Laden der Metadaten"
 msgid "{admin:metaconv_title}"
 msgstr "Metadaten-Parser"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Berechtigung"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG Foto"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Keine Fehler gefunden."
 
 msgid "{errors:descr_LOGOUTINFOLOST}"
 msgstr ""
 "Die Information des aktuellen Abmeldevorgangs ist verloren gegangen. "
-"Bitte rufen Sie den Dienst auf, vom dem Sie sich abmelden wollten, und "
-"versuchen Sie dort das Abmelden nochmal. Dieser Fehler tritt auf, wenn "
+"Bitte rufen Sie den Dienst auf, vom dem Sie sich abmelden wollten und "
+"versuchen Sie dort das Abmelden erneut. Dieser Fehler tritt auf, wenn "
 "die Abmeldeanfrage abläuft, da diese nur eine gewisse Zeit (üblicherweise"
 " ein paar Stunden) zwischengespeichert wird. Das sollte im normalen "
 "Betrieb ausreichend sein, da ein Abmeldevorgang nicht so lange dauert. "
 "Dieser Fehler kann also auch ein Anzeichen sein, dass ein "
 "Konfigurationsfehler vorliegt. Tritt dieser Fehler wiederholt auf, wenden"
-" sie sich bitte an den benutzen Dienst (Service Provider), vom dem sie "
+" Sie sich bitte an den Dienst (Service Provider), vom dem Sie "
 "sich abmelden wollen."
 
 msgid "{disco:previous_auth}"
@@ -83,8 +77,8 @@ msgstr "Gehe zurück zur Dateiliste"
 
 msgid "{errors:report_trackid}"
 msgstr ""
-"Falls Sie diesen Fehler melden, teilen Sie bitte ebenfalls diese Tracking"
-" ID mit, dadurch ist es dem Administrator möglich ihre Sitzung in den "
+"Falls Sie diesen Fehler melden, teilen Sie bitte ebenfalls diese Tracking-ID "
+"mit, wodurch es dem Administrator möglich ist, Ihre Sitzung in den "
 "Logs zu finden:"
 
 msgid "{login:change_home_org_title}"
@@ -106,17 +100,17 @@ msgstr "Fehler melden"
 
 msgid "{login:change_home_org_text}"
 msgstr ""
-"Sie haben <b>%HOMEORG%</b> als ihre Einrichtung gewählt, können diese "
+"Sie haben <b>%HOMEORG%</b> als Ihre Einrichtung gewählt, können diese "
 "Auswahl aber noch ändern."
 
 msgid "{errors:title_PROCESSAUTHNREQUEST}"
 msgstr "Fehler beim Bearbeiten der Anfrage des Service Providers"
 
 msgid "{errors:descr_PROCESSASSERTION}"
-msgstr "Die Antwort des Identitiy Provider konnte nicht akzeptiert werden."
+msgstr "Die Antwort des Identity Providers konnte nicht akzeptiert werden."
 
 msgid "{errors:debuginfo_header}"
-msgstr "Debug Information"
+msgstr "Debug-Information"
 
 msgid "{admin:debug_sending_message_msg_text}"
 msgstr ""
@@ -133,26 +127,23 @@ msgstr "Shib 1.3 IdP Metadaten"
 
 msgid "{login:help_text}"
 msgstr ""
-"Tut uns leid - Ohne Nutzername und Passwort können Sie sich nicht "
-"authentifizieren und somit den Dienst nicht nutzen. Möglicherweise kann "
-"ihnen jemand helfen, kontaktieren Sie dazu den Helpdesk ihrer "
-"Einrichtung."
+"Ohne Benutzername und Passwort können Sie sich nicht authentifizieren und "
+"somit den Dienst nicht nutzen. Möglicherweise kann Ihnen jemand in Ihrer "
+"Einrichtung helfen. Kontaktieren Sie dazu einen Ansprechpartner oder den "
+"Helpdesk Ihrer Einrichtung."
 
 msgid "{logout:default_link_text}"
 msgstr "Zurück zur SimpleSAMLphp Installationsseite"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (entfernt)"
-
 msgid "{errors:error_header}"
-msgstr "SimpleSAMLphp Fehler"
+msgstr "SimpleSAMLphp-Fehler"
 
 msgid "{login:help_header}"
 msgstr "Hilfe, ich habe mein Passwort vergessen."
 
 msgid "{errors:descr_LDAPERROR}"
 msgstr ""
-"LDAP ist die gewählte Nutzerdatenbank. Wenn Sie versuchen sich "
+"LDAP ist die gewählte Benutzerdatenbank. Wenn Sie versuchen sich "
 "anzumelden, muss auf diese LDAP-Datenbank zugegriffen werden, dabei ist "
 "dieses mal ein Fehler aufgetreten."
 
@@ -162,17 +153,11 @@ msgstr ""
 "der Administrator dieses Dienstes sind, sollten Sie sicherstellen, dass "
 "die Metadatenkonfiguration korrekt ist."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) der Organisation"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Ungültige Anfrage"
 
 msgid "{status:sessionsize}"
-msgstr "Grösse der Sitzung: %SIZE%"
-
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Anschrift"
+msgstr "Größe der Sitzung: %SIZE%"
 
 msgid "{logout:title}"
 msgstr "Abgemeldet"
@@ -184,22 +169,16 @@ msgid "{admin:metaover_unknown_found}"
 msgstr "Die folgenden Felder wurden nicht erkannt"
 
 msgid "{errors:title_AUTHSOURCEERROR}"
-msgstr "Authentifizierungsquellenfehler"
+msgstr "Fehler in der Authentifizierungsquelle"
 
 msgid "{login:select_home_org}"
-msgstr "Wählen sie die Einrichtung, von der Sie ihre Zugangsdaten beziehen"
+msgstr "Wählen Sie die Einrichtung, von der Sie Ihre Zugangsdaten beziehen"
 
 msgid "{logout:hold}"
 msgstr "In der Wartschleife"
 
 msgid "{admin:cfg_check_header}"
-msgstr "Konfigurationscheck"
-
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Organisationszugehörigkeit bei der Heimorganisation"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Nachname"
+msgstr "Konfigurationsprüfung"
 
 msgid "{admin:debug_sending_message_send}"
 msgstr "Nachricht senden"
@@ -207,20 +186,11 @@ msgstr "Nachricht senden"
 msgid "{status:logout}"
 msgstr "Abmelden"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Name der Organisation"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonnummer"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Die Parameter, die an den Discovery Service geschickt wurden, entsprachen"
 " nicht der Spezifikation."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Emailadresse"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Ein Fehler beim Erzeugen der SAML-Anfrage ist aufgetreten."
 
@@ -230,9 +200,6 @@ msgstr "Optionale Felder"
 msgid "{logout:return}"
 msgstr "Zum Dienst zurückkehren"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Anzeigename"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Sie können <a href=\"%METAURL%\">das Metadaten-XML auf dieser URL "
@@ -243,12 +210,9 @@ msgstr "Ja, alle Dienste"
 
 msgid "{admin:debug_disable_debug_mode}"
 msgstr ""
-"Sie können den Debug-Modus in der globalen SimpleSAMLphp "
+"Sie können den Debug-Modus in der globalen SimpleSAMLphp-"
 "Konfigurationsdatei <tt>config/config.php</tt> ausschalten."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Privatanschrift"
-
 msgid "{disco:select}"
 msgstr "Auswahl"
 
@@ -262,7 +226,7 @@ msgid "{logout:progress}"
 msgstr "Abmeldung läuft..."
 
 msgid "{login:error_wrongpassword}"
-msgstr "Falscher Nutzername oder Passwort."
+msgstr "Falscher Benutzername oder Passwort."
 
 msgid "{admin:metaover_group_metadata.shib13-sp-remote}"
 msgstr "Shib 1.3 Service Provider (entfernt)"
@@ -276,9 +240,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Wollen Sie sich von allen obenstehenden Diensten abmelden?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Kein Zugriff"
 
@@ -289,59 +250,47 @@ msgstr ""
 "erneut."
 
 msgid "{errors:title_NORELAYSTATE}"
-msgstr "Kein Weiterleitungsangabge"
+msgstr "Keine Weiterleitungsinformationen"
 
 msgid "{errors:descr_NOSTATE}"
 msgstr ""
 "Die Statusinformationen gingen verloren und die Anfrage kann nicht neu "
 "gestartet werden"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Norwegische Personenkennziffer"
-
 msgid "{login:password}"
 msgstr "Passwort"
 
 msgid "{errors:debuginfo_text}"
 msgstr ""
-"Die unten angegebene Debug-Information kann von Interesse für den "
-"Administrator oder das Helpdesk sein:"
+"Die unten angegebene Debug-Information kann für den Administrator oder den "
+"Helpdesk von Nutzen sein:"
 
 msgid "{admin:cfg_check_missing}"
 msgstr "Optionen, die in der Konfigurationsdatei fehlen"
 
 msgid "{errors:descr_UNHANDLEDEXCEPTION}"
-msgstr "Eine nicht abgefangene Code-Exception ist aufgetreten."
+msgstr "Ein nicht abgefangener Ausnahmefehler ist aufgetreten."
 
 msgid "{general:yes}"
 msgstr "Ja"
 
 msgid "{errors:title_CONFIG}"
-msgstr "Konfigurations Fehler"
+msgstr "Konfigurationsfehler"
 
 msgid "{errors:title_LOGOUTREQUEST}"
 msgstr "Fehler beim Bearbeiten der Abmeldeanfrage"
 
 msgid "{admin:metaover_errorentry}"
-msgstr "Fehler in diesem Metadaten Eintrag"
-
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Organisationszugehörigkeit"
+msgstr "Fehler in diesem Metadateneintrag"
 
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Keine Metadaten gefunden"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Vorname"
-
 msgid "{login:contact_info}"
 msgstr "Kontakt"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
-msgstr "Nicht abgefangene Code-Exception"
-
-msgid "{status:validfor}"
-msgstr "Ihre Sitzung ist noch für %SECONDS% gültig."
+msgstr "Nicht abgefangener Ausnahmefehler"
 
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo Beispiel"
@@ -371,37 +320,25 @@ msgid "{admin:metaover_required_found}"
 msgstr "Notwendige Felder"
 
 msgid "{admin:cfg_check_select_file}"
-msgstr "Wählen Sie die Konfigurationsdatei, die gecheckt werden soll:"
+msgstr "Wählen Sie die Konfigurationsdatei, die geprüft werden soll:"
 
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr ""
-"Authentifizierung fehlgeschlagen: das von ihrem Browser gesandte "
+"Authentifizierung fehlgeschlagen: das von Ihrem Browser gesendete "
 "Zertifikat ist unbekannt"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Homepage der Organisation"
-
 msgid "{logout:logging_out_from}"
 msgstr "Melde Sie von den folgenden Diensten ab:"
 
 msgid "{logout:loggedoutfrom}"
-msgstr "Sie wurden nun erfolgreich von %SP% abgemeldet"
-
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (gehosted)"
+msgstr "Sie wurden erfolgreich von %SP% abgemeldet"
 
 msgid "{errors:errorreport_text}"
-msgstr "Der Fehlerbericht wurde an den Administrator gesandt."
-
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Geburtsdatum"
+msgstr "Der Fehlerbericht wurde an den Administrator gesendet."
 
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Beim Versuch die Abmeldeanfrage zu bearbeiten ist ein Fehler aufgetreten."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistente pseudonyme ID"
-
 msgid "{logout:success}"
 msgstr "Sie haben sich erfolgreich von allen obenstehenden Diensten abgemeldet."
 
@@ -411,14 +348,8 @@ msgstr "Anmerkungen"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Die Authentifizierung wurde durch den Benutzer abgebrochen"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primäre Organisationszugehörigkeit"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postleitzahl"
-
 msgid "{errors:descr_CASERROR}"
-msgstr "Fehler bei der Kommunikation mit dem CAS Server."
+msgstr "Fehler bei der Kommunikation mit dem CAS-Server."
 
 msgid "{general:no}"
 msgstr "Nein"
@@ -429,9 +360,6 @@ msgstr "SAML 2.0 SP Metadaten"
 msgid "{admin:metaconv_converted}"
 msgstr "Konvertierte Metadaten"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Voller Name"
-
 msgid "{logout:completed}"
 msgstr "abgeschlossen"
 
@@ -440,17 +368,8 @@ msgstr ""
 "Sie benutzen noch immer das Standardpasswort, bitte ändern Sie die "
 "Konfiguration (auth.adminpassword)."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisationseinheit"
-
 msgid "{general:service_provider}"
-msgstr "Service-Provider"
-
-msgid "{attributes:attribute_homephone}"
-msgstr "Private Telefonnummer"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain-Komponente"
+msgstr "Service Provider"
 
 msgid "{errors:descr_BADREQUEST}"
 msgstr "In der Anfrage dieser Seite trat ein Fehler auf, der Grund ist: %REASON%"
@@ -465,33 +384,24 @@ msgid "{general:no_cancel}"
 msgstr "Nein, ich stimme nicht zu"
 
 msgid "{login:user_pass_header}"
-msgstr "Bitte geben Sie Ihren Nutzernamen und Ihr Passwort ein"
+msgstr "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein"
 
 msgid "{errors:report_explain}"
 msgstr "Erläutern Sie, wodurch der Fehler auftrat..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager/in"
-
 msgid "{errors:title_ACSPARAMS}"
-msgstr "Keine SAML Antwort bereit gestellt"
-
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Spitzname"
+msgstr "Keine SAML-Antwort bereitgestellt"
 
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
-"Sie haben auf die SingleLogoutService Schnittstelle zugegriffen, aber "
-"keine SAML Abmeldeanfrage oder Abmeldeantwort bereit gestellt."
-
-msgid "{attributes:attribute_street}"
-msgstr "Straße"
+"Sie haben auf die SingleLogoutService-Schnittstelle zugegriffen, aber "
+"keine SAML Abmeldeanfrage oder Abmeldeantwort bereitgestellt."
 
 msgid "{login:organization}"
 msgstr "Organisation"
 
 msgid "{errors:title_WRONGUSERPASS}"
-msgstr "Nutzername oder Passwort falsch."
+msgstr "Benutzername oder Passwort falsch."
 
 msgid "{admin:metaover_required_not_found}"
 msgstr "Die folgenden notwendigen Felder wurden nicht gefunden"
@@ -499,24 +409,24 @@ msgstr "Die folgenden notwendigen Felder wurden nicht gefunden"
 msgid "{errors:descr_NOACCESS}"
 msgstr ""
 "Dieser Endpunkt ist nicht aktiviert. Überprüfen Sie die "
-"Aktivierungsoptionen in der SimpleSAMLphp Konfiguration."
+"Aktivierungsoptionen in der SimpleSAMLphp-Konfiguration."
 
 msgid "{errors:title_SLOSERVICEPARAMS}"
-msgstr "Keine SAML Nachricht bereit gestellt"
+msgstr "Keine SAML-Nachricht bereitgestellt"
 
 msgid "{errors:descr_ACSPARAMS}"
 msgstr ""
-"Sie haben auf die Assertion Consumer Service Schnittstelle zugegriffen, "
-"aber keine SAML Authentifizierungsantwort bereit gestellt."
+"Sie haben auf die Assertion-Consumer-Service-Schnittstelle zugegriffen, "
+"aber keine SAML-Authentifizierungsantwort bereitgestellt."
 
 msgid "{admin:debug_sending_message_text_link}"
 msgstr ""
-"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den Nachricht "
-"senden Link um fortzufahren."
+"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den \"Nachricht "
+"senden\"-Link um fortzufahren."
 
 msgid "{errors:descr_AUTHSOURCEERROR}"
 msgstr ""
-"Authentifizierungsfehler in der Quelle %AUTHSOURCE%. Der Grund hier für "
+"Fehler in der Authentifizierungsquelle %AUTHSOURCE%. Der Grund hierfür "
 "ist: %REASON%"
 
 msgid "{status:some_error_occurred}"
@@ -528,9 +438,6 @@ msgstr "Einrichtung auswählen"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Überflüssige Optionen in der Konfigurationsdatei"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI mit zusätzlicher Kennzeichnung"
-
 msgid "{errors:report_email}"
 msgstr "E-Mail-Adresse:"
 
@@ -538,18 +445,15 @@ msgid "{errors:howto_header}"
 msgstr "Wie man Hilfe bekommt"
 
 msgid "{errors:title_NOTSET}"
-msgstr "Password ist nicht gesetzt"
+msgstr "Passwort ist nicht gesetzt"
 
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr ""
-"Der Initiator dieser Anfrage hat keinen Weiterleitungsparameter bereit "
-"gestellt, der Auskunft gibt, wohin es als nächstes gehen soll."
-
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Offizeller Name"
+"Der Initiator dieser Anfrage hat keinen Weiterleitungsparameter "
+"bereitgestellt, der Auskunft gibt, wohin Sie weitergeleitet werden sollen."
 
 msgid "{status:header_diagnostics}"
-msgstr "SimpleSAMLphp Diagnose"
+msgstr "SimpleSAMLphp-Diagnose"
 
 msgid "{status:intro}"
 msgstr ""
@@ -557,9 +461,6 @@ msgstr ""
 "ob Ihre Sitzung ausgelaufen ist, wie lange die Sitzung noch gültig ist "
 "und alle Attribute Ihrer Sitzung."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Domain-Name der Heimorganisation"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Seite nicht gefunden"
 
@@ -580,37 +481,25 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ungültiges Zertifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) der Organisationseinheit"
-
 msgid "{general:remember}"
 msgstr "Zustimmung merken"
 
 msgid "{disco:selectidp}"
 msgstr "Wählen Sie Ihren Identity Provider"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postfach"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Persönliche ID bei der Heimorganisation"
-
 msgid "{login:help_desk_email}"
-msgstr "Email an den Helpdesk senden"
+msgstr "E-Mail an den Helpdesk senden"
 
 msgid "{login:help_desk_link}"
-msgstr "Seite des Helpdesk"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Nutzer ID"
+msgstr "Seite des Helpdesks"
 
 msgid "{errors:title_CASERROR}"
-msgstr "CAS Fehler"
+msgstr "CAS-Fehler"
 
 msgid "{login:user_pass_text}"
 msgstr ""
 "Um diesen Dienst zu nutzen, müssen Sie sich authentifizieren. Bitte geben"
-" sie daher unten Nutzernamen und Passwort ein."
+" Sie daher unten Benutzername und Passwort ein."
 
 msgid "{errors:title_DISCOPARAMS}"
 msgstr "Ungültige Anfrage an den Discovery Service"
@@ -624,12 +513,6 @@ msgstr "Meine Auswahl merken"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (gehosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Ort"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identity Assurance Profil"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Im SimpleSAMLphp flat-file Format - verwenden Sie das, falls auf der "
@@ -642,13 +525,13 @@ msgid "{errors:title_GENERATEAUTHNRESPONSE}"
 msgstr "Konnte keine Authentifikationsantwort erstellen"
 
 msgid "{errors:errorreport_header}"
-msgstr "Fehlerbericht gesandt"
+msgstr "Fehlerbericht gesendet"
 
 msgid "{errors:title_CREATEREQUEST}"
 msgstr "Fehler beim Erzeugen der Anfrage"
 
 msgid "{admin:metaover_header}"
-msgstr "Metadaten-Überblick"
+msgstr "Metadatenüberblick"
 
 msgid "{errors:report_submit}"
 msgstr "Fehlerbericht absenden"
@@ -674,21 +557,18 @@ msgstr "Nachricht"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Unbekanntes Zertifikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faxnummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP Fehler"
 
 msgid "{logout:failedsps}"
 msgstr ""
-"Abmelden von einem oder mehreren Diensten schlug fehl. Um "
+"Das Abmelden von einem oder mehreren Diensten schlug fehl. Um "
 "sicherzustellen, dass alle Ihre Sitzungen geschlossen sind, wird Ihnen "
 "empfohlen, <i>Ihren Webbrowser zu schließen</i>."
 
 msgid "{errors:descr_NOTFOUND}"
 msgstr ""
-"Die gewünschte Seite konnte nicht gefunden werden, der aufgerufene URL "
+"Die gewünschte Seite konnte nicht gefunden werden, die aufgerufene URL "
 "war %URL%"
 
 msgid "{errors:howto_text}"
@@ -698,22 +578,16 @@ msgstr ""
 "Kontaktieren Sie bitte den Administrator dieses Dienstes und teilen die "
 "obige Fehlermeldung mit."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiltelefon"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (gehosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Bevorzugte Sprache"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Sie haben kein gültiges Zertifikat benutzt."
 
 msgid "{admin:debug_sending_message_text_button}"
 msgstr ""
-"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den Nachricht "
-"senden Knopf um fortzufahren."
+"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den \"Nachricht "
+"senden\"-Knopf um fortzufahren."
 
 msgid "{admin:metaover_optional_not_found}"
 msgstr "Die folgenden optionalen Felder wurden nicht gefunden"
@@ -721,15 +595,6 @@ msgstr "Die folgenden optionalen Felder wurden nicht gefunden"
 msgid "{logout:logout_only}"
 msgstr "Nein, nur %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Name der Organisation"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Distinguished name (DN) der primären Organisationseinheit"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokale Kennummer"
-
 msgid "{login:next}"
 msgstr "Weiter"
 
@@ -746,14 +611,11 @@ msgstr ""
 msgid "{errors:descr_NOTFOUNDREASON}"
 msgstr ""
 "Die gewünschte Seite konnte nicht gefunden werden. Der Grund ist: "
-"%REASON% Der aufgerufene URL war %URL%"
+"%REASON% Die aufgerufene URL war %URL%"
 
 msgid "{errors:title_NOCERT}"
 msgstr "Kein Zertifikat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Passwort Hash des Benutzers"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Abmeldeinformation verloren gegangen"
 
@@ -766,35 +628,23 @@ msgstr "SimpleSAMLphp scheint falsch konfiguriert zu sein."
 msgid "{admin:metadata_intro}"
 msgstr ""
 "Hier finden Sie die Metadaten, die SimpleSAMLphp für Sie erzeugt hat. Sie"
-" können dieses Metadaten-Dokument zu Partnern schicken, denen Sie "
+" können dieses Metadatendokument zu Partnern schicken, denen Sie "
 "vertrauen, um eine vertrauensbasierte Föderation aufzusetzen."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Private Informationselemente"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo Beispiel"
-
 msgid "{admin:metadata_cert}"
 msgstr "Zertifikate"
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
-"Authentifizierung fehlgeschlagen: das von ihrem Browser gesandte "
+"Authentifizierung fehlgeschlagen: das von Ihrem Browser gesendete "
 "Zertifikat ist ungültig oder kann nicht gelesen werden"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Name der Körperschaft"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth Demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parse"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Firmennummer nach dem Norwegischen Firmenregister"
-
 msgid "Person's principal name at home organization"
 msgstr "Persönliche ID bei der Heimorganisation"
 
@@ -811,7 +661,7 @@ msgid ""
 "LDAP is the user database, and when you try to login, we need to contact "
 "an LDAP database. An error occurred when we tried it this time."
 msgstr ""
-"LDAP ist die gewählte Nutzerdatenbank. Wenn Sie versuchen sich "
+"LDAP ist die gewählte Benutzerdatenbank. Wenn Sie versuchen sich "
 "anzumelden, muss auf diese LDAP-Datenbank zugegriffen werden, dabei ist "
 "dieses mal ein Fehler aufgetreten."
 
@@ -856,10 +706,10 @@ msgid "Invalid certificate"
 msgstr "Ungültiges Zertifikat"
 
 msgid "Service Provider"
-msgstr "Service-Provider"
+msgstr "Service Provider"
 
 msgid "Incorrect username or password."
-msgstr "Falscher Nutzername oder Passwort."
+msgstr "Falscher Benutzername oder Passwort."
 
 msgid "There is an error in the request to this page. The reason was: %REASON%"
 msgstr "In der Anfrage dieser Seite trat ein Fehler auf, der Grund ist: %REASON%"
@@ -871,7 +721,7 @@ msgid "Submit message"
 msgstr "Nachricht senden"
 
 msgid "No RelayState"
-msgstr "Kein Weiterleitungsangabge"
+msgstr "Keine Weiterleitungsinformationen"
 
 msgid "Error creating request"
 msgstr "Fehler beim Erzeugen der Anfrage"
@@ -880,7 +730,7 @@ msgid "Locality"
 msgstr "Ort"
 
 msgid "Unhandled exception"
-msgstr "Nicht abgefangene Code-Exception"
+msgstr "Nicht abgefangener Ausnahmefehler"
 
 msgid "The following required fields was not found"
 msgstr "Die folgenden notwendigen Felder wurden nicht gefunden"
@@ -896,7 +746,7 @@ msgid "Organizational number"
 msgstr "Firmennummer nach dem Norwegischen Firmenregister"
 
 msgid "Password not set"
-msgstr "Password ist nicht gesetzt"
+msgstr "Passwort ist nicht gesetzt"
 
 msgid "SAML 2.0 IdP Metadata"
 msgstr "SAML 2.0 IdP Metadaten"
@@ -909,25 +759,25 @@ msgid ""
 "username and password in the form below."
 msgstr ""
 "Um diesen Dienst zu nutzen, müssen Sie sich authentifizieren. Bitte geben"
-" sie daher unten Nutzernamen und Passwort ein."
+" Sie daher unten Benutzernamen und Passwort ein."
 
 msgid "CAS Error"
-msgstr "CAS Fehler"
+msgstr "CAS-Fehler"
 
 msgid ""
 "The debug information below may be of interest to the administrator / "
 "help desk:"
 msgstr ""
-"Die unten angegebene Debug-Information kann von Interesse für den "
-"Administrator oder das Helpdesk sein:"
+"Die unten angegebene Debug-Information kann für den Administrator oder den "
+"Helpdesk von Nutzen sein:"
 
 msgid ""
 "Either no user with the given username could be found, or the password "
 "you gave was wrong. Please check the username and try again."
 msgstr ""
-"Entweder es konnte kein Nutzer mit dem angegebenen Nutzernamen gefunden "
+"Entweder es konnte kein Benutzer mit dem angegebenen Benutzernamen gefunden "
 "werden oder das Passwort ist falsch. Überprüfen Sie die Zugangsdaten und "
-"probieren Sie es nochmal."
+"probieren Sie es erneut."
 
 msgid "Error"
 msgstr "Fehler"
@@ -952,7 +802,7 @@ msgid "Converted metadata"
 msgstr "Konvertierte Metadaten"
 
 msgid "Mail"
-msgstr "Emailadresse"
+msgstr "E-Mail-Adresse"
 
 msgid "No, cancel"
 msgstr "Nein"
@@ -961,7 +811,7 @@ msgid ""
 "You have chosen <b>%HOMEORG%</b> as your home organization. If this is "
 "wrong you may choose another one."
 msgstr ""
-"Sie haben <b>%HOMEORG%</b> als ihre Einrichtung gewählt, können diese "
+"Sie haben <b>%HOMEORG%</b> als Ihre Einrichtung gewählt, können diese "
 "Auswahl aber noch ändern."
 
 msgid "Error processing request from Service Provider"
@@ -978,7 +828,7 @@ msgstr ""
 "Kopfzeile der SAML-Entität."
 
 msgid "Enter your username and password"
-msgstr "Bitte geben Sie Ihren Nutzernamen und Ihr Passwort ein"
+msgstr "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein"
 
 msgid "Login at"
 msgstr "Login bei"
@@ -1027,15 +877,15 @@ msgstr "Name der Organisation"
 
 msgid "Authentication failed: the certificate your browser sent is unknown"
 msgstr ""
-"Authentifizierung fehlgeschlagen: das von ihrem Browser gesandte "
+"Authentifizierung fehlgeschlagen: das von Ihrem Browser gesendete "
 "Zertifikat ist unbekannt"
 
 msgid ""
 "You are about to send a message. Hit the submit message button to "
 "continue."
 msgstr ""
-"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den Nachricht "
-"senden Knopf um fortzufahren."
+"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den \"Nachricht "
+"senden\"-Knopf um fortzufahren."
 
 msgid "Home organization domain name"
 msgstr "Domain-Name der Heimorganisation"
@@ -1044,7 +894,7 @@ msgid "Go back to the file list"
 msgstr "Gehe zurück zur Dateiliste"
 
 msgid "Error report sent"
-msgstr "Fehlerbericht gesandt"
+msgstr "Fehlerbericht gesendet"
 
 msgid "Common name"
 msgstr "Voller Name"
@@ -1067,7 +917,7 @@ msgid "Error received from Identity Provider"
 msgstr "Fehlermeldung vom Identity Provider erhalten"
 
 msgid "LDAP Error"
-msgstr "LDAP Fehler"
+msgstr "LDAP-Fehler"
 
 msgid ""
 "The information about the current logout operation has been lost. You "
@@ -1080,14 +930,14 @@ msgid ""
 "provider."
 msgstr ""
 "Die Information des aktuellen Abmeldevorgangs ist verloren gegangen. "
-"Bitte rufen Sie den Dienst auf, vom dem Sie sich abmelden wollten, und "
-"versuchen Sie dort das Abmelden nochmal. Dieser Fehler tritt auf, wenn "
+"Bitte rufen Sie den Dienst auf, vom dem Sie sich abmelden wollten und "
+"versuchen Sie dort das Abmelden erneut. Dieser Fehler tritt auf, wenn "
 "die Abmeldeanfrage abläuft, da diese nur eine gewisse Zeit (üblicherweise"
 " ein paar Stunden) zwischengespeichert wird. Das sollte im normalen "
 "Betrieb ausreichend sein, da ein Abmeldevorgang nicht so lange dauert. "
 "Dieser Fehler kann also auch ein Anzeichen sein, dass ein "
 "Konfigurationsfehler vorliegt. Tritt dieser Fehler wiederholt auf, wenden"
-" sie sich bitte an den benutzen Dienst (Service Provider), vom dem sie "
+" Sie sich bitte an den Dienst (Service Provider), vom dem Sie "
 "sich abmelden wollen."
 
 msgid "Some error occurred"
@@ -1106,7 +956,7 @@ msgid "Persistent pseudonymous ID"
 msgstr "Persistente pseudonyme ID"
 
 msgid "No SAML response provided"
-msgstr "Keine SAML Antwort bereit gestellt"
+msgstr "Keine SAML-Antwort bereitgestellt"
 
 msgid "No errors found."
 msgstr "Keine Fehler gefunden."
@@ -1116,11 +966,11 @@ msgstr "SAML 2.0 Service Provider (gehosted)"
 
 msgid "The given page was not found. The URL was: %URL%"
 msgstr ""
-"Die gewünschte Seite konnte nicht gefunden werden, der aufgerufene URL "
+"Die gewünschte Seite konnte nicht gefunden werden, die aufgerufene URL "
 "war %URL%"
 
 msgid "Configuration error"
-msgstr "Konfigurations Fehler"
+msgstr "Konfigurations-Fehler"
 
 msgid "Required fields"
 msgstr "Notwendige Felder"
@@ -1139,8 +989,8 @@ msgstr ""
 "obige Fehlermeldung mit."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Ihre Sitzung ist noch für %SECONDS% gültig."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Ihre Sitzung ist noch für %remaining% Sekunden gültig."
 
 msgid "Domain component (DC)"
 msgstr "Domain-Komponente"
@@ -1161,7 +1011,7 @@ msgid ""
 "Authentication failed: the certificate your browser sent is invalid or "
 "cannot be read"
 msgstr ""
-"Authentifizierung fehlgeschlagen: das von ihrem Browser gesandte "
+"Authentifizierung fehlgeschlagen: das von Ihrem Browser gesendete "
 "Zertifikat ist ungültig oder kann nicht gelesen werden"
 
 msgid "The error report has been sent to the administrators."
@@ -1177,16 +1027,16 @@ msgid "You are also logged in on these services:"
 msgstr "Sie sind auch auf diesen Diensten angemeldet:"
 
 msgid "SimpleSAMLphp Diagnostics"
-msgstr "SimpleSAMLphp Diagnose"
+msgstr "SimpleSAMLphp-Diagnose"
 
 msgid "Debug information"
-msgstr "Debug Information"
+msgstr "Debug-Information"
 
 msgid "No, only %SP%"
 msgstr "Nein, nur %SP%"
 
 msgid "Username"
-msgstr "Nutzername"
+msgstr "Benutzername"
 
 msgid "Go back to SimpleSAMLphp installation page"
 msgstr "Zurück zur SimpleSAMLphp Installationsseite"
@@ -1195,7 +1045,7 @@ msgid "You have successfully logged out from all services listed above."
 msgstr "Sie haben sich erfolgreich von allen obenstehenden Diensten abgemeldet."
 
 msgid "You are now successfully logged out from %SP%."
-msgstr "Sie wurden nun erfolgreich von %SP% abgemeldet"
+msgstr "Sie wurden erfolgreich von %SP% abgemeldet"
 
 msgid "Affiliation"
 msgstr "Organisationszugehörigkeit"
@@ -1237,17 +1087,17 @@ msgstr "Die folgenden Felder wurden nicht erkannt"
 
 msgid "Authentication error in source %AUTHSOURCE%. The reason was: %REASON%"
 msgstr ""
-"Authentifizierungsfehler in der Quelle %AUTHSOURCE%. Der Grund hier für "
+"Fehler in der Authentifizierungsquelle %AUTHSOURCE%. Der Grund hierfür "
 "ist: %REASON%"
 
 msgid "Bad request received"
 msgstr "Ungültige Anfrage"
 
 msgid "User ID"
-msgstr "Nutzer ID"
+msgstr "Benutzer-ID"
 
 msgid "JPEG Photo"
-msgstr "JPEG Foto"
+msgstr "JPEG-Foto"
 
 msgid "Postal address"
 msgstr "Anschrift"
@@ -1323,8 +1173,8 @@ msgid ""
 "makes it possible to locate your session in the logs available to the "
 "system administrator:"
 msgstr ""
-"Falls Sie diesen Fehler melden, teilen Sie bitte ebenfalls diese Tracking"
-" ID mit, dadurch ist es dem Administrator möglich ihre Sitzung in den "
+"Falls Sie diesen Fehler melden, teilen Sie bitte ebenfalls diese Tracking-ID "
+"mit, wodurch es dem Administrator möglich ist, Ihre Sitzung in den "
 "Logs zu finden:"
 
 msgid "XML metadata"
@@ -1344,7 +1194,7 @@ msgid ""
 "Unable to log out of one or more services. To ensure that all your "
 "sessions are closed, you are encouraged to <i>close your webbrowser</i>."
 msgstr ""
-"Abmelden von einem oder mehreren Diensten schlug fehl. Um "
+"Das Abmelden von einem oder mehreren Diensten schlug fehl. Um "
 "sicherzustellen, dass alle Ihre Sitzungen geschlossen sind, wird Ihnen "
 "empfohlen, <i>Ihren Webbrowser zu schließen</i>."
 
@@ -1378,8 +1228,8 @@ msgstr "Distinguished name (DN) der Organisation"
 
 msgid "You are about to send a message. Hit the submit message link to continue."
 msgstr ""
-"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den Nachricht "
-"senden Link um fortzufahren."
+"Sie sind dabei eine Nachricht zu senden. Klicken Sie auf den \"Nachricht "
+"senden\"-Link um fortzufahren."
 
 msgid "Organizational unit"
 msgstr "Organisationseinheit"
@@ -1388,7 +1238,7 @@ msgid "Authentication aborted"
 msgstr "Authentifizierung abgebrochen"
 
 msgid "Local identity number"
-msgstr "Lokale Kennummer"
+msgstr "Lokale Identitätsnummer"
 
 msgid "Report errors"
 msgstr "Fehler melden"
@@ -1403,7 +1253,7 @@ msgid "Change your home organization"
 msgstr "Eine andere Einrichtung, von der Sie Zugangsdaten erhalten, auswählen"
 
 msgid "User's password hash"
-msgstr "Passwort Hash des Benutzers"
+msgstr "Passwort-Hash des Benutzers"
 
 msgid ""
 "In SimpleSAMLphp flat file format - use this if you are using a "
@@ -1429,16 +1279,16 @@ msgid "Error loading metadata"
 msgstr "Fehler beim Laden der Metadaten"
 
 msgid "Select configuration file to check:"
-msgstr "Wählen Sie die Konfigurationsdatei, die gecheckt werden soll:"
+msgstr "Wählen Sie die Konfigurationsdatei, die geprüft werden soll:"
 
 msgid "On hold"
-msgstr "In der Wartschleife"
+msgstr "In der Warteschleife"
 
 msgid "Error when communicating with the CAS server."
-msgstr "Fehler bei der Kommunikation mit dem CAS Server."
+msgstr "Fehler bei der Kommunikation mit dem CAS-Server."
 
 msgid "No SAML message provided"
-msgstr "Keine SAML Nachricht bereit gestellt"
+msgstr "Keine SAML Nachricht bereitgestellt"
 
 msgid "Help! I don't remember my password."
 msgstr "Hilfe, ich habe mein Passwort vergessen."
@@ -1447,7 +1297,7 @@ msgid ""
 "You can turn off debug mode in the global SimpleSAMLphp configuration "
 "file <tt>config/config.php</tt>."
 msgstr ""
-"Sie können den Debug-Modus in der globalen SimpleSAMLphp "
+"Sie können den Debug-Modus in der globalen SimpleSAMLphp-"
 "Konfigurationsdatei <tt>config/config.php</tt> ausschalten."
 
 msgid "How to get help"
@@ -1458,11 +1308,11 @@ msgid ""
 "SAML LogoutRequest or LogoutResponse. Please note that this endpoint is "
 "not intended to be accessed directly."
 msgstr ""
-"Sie haben auf die SingleLogoutService Schnittstelle zugegriffen, aber "
-"keine SAML Abmeldeanfrage oder Abmeldeantwort bereit gestellt."
+"Sie haben auf die SingleLogoutService-Schnittstelle zugegriffen, aber "
+"keine SAML Abmeldeanfrage oder Abmeldeantwort bereitgestellt."
 
 msgid "SimpleSAMLphp error"
-msgstr "SimpleSAMLphp Fehler"
+msgstr "SimpleSAMLphp-Fehler"
 
 msgid ""
 "One or more of the services you are logged into <i>do not support "
@@ -1483,14 +1333,14 @@ msgid "The following optional fields was not found"
 msgstr "Die folgenden optionalen Felder wurden nicht gefunden"
 
 msgid "Authentication failed: your browser did not send any certificate"
-msgstr "Authentifizierung fehlgeschlagen: ihr Browser hat kein Zertifikat gesandt"
+msgstr "Authentifizierung fehlgeschlagen: Ihr Browser hat kein Zertifikat gesendet"
 
 msgid ""
 "This endpoint is not enabled. Check the enable options in your "
 "configuration of SimpleSAMLphp."
 msgstr ""
 "Dieser Endpunkt ist nicht aktiviert. Überprüfen Sie die "
-"Aktivierungsoptionen in der SimpleSAMLphp Konfiguration."
+"Aktivierungsoptionen in der SimpleSAMLphp-Konfiguration."
 
 msgid "You can <a href=\"%METAURL%\">get the metadata xml on a dedicated URL</a>:"
 msgstr ""
@@ -1510,7 +1360,7 @@ msgstr ""
 "die Metadatenkonfiguration korrekt ist."
 
 msgid "Incorrect username or password"
-msgstr "Nutzername oder Passwort falsch."
+msgstr "Benutzername oder Passwort falsch."
 
 msgid "Message"
 msgstr "Nachricht"
@@ -1522,7 +1372,7 @@ msgid "Unknown certificate"
 msgstr "Unbekanntes Zertifikat"
 
 msgid "Legal name"
-msgstr "Offizeller Name"
+msgstr "Offizieller Name"
 
 msgid "Optional fields"
 msgstr "Optionale Felder"
@@ -1531,8 +1381,8 @@ msgid ""
 "The initiator of this request did not provide a RelayState parameter "
 "indicating where to go next."
 msgstr ""
-"Der Initiator dieser Anfrage hat keinen Weiterleitungsparameter bereit "
-"gestellt, der Auskunft gibt, wohin es als nächstes gehen soll."
+"Der Initiator dieser Anfrage hat keinen Weiterleitungsparameter "
+"bereitgestellt, der Auskunft gibt, wohin Sie weitergeleitet werden sollen."
 
 msgid "You have previously chosen to authenticate at"
 msgstr ""
@@ -1554,10 +1404,10 @@ msgid "Shibboleth demo"
 msgstr "Shibboleth Demo"
 
 msgid "Error in this metadata entry"
-msgstr "Fehler in diesem Metadaten Eintrag"
+msgstr "Fehler in diesem Metadateneintrag"
 
 msgid "Session size: %SIZE%"
-msgstr "Grösse der Sitzung: %SIZE%"
+msgstr "Größe der Sitzung: %SIZE%"
 
 msgid "Parse"
 msgstr "Parse"
@@ -1567,22 +1417,22 @@ msgid ""
 "yourself for access to the service. There may be someone that can help "
 "you. Consult the help desk at your organization!"
 msgstr ""
-"Tut uns leid - Ohne Nutzername und Passwort können Sie sich nicht "
-"authentifizieren und somit den Dienst nicht nutzen. Möglicherweise kann "
-"ihnen jemand helfen, kontaktieren Sie dazu den Helpdesk ihrer "
-"Einrichtung."
+"Ohne Benutzername und Passwort können Sie sich nicht authentifizieren und "
+"somit den Dienst nicht nutzen. Möglicherweise kann Ihnen jemand in Ihrer "
+"Einrichtung helfen. Kontaktieren Sie dazu einen Ansprechpartner oder den "
+"Helpdesk Ihrer Einrichtung."
 
 msgid "Metadata parser"
-msgstr "Metadaten-Parser"
+msgstr "Metadatenparser"
 
 msgid "Choose your home organization"
-msgstr "Wählen sie die Einrichtung, von der Sie ihre Zugangsdaten beziehen"
+msgstr "Wählen Sie die Einrichtung, von der Sie Ihre Zugangsdaten beziehen"
 
 msgid "Send e-mail to help desk"
-msgstr "Email an den Helpdesk senden"
+msgstr "E-Mail an den Helpdesk senden"
 
 msgid "Metadata overview"
-msgstr "Metadaten-Überblick"
+msgstr "Metadatenüberblick"
 
 msgid "Title"
 msgstr "Titel"
@@ -1600,10 +1450,10 @@ msgid "Affiliation at home organization"
 msgstr "Organisationszugehörigkeit bei der Heimorganisation"
 
 msgid "Help desk homepage"
-msgstr "Seite des Helpdesk"
+msgstr "Seite des Helpdesks"
 
 msgid "Configuration check"
-msgstr "Konfigurationscheck"
+msgstr "Konfigurationsprüfung"
 
 msgid "We did not accept the response sent from the Identity Provider."
 msgstr "Die Antwort des Identitiy Provider konnte nicht akzeptiert werden."
@@ -1611,7 +1461,7 @@ msgstr "Die Antwort des Identitiy Provider konnte nicht akzeptiert werden."
 msgid "The given page was not found. The reason was: %REASON%  The URL was: %URL%"
 msgstr ""
 "Die gewünschte Seite konnte nicht gefunden werden. Der Grund ist: "
-"%REASON% Der aufgerufene URL war %URL%"
+"%REASON% Die aufgerufene URL war %URL%"
 
 msgid "Shib 1.3 Identity Provider (Remote)"
 msgstr "Shib 1.3 Identity Provider (entfernt)"
@@ -1622,7 +1472,7 @@ msgid ""
 "federation."
 msgstr ""
 "Hier finden Sie die Metadaten, die SimpleSAMLphp für Sie erzeugt hat. Sie"
-" können dieses Metadaten-Dokument zu Partnern schicken, denen Sie "
+" können dieses Metadatendokument zu Partnern schicken, denen Sie "
 "vertrauen, um eine vertrauensbasierte Föderation aufzusetzen."
 
 msgid "[Preferred choice]"
@@ -1636,9 +1486,8 @@ msgid ""
 "provide a SAML Authentication Response. Please note that this endpoint is"
 " not intended to be accessed directly."
 msgstr ""
-"Sie haben auf die Assertion Consumer Service Schnittstelle zugegriffen, "
-"aber keine SAML Authentifizierungsantwort bereit gestellt."
-
+"Sie haben auf die Assertion-Consumer-Service-Schnittstelle zugegriffen, "
+"aber keine SAML Authentifizierungsantwort bereitgestellt."
 
 msgid ""
 "You are now accessing a pre-production system. This authentication setup "
@@ -1647,7 +1496,7 @@ msgid ""
 "probably got the wrong link, and should <b>not be here</b>."
 msgstr ""
 "Sie greifen jetzt auf ein System im Pilotbetrieb zu. Diese "
-"Authentifizierungs-Konfiguration dient nur zum Testen und zur Überprüfung"
+"Authentifizierungskonfiguration dient nur zum Testen und zur Überprüfung"
 " des Pilotbetriebes. Falls Ihnen jemand einen Link gesendet hat, der Sie "
 "hierher geführt hat und Sie sind kein <i>Tester</i>, so war der Link "
-"vermutlich falsch und Sie sollten <b>nicht hier sein</b>. "
+"vermutlich falsch und Sie sollten <b>diese Seite verlassen</b>. "
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..1caa092673
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Κοινό όνομα (CN)"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Κοινό όνομα (CN)"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Κοινό όνομα (CN)"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Συστατικό Τομέα (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Συστατικό Τομέα (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Συστατικό Τομέα (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Εμφανιζόμενο όνομα"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Διεύθυνση αρχικής σελίδας οικείου οργανισμού"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Διεύθυνση αρχικής σελίδας οικείου οργανισμού"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Διεύθυνση αρχικής σελίδας οικείου οργανισμού"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Επίσημη επωνυμία οικείου οργανισμού"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Επίσημη επωνυμία οικείου οργανισμού"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Επίσημη επωνυμία οικείου οργανισμού"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Ιδιότητα/ες"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Ιδιότητα/ες"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Ιδιότητα/ες"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Επίπεδο αξιοπιστίας ταυτοποίησης"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Επίπεδο αξιοπιστίας ταυτοποίησης"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Επίπεδο αξιοπιστίας ταυτοποίησης"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Δικαιώματα πρόσβασης στην υπηρεσία"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Δικαιώματα πρόσβασης στην υπηρεσία"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Δικαιώματα πρόσβασης στην υπηρεσία"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Ψευδώνυμο χρήστη"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Ψευδώνυμο χρήστη"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Ψευδώνυμο χρήστη"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Διακεκριμένο όνομα (DN) οικείου οργανισμού"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Διακεκριμένο όνομα (DN) οικείου οργανισμού"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Διακεκριμένο όνομα (DN) οικείου οργανισμού"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Διακεκριμένο όνομα (DN) οικείας οργανωτικής μονάδας"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Διακεκριμένο όνομα (DN) οικείας οργανωτικής μονάδας"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Διακεκριμένο όνομα (DN) οικείας οργανωτικής μονάδας"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Κύρια ιδιότητα"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Κύρια ιδιότητα"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Κύρια ιδιότητα"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Διακεκριμένο όνομα (DN) κύριας οργανωτικής μονάδας"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Διακεκριμένο όνομα (DN) κύριας οργανωτικής μονάδας"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Διακεκριμένο όνομα (DN) κύριας οργανωτικής μονάδας"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Ιδιότητα ανά διαχειριστική περιοχή (administrative domain)"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Ιδιότητα ανά διαχειριστική περιοχή (administrative domain)"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Ιδιότητα ανά διαχειριστική περιοχή (administrative domain)"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "Μόνιμο, αδιαφανές αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "Μόνιμο, αδιαφανές αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "Μόνιμο, αδιαφανές αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Όνομα"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Όνομα"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Όνομα"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Τηλέφωνο οικίας"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Τηλέφωνο οικίας"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Τηλέφωνο οικίας"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Ταχυδρομική διεύθυνση οικίας"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Ταχυδρομική διεύθυνση οικίας"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Ταχυδρομική διεύθυνση οικίας"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Φωτογραφία σε μορφή JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Φωτογραφία σε μορφή JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Φωτογραφία σε μορφή JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Τοποθεσία"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Τοποθεσία"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Τοποθεσία"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Επισημασμένα URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Επισημασμένα URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Επισημασμένα URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Email"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Διακεκριμένο όνομα (DN) διαχειριστή"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Διακεκριμένο όνομα (DN) διαχειριστή"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Διακεκριμένο όνομα (DN) διαχειριστή"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Κινητό τηλέφωνο"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Κινητό τηλέφωνο"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Κινητό τηλέφωνο"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Αριθμός οικείου οργανισμού"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Αριθμός οικείου οργανισμού"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Αριθμός οικείου οργανισμού"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Ημερομηνία γέννησης"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Ημερομηνία γέννησης"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Ημερομηνία γέννησης"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Αριθμός ταυτότητας"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Αριθμός ταυτότητας"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Αριθμός ταυτότητας"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Αριθμός ταυτότητας από δημόσια αρχή"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Αριθμός ταυτότητας από δημόσια αρχή"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Αριθμός ταυτότητας από δημόσια αρχή"
+
+# English string: Organization name
+msgid "o"
+msgstr "Όνομα οργανισμού"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Όνομα οργανισμού"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Όνομα οργανισμού"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Οργανωτική μονάδα"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Οργανωτική μονάδα"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Οργανωτική μονάδα"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Ταχυδρομική θυρίδα"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Ταχυδρομική θυρίδα"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Ταχυδρομική θυρίδα"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Ταχυδρομική διεύθυνση"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Ταχυδρομική διεύθυνση"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Ταχυδρομική διεύθυνση"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Ταχυδρομικός κωδικός"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Ταχυδρομικός κωδικός"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Ταχυδρομικός κωδικός"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Προτιμώμενη γλώσσα"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Όνομα περιοχής (domain) οικείου οργανισμού"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Όνομα περιοχής (domain) οικείου οργανισμού"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Όνομα περιοχής (domain) οικείου οργανισμού"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Όνομα περιοχής (domain) οικείου οργανισμού"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Απόρρητα προσωπικά στοιχεία"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Απόρρητα προσωπικά στοιχεία"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Απόρρητα προσωπικά στοιχεία"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Απόρρητα προσωπικά στοιχεία"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Επώνυμο"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Επώνυμο"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Επώνυμο"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Οδός"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Οδός"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Οδός"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Τηλέφωνο"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Τηλέφωνο"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Τηλέφωνο"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Τίτλος"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Τίτλος"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Τίτλος"
+
+# English string: User ID
+msgid "uid"
+msgstr "Αναγνωριστικό χρήστη"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Αναγνωριστικό χρήστη"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Αναγνωριστικό χρήστη"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Κρυπτογραφημένος κωδικός"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Κρυπτογραφημένος κωδικός"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Κρυπτογραφημένος κωδικός"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Κοινό όνομα (CN)"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Εμφανιζόμενο όνομα"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Όνομα"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Όνομα"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Όνομα"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Όνομα"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Όνομα"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Τηλέφωνο οικίας"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Τοποθεσία"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Επισημασμένα URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Επισημασμένα URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Email"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Email"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Email"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Email"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Κινητό τηλέφωνο"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Όνομα οργανισμού"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Ταχυδρομικός κωδικός"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Ταχυδρομικός κωδικός"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Προτιμώμενη γλώσσα"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Επώνυμο"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Επώνυμο"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Επώνυμο"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Επώνυμο"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Επώνυμο"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Τηλέφωνο"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Τηλέφωνο"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Τίτλος"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Τίτλος"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Αναγνωριστικό χρήστη"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Αναγνωριστικό χρήστη"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Αναγνωριστικό χρήστη"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Αναγνωριστικό χρήστη"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Αναγνωριστικό χρήστη"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/messages.po
index ee4679c650..c0bc349fc2 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/el/LC_MESSAGES/messages.po
@@ -52,12 +52,6 @@ msgstr "Σφάλμα κατά τη φόρτωση μεταδεδομένων"
 msgid "{admin:metaconv_title}"
 msgstr "Αναλυτής (parser) μεταδεδομένων"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Δικαιώματα πρόσβασης στην υπηρεσία"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Φωτογραφία σε μορφή JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Δεν εντοπίστηκαν λάθη."
 
@@ -139,9 +133,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Επιστροφή στην αρχική σελίδα"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Πάροχος Ταυτότητας WS-Federation (Απομακρυσμένος)"
-
 msgid "{errors:error_header}"
 msgstr "Σφάλμα του SimpleSAMLphp"
 
@@ -159,18 +150,12 @@ msgstr ""
 "διαχειριστής της υπηρεσίας αυτής, βεβαιωθείτε ότι τα μεταδεδομένα έχουν "
 "ρυθμιστεί σωστά."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Διακεκριμένο όνομα (DN) οικείου οργανισμού"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Εσφαλμένο αίτημα"
 
 msgid "{status:sessionsize}"
 msgstr "Μέγεθος συνεδρίας: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Ταχυδρομική διεύθυνση"
-
 msgid "{logout:title}"
 msgstr "Αποσυνδεδεμένος/η"
 
@@ -198,32 +183,17 @@ msgstr "Σε αναμονή"
 msgid "{admin:cfg_check_header}"
 msgstr "Έλεγχος ρυθμίσεων"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Ιδιότητα ανά διαχειριστική περιοχή (administrative domain)"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Επώνυμο"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Υποβολή μηνύματος"
 
 msgid "{status:logout}"
 msgstr "Αποσύνδεση"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Όνομα οργανισμού"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Τηλέφωνο"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Οι παράμετροι που στάλθηκαν στην υπηρεσία ανεύρεσης παρόχου ταυτότητας "
 "ήταν εσφαλμένες."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Email"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία του αιτήματος SAML."
 
@@ -236,9 +206,6 @@ msgstr "Επιστροφή στην υπηρεσία"
 msgid "{errors:title_MEMCACHEDOWN}"
 msgstr "Δεν είναι δυνατή η ανάκτηση δεδομένων συνεδρίας"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Εμφανιζόμενο όνομα"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Διεύθυνση <a href=\"%METAURL%\">λήψης</a> μεταδεδομένων:"
 
@@ -250,9 +217,6 @@ msgstr ""
 "Μπορείτε να απενεργοποιήσετε τη λειτουργία εντοπισμού σφαλμάτων (debug) "
 "στο αρχείο ρυθμίσεων του SimpleSAMLphp <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Ταχυδρομική διεύθυνση οικίας"
-
 msgid "{disco:select}"
 msgstr "Επιλογή"
 
@@ -282,9 +246,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Επιθυμείτε να αποσυνδεθείτε από όλες τις παραπάνω υπηρεσίες;"
 
-msgid "{attributes:attribute_title}"
-msgstr "Τίτλος"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Σφάλμα κατά την πρόσβαση"
 
@@ -299,9 +260,6 @@ msgstr ""
 "Δεν ήταν δυνατό να εξυπηρετηθεί το αίτημά σας καθώς δεν βρέθηκαν "
 "πληροφορίες σχετικά με την κατάστασή του"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Αριθμός ταυτότητας από δημόσια αρχή"
-
 msgid "{login:password}"
 msgstr "Κωδικός"
 
@@ -328,27 +286,15 @@ msgstr "Σφάλμα κατά τη διαδικασία αποσύνδεσης"
 msgid "{admin:metaover_errorentry}"
 msgstr "Σφάλμα σε αυτή την καταχώρηση μεταδεδομένων"
 
-msgid "{attributes:attribute_edupersonuniqueid}"
-msgstr "Μόνιμο, αδιαφανές αναγνωριστικό χρήστη στον οικείο οργανισμό"
-
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Ιδιότητα/ες"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Δεν βρέθηκαν μεταδεδομένα"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Όνομα"
-
 msgid "{login:contact_info}"
 msgstr "Στοιχεία επικοινωνίας:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Ανεπίλυτη εξαίρεση"
 
-msgid "{status:validfor}"
-msgstr "Απομένουν %SECONDS% δευτερόλεπτα μέχρι τη λήξη της συνεδρίας σας."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Δοκιμαστικός Παροχέας Υπηρεσιών SAML 2.0"
 
@@ -391,33 +337,21 @@ msgstr ""
 "Η ταυτοποίηση απέτυχε: Το πιστοποιητικό που έστειλε το πρόγραμμα "
 "περιήγησης ιστού που χρησιμοποιείτε δεν ήταν δυνατό να αναγνωριστεί."
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Διεύθυνση αρχικής σελίδας οικείου οργανισμού"
-
 msgid "{logout:logging_out_from}"
 msgstr "Γίνεται αποσύνδεση από τις ακόλουθες υπηρεσίες:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Έχετε αποσυνδεθεί με επιτυχία από την υπηρεσία %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Πάροχος Υπηρεσιών WS-Federation (Φιλοξενούμενος)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Η αποστολή της αναφοράς σφάλματος στους διαχειριστές ολοκληρώθηκε."
 
 msgid "{status:subject_header}"
 msgstr "Υποκείμενο (subject) SAML"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Ημερομηνία γέννησης"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Παρουσιαστήκε σφάλμα κατά την επεξεργασία του αιτήματος αποσύνδεσης."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Αδιαφανές αναγνωριστικό χρήστη μακράς διάρκειας"
-
 msgid "{logout:success}"
 msgstr ""
 "Έχετε αποσυνδεθεί με επιτυχία από όλες τις υπηρεσίες που αναφέρονται "
@@ -429,12 +363,6 @@ msgstr "Ειδοποιήσεις"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Η ταυτοποίηση ματαιώθηκε από τον χρήστη."
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Κύρια ιδιότητα"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Ταχυδρομικός κωδικός"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Παρουσιάστηκε σφάλμα κατά την επικοινωνία με τον εξυπηρετητή CAS."
 
@@ -447,9 +375,6 @@ msgstr "Μεταδεδομένα Παρόχου Υπηρεσιών SAML 2.0"
 msgid "{admin:metaconv_converted}"
 msgstr "Μετατραπέντα μεταδεδομένα"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Κοινό όνομα (CN)"
-
 msgid "{logout:completed}"
 msgstr "Ολοκληρώθηκε"
 
@@ -458,18 +383,9 @@ msgstr ""
 "Χρησιμοποιείται η προκαθορισμένη τιμή του κωδικού πρόσβασης. Παρακαλούμε "
 "επεξεργαστείτε το αρχείο ρυθμίσεων."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Οργανωτική μονάδα"
-
 msgid "{general:service_provider}"
 msgstr "Πάροχος υπηρεσίας"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Τηλέφωνο οικίας"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Συστατικό Τομέα (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Παρουσιάστηκε σφάλμα κατά την επεξεργασία του αιτήματος: %REASON%"
 
@@ -488,15 +404,9 @@ msgstr "Εισάγετε όνομα χρήστη και κωδικό πρόσβ
 msgid "{errors:report_explain}"
 msgstr "Περιγράψτε τις ενέργειές σας όταν συνέβη το σφάλμα..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Διακεκριμένο όνομα (DN) διαχειριστή"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Σφάλμα κατά την πρόσβαση στη διεπαφή AssertionConsumerService"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Ψευδώνυμο χρήστη"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Κατά την πρόσβασή σας στη διεπαφή SingleLogoutService παραλείψατε να "
@@ -504,9 +414,6 @@ msgstr ""
 " Σημειώστε ότι αυτό το τελικό σημείο (endpoint) δεν προορίζεται να είναι "
 "άμεσα προσβάσιμο."
 
-msgid "{attributes:attribute_street}"
-msgstr "Οδός"
-
 msgid "{login:organization}"
 msgstr "Οργανισμός"
 
@@ -551,9 +458,6 @@ msgstr "Επιλογή οικείου φορέα"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Περιττές επιλογές στο αρχείο ρυθμίσεων"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Επισημασμένα URI"
-
 msgid "{errors:report_email}"
 msgstr "Email:"
 
@@ -569,9 +473,6 @@ msgstr ""
 "έγκυρη με αποτέλεσμα να μην είναι δυνατή η μετάβαση σε κάποιον πόρο του "
 "παρόχου υπηρεσιών0."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Επίσημο όνομα"
-
 msgid "{status:header_diagnostics}"
 msgstr "Διαγνωστικά SimpleSAMLphp"
 
@@ -582,9 +483,6 @@ msgstr ""
 "διαρκεί έως ότου λήξει, καθώς και όλες τις πληροφορίες που συνδέονται με "
 "τη συνεδρία σας."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Όνομα περιοχής (domain) οικείου οργανισμού"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Η σελίδα δεν βρέθηκε"
 
@@ -605,33 +503,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Μη έγκυρο πιστοποιητικό"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Διακεκριμένο όνομα (DN) οικείας οργανωτικής μονάδας"
-
 msgid "{general:remember}"
 msgstr "Να θυμάσαι την επιλογή μου"
 
 msgid "{disco:selectidp}"
 msgstr "Επιλογή οικείου φορέα"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Ταχυδρομική θυρίδα"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
-
 msgid "{login:help_desk_email}"
 msgstr "Αποστολή email στην υπηρεσία αρωγής χρηστών"
 
 msgid "{login:help_desk_link}"
 msgstr "Σελίδα υπηρεσίας αρωγής χρηστών"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Συμμετοχή σε ομάδες"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Αναγνωριστικό χρήστη"
-
 msgid "{login:remember_me}"
 msgstr "Να με θυμάσαι"
 
@@ -655,12 +538,6 @@ msgstr "Να θυμάσαι την επιλογή μού"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Πάροχος Υπηρεσιών SAML 2.0 (Φιλοξενούμενος)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Τοποθεσία"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Επίπεδο αξιοπιστίας ταυτοποίησης"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Σε μορφή απλού αρχείου SimpleSAMLphp - μπορείτε να στείλετε τα "
@@ -712,9 +589,6 @@ msgstr "Πάροχος Ταυτότητας ADFS (Φιλοξενούμενος)"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Άγνωστο πιστοποιητικό"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Σφάλμα LDAP"
 
@@ -733,21 +607,12 @@ msgstr ""
 "εσφαλμένη ρύθμιση του SimpleSAMLphp. Επικοινωνήστε με τον διαχειριστή "
 "αυτής της υπηρεσίας συμπεριλαμβάνοντας το παραπάνω μήνυμα σφάλματος."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Κινητό τηλέφωνο"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "Μεταδεδομένα Παρόχου Ταυτότητας ADFS"
 
-msgid "{attributes:attribute_edupersonorcid}"
-msgstr "Αναγνωριστικά ερευνητή ORCID"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Πάροχος Ταυτότητας Shib 1.3 (Φιλοξενούμενος)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Προτιμώμενη γλώσσα"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Παρουσιάστηκε σφάλμα λόγω μη έγκυρου πιστοποιητικού."
 
@@ -762,15 +627,6 @@ msgstr "Τα παρακάτω προαιρετικά πεδία δεν βρέθ
 msgid "{logout:logout_only}"
 msgstr "Όχι, μόνο από την υπηρεσία %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Όνομα οργανισμού"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Διακεκριμένο όνομα (DN) κύριας οργανωτικής μονάδας"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Αριθμός ταυτότητας"
-
 msgid "{login:next}"
 msgstr "Επόμενο"
 
@@ -788,9 +644,6 @@ msgstr "Η σελίδα που ζητήσατε στη διεύθυνση %URL%
 msgid "{errors:title_NOCERT}"
 msgstr "Δεν υπάρχει πιστοποιητικό"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Κρυπτογραφημένος κωδικός"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Σφάλμα αποσύνδεσης"
 
@@ -810,12 +663,6 @@ msgstr ""
 "εσάς. Μπορείτε να τα στείλετε σε οντότητες που εμπιστεύεστε προκειμένου "
 "να δημιουργήσετε ομοσπονδία."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Απόρρητα προσωπικά στοιχεία"
-
-msgid "{status:header_wsfed}"
-msgstr "Δοκιμαστικός Παροχέας Υπηρεσιών WS-Fed"
-
 msgid "{admin:metadata_cert}"
 msgstr "Πιστοποιητικά"
 
@@ -825,18 +672,12 @@ msgstr ""
 "περιήγησης ιστού που χρησιμοποιείτε δεν είναι έγκυρο ή δεν ήταν δυνατή η "
 "ανάγνωσή του."
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Επίσημη επωνυμία οικείου οργανισμού"
-
 msgid "{status:header_shib}"
 msgstr "Δοκιμαστικός Παροχέας Υπηρεσιών Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Ανάλυση"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Αριθμός οικείου οργανισμού"
-
 msgid "Person's principal name at home organization"
 msgstr "Αναγνωριστικό χρήστη στον οικείο οργανισμό"
 
@@ -1185,8 +1026,8 @@ msgstr ""
 "αυτής της υπηρεσίας συμπεριλαμβάνοντας το παραπάνω μήνυμα σφάλματος."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Απομένουν %SECONDS% δευτερόλεπτα μέχρι τη λήξη της συνεδρίας σας."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Απομένουν %remaining% δευτερόλεπτα μέχρι τη λήξη της συνεδρίας σας."
 
 msgid "Domain component (DC)"
 msgstr "Συστατικό Τομέα (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..87987ba8ba
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/attributes.po
@@ -0,0 +1,1862 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+msgid "cn"
+msgstr "Common name"
+
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Common name"
+
+msgid "urn:oid:2.5.4.3"
+msgstr "Common name"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+msgid "dc"
+msgstr "Domain component (DC)"
+
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domain component (DC)"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domain component (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+msgid "displayName"
+msgstr "Display name"
+
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Display name"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Display name"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+msgid "eduOrgHomePageURI"
+msgstr "Organizational homepage"
+
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organizational homepage"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organizational homepage"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+msgid "eduOrgLegalName"
+msgstr "Organization's legal name"
+
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organization's legal name"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organization's legal name"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+msgid "eduPersonAffiliation"
+msgstr "Affiliation"
+
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Affiliation"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Affiliation"
+
+msgid "eduPersonAssurance"
+msgstr "Identity assurance profile"
+
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identity assurance profile"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identity assurance profile"
+
+msgid "eduPersonEntitlement"
+msgstr "Entitlement regarding the service"
+
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Entitlement regarding the service"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Entitlement regarding the service"
+
+msgid "eduPersonNickname"
+msgstr "Nickname"
+
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Nickname"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Nickname"
+
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) of person's home organization"
+
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) of person's home organization"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) of person's home organization"
+
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primary affiliation"
+
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primary affiliation"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primary affiliation"
+
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) of person's primary Organizational Unit"
+
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) of person's primary Organizational Unit"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Distinguished name (DN) of person's primary Organizational Unit"
+
+msgid "eduPersonPrincipalName"
+msgstr "Person's principal name at home organization"
+
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Person's principal name at home organization"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Person's principal name at home organization"
+
+msgid "eduPersonScopedAffiliation"
+msgstr "Affiliation at home organization"
+
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Affiliation at home organization"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Affiliation at home organization"
+
+msgid "eduPersonTargetedID"
+msgstr "Persistent pseudonymous ID"
+
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistent pseudonymous ID"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistent pseudonymous ID"
+
+msgid "eduPersonUniqueId"
+msgstr "Person's non-reassignable, persistent pseudonymous ID at home organization"
+
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "Person's non-reassignable, persistent pseudonymous ID at home organization"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "Person's non-reassignable, persistent pseudonymous ID at home organization"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+msgid "facsimileTelephoneNumber"
+msgstr "Fax number"
+
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax number"
+
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax number"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+msgid "givenName"
+msgstr "Given name"
+
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Given name"
+
+msgid "urn:oid:2.5.4.42"
+msgstr "Given name"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+msgid "homePhone"
+msgstr "Home telephone"
+
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Home telephone"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Home telephone"
+
+msgid "homePostalAddress"
+msgstr "Home postal address"
+
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Home postal address"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Home postal address"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+msgid "jpegPhoto"
+msgstr "JPEG Photo"
+
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG Photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG Photo"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+msgid "l"
+msgstr "Locality"
+
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Locality"
+
+msgid "urn:oid:2.5.4.7"
+msgstr "Locality"
+
+msgid "labeledURI"
+msgstr "Labeled URI"
+
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Labeled URI"
+
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Labeled URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+msgid "mail"
+msgstr "Mail"
+
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Mail"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+msgid "manager"
+msgstr "Manager"
+
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+msgid "mobile"
+msgstr "Mobile"
+
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobile"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobile"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+msgid "norEduOrgNIN"
+msgstr "Organizational number"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organizational number"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organizational number"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+msgid "norEduPersonBirthDate"
+msgstr "Date of birth"
+
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Date of birth"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Date of birth"
+
+msgid "norEduPersonLIN"
+msgstr "Local identity number"
+
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Local identity number"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Local identity number"
+
+msgid "norEduPersonNIN"
+msgstr "Identity number assigned by public authorities"
+
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Identity number assigned by public authorities"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Identity number assigned by public authorities"
+
+msgid "o"
+msgstr "Organization name"
+
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organization name"
+
+msgid "urn:oid:2.5.4.10"
+msgstr "Organization name"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizational unit"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+msgid "ou"
+msgstr "Organizational unit"
+
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizational unit"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+msgid "pairwise-id"
+msgstr "Service-specific pseudonymous ID at home organization"
+
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "Service-specific pseudonymous ID at home organization"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+msgid "postOfficeBox"
+msgstr "Post office box"
+
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Post office box"
+
+msgid "urn:oid:2.5.4.18"
+msgstr "Post office box"
+
+msgid "postalAddress"
+msgstr "Postal address"
+
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Postal address"
+
+msgid "urn:oid:2.5.4.16"
+msgstr "Postal address"
+
+msgid "postalCode"
+msgstr "Postal code"
+
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postal code"
+
+msgid "urn:oid:2.5.4.17"
+msgstr "Postal code"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+msgid "preferredLanguage"
+msgstr "Preferred language"
+
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Preferred language"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Preferred language"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+msgid "schacHomeOrganization"
+msgstr "Home organization domain name"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Home organization domain name"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Home organization domain name"
+
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Home organization domain name"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+msgid "schacUserPrivateAttribute"
+msgstr "Private information elements"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Private information elements"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Private information elements"
+
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Private information elements"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+msgid "sn"
+msgstr "Surname"
+
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Surname"
+
+msgid "urn:oid:2.5.4.4"
+msgstr "Surname"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+msgid "street"
+msgstr "Street"
+
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Street"
+
+msgid "urn:oid:2.5.4.9"
+msgstr "Street"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+msgid "subject-id"
+msgstr "Pseudonymous ID at home organization"
+
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "Pseudonymous ID at home organization"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+msgid "telephoneNumber"
+msgstr "Telephone number"
+
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telephone number"
+
+msgid "urn:oid:2.5.4.20"
+msgstr "Telephone number"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+msgid "title"
+msgstr "Title"
+
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Title"
+
+msgid "urn:oid:2.5.4.12"
+msgstr "Title"
+
+msgid "uid"
+msgstr "User ID"
+
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "User ID"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "User ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+msgid "userPassword"
+msgstr "User's password hash"
+
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "User's password hash"
+
+msgid "urn:oid:2.5.4.35"
+msgstr "User's password hash"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+msgid "facebook_cn"
+msgstr "Common name"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+msgid "facebook.name"
+msgstr "Display name"
+
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Display name"
+
+msgid "openid.sreg.nickname"
+msgstr "Display name"
+
+msgid "http://axschema.org/namePerson"
+msgstr "Display name"
+
+msgid "openid.sreg.fullname"
+msgstr "Display name"
+
+msgid "twitter.name"
+msgstr "Display name"
+
+msgid "windowslive.displayName"
+msgstr "Display name"
+
+msgid "facebook_user"
+msgstr "Person's principal name at home organization"
+
+msgid "linkedin_user"
+msgstr "Person's principal name at home organization"
+
+msgid "twitter_screen_n_realm"
+msgstr "Person's principal name at home organization"
+
+msgid "windowslive_user"
+msgstr "Person's principal name at home organization"
+
+msgid "windowslive.userPrincipalName"
+msgstr "Person's principal name at home organization"
+
+msgid "facebook_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+msgid "linkedin_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+msgid "twitter_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+msgid "windowslive_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax number"
+
+msgid "facebook.first_name"
+msgstr "Given name"
+
+msgid "linkedin.firstName"
+msgstr "Given name"
+
+msgid "http://axschema.org/namePerson/first"
+msgstr "Given name"
+
+msgid "windowslive.FirstName"
+msgstr "Given name"
+
+msgid "windowslive.givenName"
+msgstr "Given name"
+
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Home telephone"
+
+msgid "windowslive.Location"
+msgstr "Locality"
+
+msgid "facebook.profile_url"
+msgstr "Labeled URI"
+
+msgid "twitter.url"
+msgstr "Labeled URI"
+
+msgid "facebook.email"
+msgstr "Mail"
+
+msgid "http://axschema.org/contact/email"
+msgstr "Mail"
+
+msgid "openid.sreg.email"
+msgstr "Mail"
+
+msgid "windowslive_mail"
+msgstr "Mail"
+
+msgid "windowslive.mail"
+msgstr "Mail"
+
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobile"
+
+msgid "http://axschema.org/company/name"
+msgstr "Organization name"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postal code"
+
+msgid "openid.sreg.postcode"
+msgstr "Postal code"
+
+msgid "facebook.locale"
+msgstr "Preferred language"
+
+msgid "http://axschema.org/pref/language"
+msgstr "Preferred language"
+
+msgid "openid.sreg.language"
+msgstr "Preferred language"
+
+msgid "twitter.lang"
+msgstr "Preferred language"
+
+msgid "windowslive.preferredLanguage"
+msgstr "Preferred language"
+
+msgid "facebook.last_name"
+msgstr "Surname"
+
+msgid "linkedin.lastName"
+msgstr "Surname"
+
+msgid "http://axschema.org/namePerson/last"
+msgstr "Surname"
+
+msgid "windowslive.LastName"
+msgstr "Surname"
+
+msgid "windowslive.surname"
+msgstr "Surname"
+
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telephone number"
+
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telephone number"
+
+msgid "linkedin.headline"
+msgstr "Title"
+
+msgid "http://axschema.org/company/title"
+msgstr "Title"
+
+msgid "facebook.username"
+msgstr "User ID"
+
+msgid "linkedin.id"
+msgstr "User ID"
+
+msgid "twitter.screen_name"
+msgstr "User ID"
+
+msgid "windowslive_uid"
+msgstr "User ID"
+
+msgid "windowslive.id"
+msgstr "User ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/messages.po
index be62029f06..eac57388e8 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/en/LC_MESSAGES/messages.po
@@ -56,12 +56,6 @@ msgstr "Error loading metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Metadata parser"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Entitlement regarding the service"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG Photo"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "No errors found."
 
@@ -144,9 +138,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Go back to SimpleSAMLphp installation page"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (Remote)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp error"
 
@@ -164,18 +155,12 @@ msgstr ""
 " are the administrator of this service, you should make sure your "
 "metadata configuration is correctly setup."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) of person's home organization"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Bad request received"
 
 msgid "{status:sessionsize}"
 msgstr "Session size: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Postal address"
-
 msgid "{logout:title}"
 msgstr "Logged out"
 
@@ -203,24 +188,12 @@ msgstr "On hold"
 msgid "{admin:cfg_check_header}"
 msgstr "Configuration check"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Affiliation at home organization"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Surname"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Submit message"
 
 msgid "{status:logout}"
 msgstr "Logout"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organization name"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telephone number"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "The parameters sent to the discovery service were not according to "
@@ -229,9 +202,6 @@ msgstr ""
 msgid "{errors:title_ARSPARAMS}"
 msgstr "No SAML message provided"
 
-msgid "{attributes:attribute_mail}"
-msgstr "Mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "An error occurred when trying to create the SAML request."
 
@@ -244,9 +214,6 @@ msgstr "Return to service"
 msgid "{errors:title_MEMCACHEDOWN}"
 msgstr "Cannot retrieve session data"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Display name"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "You can <a href=\"%METAURL%\">get the metadata xml on a dedicated URL</a>:"
 
@@ -258,9 +225,6 @@ msgstr ""
 "You can turn off debug mode in the global SimpleSAMLphp configuration "
 "file <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Home postal address"
-
 msgid "{disco:select}"
 msgstr "Select"
 
@@ -290,9 +254,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Do you want to logout from all the services above?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Title"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "No access"
 
@@ -307,9 +268,6 @@ msgstr "No RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "State information lost, and no way to restart the request"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Identity number assigned by public authorities"
-
 msgid "{login:password}"
 msgstr "Password"
 
@@ -336,27 +294,15 @@ msgstr "Error processing the Logout Request"
 msgid "{admin:metaover_errorentry}"
 msgstr "Error in this metadata entry"
 
-msgid "{attributes:attribute_edupersonuniqueid}"
-msgstr "Person's non-reassignable, persistent pseudonymous ID at home organization"
-
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Affiliation"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata not found"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Given name"
-
 msgid "{login:contact_info}"
 msgstr "Contact information:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Unhandled exception"
 
-msgid "{status:validfor}"
-msgstr "Your session is valid for %SECONDS% seconds from now."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo Example"
 
@@ -396,33 +342,21 @@ msgstr "Select configuration file to check:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Authentication failed: the certificate your browser sent is unknown"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organizational homepage"
-
 msgid "{logout:logging_out_from}"
 msgstr "Logging out of the following services:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "You are now successfully logged out from %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Hosted)"
-
 msgid "{errors:errorreport_text}"
 msgstr "The error report has been sent to the administrators."
 
 msgid "{status:subject_header}"
 msgstr "SAML Subject"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Date of birth"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "An error occurred when trying to process the Logout Request."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistent pseudonymous ID"
-
 msgid "{logout:success}"
 msgstr "You have successfully logged out from all services listed above."
 
@@ -432,12 +366,6 @@ msgstr "Notices"
 msgid "{errors:descr_USERABORTED}"
 msgstr "The authentication was aborted by the user"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primary affiliation"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postal code"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Error when communicating with the CAS server."
 
@@ -450,9 +378,6 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Converted metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Common name"
-
 msgid "{logout:completed}"
 msgstr "Completed"
 
@@ -461,18 +386,9 @@ msgstr ""
 "The password in the configuration (auth.adminpassword) is not changed "
 "from the default value. Please edit the configuration file."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizational unit"
-
 msgid "{general:service_provider}"
 msgstr "Service Provider"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Home telephone"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain component (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "There is an error in the request to this page. The reason was: %REASON%"
 
@@ -491,24 +407,15 @@ msgstr "Enter your username and password"
 msgid "{errors:report_explain}"
 msgstr "Explain what you did when this error occurred..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "No SAML response provided"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Nickname"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "You accessed the SingleLogoutService interface, but did not provide a "
 "SAML LogoutRequest or LogoutResponse. Please note that this endpoint is "
 "not intended to be accessed directly."
 
-msgid "{attributes:attribute_street}"
-msgstr "Street"
-
 msgid "{login:organization}"
 msgstr "Organization"
 
@@ -547,9 +454,6 @@ msgstr "Choose home organization"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Superfluous options in config file"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Labeled URI"
-
 msgid "{errors:report_email}"
 msgstr "E-mail address:"
 
@@ -564,9 +468,6 @@ msgstr ""
 "The initiator of this request did not provide a RelayState parameter "
 "indicating where to go next."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Legal name"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp Diagnostics"
 
@@ -576,9 +477,6 @@ msgstr ""
 "session is timed out, how long it lasts until it times out and all the "
 "attributes that are attached to your session."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Home organization domain name"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Page not found"
 
@@ -599,39 +497,24 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Invalid certificate"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) of the person's home organizational unit"
-
 msgid "{general:remember}"
 msgstr "Remember"
 
 msgid "{disco:selectidp}"
 msgstr "Select your identity provider"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Post office box"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Person's principal name at home organization"
-
 msgid "{login:help_desk_email}"
 msgstr "Send e-mail to help desk"
 
 msgid "{login:help_desk_link}"
 msgstr "Help desk homepage"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Group membership"
-
 msgid "{errors:descr_ARSPARAMS}"
 msgstr ""
 "You accessed the Artifact Resolution Service interface, but did not "
 "provide a SAML ArtifactResolve message. Please note that this endpoint is"
 " not intended to be accessed directly."
 
-msgid "{attributes:attribute_uid}"
-msgstr "User ID"
-
 msgid "{login:remember_me}"
 msgstr "Remember me"
 
@@ -655,12 +538,6 @@ msgstr "Remember my choice"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Hosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Locality"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identity assurance profile"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "In SimpleSAMLphp flat file format - use this if you are using a "
@@ -711,9 +588,6 @@ msgstr "ADFS Identity Provider (Hosted)"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Unknown certificate"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax number"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP Error"
 
@@ -731,21 +605,12 @@ msgstr ""
 "misconfiguration of SimpleSAMLphp. Contact the administrator of this "
 "login service, and send them the error message above."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobile"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "ADFS IdP Metadata"
 
-msgid "{attributes:attribute_edupersonorcid}"
-msgstr "ORCID researcher identifiers"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Hosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Preferred language"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "You did not present a valid certificate."
 
@@ -760,15 +625,6 @@ msgstr "The following optional fields was not found"
 msgid "{logout:logout_only}"
 msgstr "No, only %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organization name"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Distinguished name (DN) of person's primary Organizational Unit"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Local identity number"
-
 msgid "{login:next}"
 msgstr "Next"
 
@@ -792,9 +648,6 @@ msgstr "The given page was not found. The reason was: %REASON%  The URL was: %UR
 msgid "{errors:title_NOCERT}"
 msgstr "No certificate"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "User's password hash"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Logout information lost"
 
@@ -815,12 +668,6 @@ msgstr ""
 "send this metadata document to trusted partners to setup a trusted "
 "federation."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Private information elements"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo Example"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certificates"
 
@@ -829,18 +676,12 @@ msgstr ""
 "Authentication failed: the certificate your browser sent is invalid or "
 "cannot be read"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organization's legal name"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parse"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organizational number"
-
 msgid "Hello, Untranslated World!"
 msgstr "Hello, Translated World!"
 
@@ -1207,8 +1048,8 @@ msgstr ""
 "login service, and send them the error message above."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Your session is valid for %SECONDS% seconds from now."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Your session is valid for %remaining% seconds from now."
 
 msgid "Domain component (DC)"
 msgstr "Domain component (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..b90edbaf59
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nombre común (CN)"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nombre común (CN)"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nombre común (CN)"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Componente de dominio (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Componente de dominio (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Componente de dominio (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nombre para mostrar"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nombre para mostrar"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nombre para mostrar"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Página de su organización"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Página de su organización"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Página de su organización"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nombre legal de su organización"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nombre legal de su organización"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nombre legal de su organización"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Afiliación"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Afiliación"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Afiliación"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Identificador del perfil de garantía"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identificador del perfil de garantía"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identificador del perfil de garantía"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Derecho relativo al servicio"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Derecho relativo al servicio"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Derecho relativo al servicio"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Alias"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Alias"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Alias"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "DN de su organización origen"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "DN de su organización origen"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "DN de su organización origen"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "DN de la Unidad Organizativa (OU) de su organización origen"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "DN de la Unidad Organizativa (OU) de su organización origen"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "DN de la Unidad Organizativa (OU) de su organización origen"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Afiliación primaria"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Afiliación primaria"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Afiliación primaria"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) de la entrada del directorio que representa el identificador primario de la Unidad Organizativa."
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) de la entrada del directorio que representa el identificador primario de la Unidad Organizativa."
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Distinguished name (DN) de la entrada del directorio que representa el identificador primario de la Unidad Organizativa."
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Identificador único de la persona en su organización de origen"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Identificador único de la persona en su organización de origen"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Identificador único de la persona en su organización de origen"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Grupo"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Grupo"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Grupo"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "ID anónimo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "ID anónimo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "ID anónimo persistente"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Número de fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Número de fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Número de fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Nombre"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Nombre"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Nombre"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Teléfono de su domicilio"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Teléfono de su domicilio"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Teléfono de su domicilio"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Dirección de su domicilio"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Dirección de su domicilio"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Dirección de su domicilio"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Fotografía en JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Fotografía en JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Fotografía en JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Localidad"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Localidad"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Localidad"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI etiquetado"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI etiquetado"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI etiquetado"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Correo electrónico"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Correo electrónico"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Correo electrónico"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Gestor"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Gestor"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Gestor"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Teléfono móvil"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Teléfono móvil"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Teléfono móvil"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Número de la organización"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Número de la organización"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Número de la organización"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Fecha de nacimiento"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Fecha de nacimiento"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Fecha de nacimiento"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Número de identificación local"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Número de identificación local"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Número de identificación local"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Número de la Seguridad Social"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Número de la Seguridad Social"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Número de la Seguridad Social"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nombre de la organización"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nombre de la organización"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nombre de la organización"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Unidad organizativa"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Unidad organizativa"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Unidad organizativa"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "Identificador opaco en su organización específico para este servicio"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "Identificador opaco en su organización específico para este servicio"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "Fotografía"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "Fotografía"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "Fotografía"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Código postal"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Código postal"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Código postal"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Dirección postal"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Dirección postal"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Dirección postal"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Código postal"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Código postal"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Código postal"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Idioma preferido"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Idioma preferido"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Idioma preferido"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "Pseudónimo"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "Pseudónimo"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "Pseudónimo"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "Nacionalidad"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "Nacionalidad"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "Nacionalidad"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "Nacionalidad"
+
+msgid "schacCountryOfResidence"
+msgstr "País de residencia"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "País de residencia"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "País de residencia"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "País de residencia"
+
+msgid "schacDateOfBirth"
+msgstr "Fecha de nacimiento"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "Fecha de nacimiento"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "Fecha de nacimiento"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "Fecha de nacimiento"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "Género"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "Género"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "Género"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "Género"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Identificador único de la organización de origen"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Identificador único de la organización de origen"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Identificador único de la organización de origen"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Identificador único de la organización de origen"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "Lengua materna"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "Lengua materna"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "Lengua materna"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "Lengua materna"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "Lugar de nacimiento"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "Lugar de nacimiento"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "Lugar de nacimiento"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "Lugar de nacimiento"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "Primer apellido"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "Primer apellido"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "Primer apellido"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "Primer apellido"
+
+msgid "schacSn2"
+msgstr "Segundo apellido"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "Segundo apellido"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "Segundo apellido"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "Segundo apellido"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Elementos de información privada"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Elementos de información privada"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Elementos de información privada"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Elementos de información privada"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "Año de nacimiento"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "Año de nacimiento"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "Año de nacimiento"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "Año de nacimiento"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Apellidos"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Apellidos"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Apellidos"
+
+msgid "st"
+msgstr "Calle"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "Calle"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "Calle"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Calle"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Calle"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Calle"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "Identificador opaco en su organización"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "Identificador opaco en su organización"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Número de teléfono"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Número de teléfono"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Número de teléfono"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Tratamiento"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Tratamiento"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Tratamiento"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identificador de usuario"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identificador de usuario"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identificador de usuario"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Contraseña codificada"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Contraseña codificada"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Contraseña codificada"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nombre común (CN)"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nombre en Facebook"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nombre para mostrar"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Alias"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nombre para mostrar"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nombre para mostrar"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nombre de usuario en Twitter"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nombre de usuario en Windows Live"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Nombre de usuario de Facebook"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Nombre de usuario de LinkedIn"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Identificador único de la persona en su organización de origen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Nombre de usuario de Windows Live"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Identificador único de la persona en su organización de origen"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "ID anónimo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "ID anónimo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "ID anónimo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "ID anónimo persistente"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Número de fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Nombre en Facebook"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Nombre en LinkedIn"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Nombre"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Nombre en Windows Live"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Nombre en Windows Live"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Teléfono de su domicilio"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Localidad"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Perfil de Facebook"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Perfil de Twitter"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Correo electrónico asociado con Facebook"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Correo electrónico"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Correo electrónico"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Correo electrónico de Windows Live"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Correo electrónico de Windows Live"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Teléfono móvil"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nombre de la organización"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Código postal"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Código postal"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Idioma preferido en Facebook"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Idioma preferido"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Idioma preferido"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Idioma preferido en Twitter"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Idioma preferido en Windows Live"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Apellidos en Facebook"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Apellidos en LinkedIn"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Apellidos"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Apellidos en Windows Live"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Apellidos en Windows Live"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Número de teléfono"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Número de teléfono"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Encabezado de LinkedIn"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Tratamiento"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identificador de usuario"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identificador de usuario de LinkedIn"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identificador de usuario de Twitter"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identificador de usuario de Windows Live"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identificador de Windows Live"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/messages.po
index c68754ea35..c6eb2c1f37 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/es/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "Error al cargar los metadatos"
 msgid "{admin:metaconv_title}"
 msgstr "Analizar metadatos"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Derecho relativo al servicio"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Fotografía en JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "No se han encontrado errores"
 
@@ -139,9 +133,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Volver a la página de instalación de SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Proveedor de Identidad WS-Federation (remoto)"
-
 msgid "{errors:error_header}"
 msgstr "Error de SimpleSAMLphp"
 
@@ -160,18 +151,12 @@ msgstr ""
 "cerci&oacute;rese de que la configuraci&oacute;n de los metadatos es "
 "correcta."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "DN de su organización origen"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Recibida una solicitud incorrecta"
 
 msgid "{status:sessionsize}"
 msgstr "Tamaño de la sesión: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Dirección postal"
-
 msgid "{logout:title}"
 msgstr "Desconectado"
 
@@ -199,32 +184,17 @@ msgstr "En espera"
 msgid "{admin:cfg_check_header}"
 msgstr "Comprobar configuración"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Grupo"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Apellidos"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Enviar mensaje"
 
 msgid "{status:logout}"
 msgstr "Salir"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Nombre de la organización"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Número de teléfono"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Los parametros enviados al servicio de descubrimiento no se ajustan a la "
 "especificaci&oacute;n."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Correo electrónico"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Se ha producido un error al tratar de crear la petici&oacute;n SAML."
 
@@ -234,9 +204,6 @@ msgstr "Datos opcionales"
 msgid "{logout:return}"
 msgstr "Volver al servicio"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nombre para mostrar"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Puede  <a href=\"%METAURL%\">obtener una URL con los metadatos xml</a>:"
 
@@ -248,9 +215,6 @@ msgstr ""
 "Puede desactivar el modo de depuración en el fichero de configuración "
 "global de SimpleSAMLphp <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Dirección de su domicilio"
-
 msgid "{disco:select}"
 msgstr "Seleccione"
 
@@ -280,9 +244,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "¿Desea desconectarse de todos los servicios que se muestran más arriba?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Tratamiento"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Acceso no definido"
 
@@ -297,9 +258,6 @@ msgstr "RelayState no definido"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Información de estado perdida y no hay manera de restablecer la petición"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Número de la Seguridad Social"
-
 msgid "{login:password}"
 msgstr "Clave de acceso"
 
@@ -326,24 +284,15 @@ msgstr "Error al procesar la solicitud de cierre de sesi&oacute;n"
 msgid "{admin:metaover_errorentry}"
 msgstr "Error en los metadatos de la entrada"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Afiliación"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadatos no econtrados"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Nombre"
-
 msgid "{login:contact_info}"
 msgstr "Información de contacto:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Excepción no controlada"
 
-msgid "{status:validfor}"
-msgstr "Su sesión será valida durante %SECONDS% segundos."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Ejemplo de SAML 2.0 SP"
 
@@ -382,35 +331,23 @@ msgstr ""
 "Fallo de autenticación:el certificado enviado por su navegador es "
 "desconocido"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Página de su organización"
-
 msgid "{logout:logging_out_from}"
 msgstr "Desconectarse de los siguientes servicios:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Ha sido desconectado correctamente de %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Proveedor de Servicios WS-Federation (local)"
-
 msgid "{errors:errorreport_text}"
 msgstr "El informe de error ha sido enviado a los administradores."
 
 msgid "{status:subject_header}"
 msgstr "Identificador SAML"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Fecha de nacimiento"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr ""
 "Se ha producido un error al tratar de procesar la solicitud de cierre de "
 "sesi&oacute;n."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "ID anónimo persistente"
-
 msgid "{logout:success}"
 msgstr ""
 "Ha sido correctamente desconectado de todo los servicios listados a "
@@ -422,12 +359,6 @@ msgstr "Avisos"
 msgid "{errors:descr_USERABORTED}"
 msgstr "La Autenticacion fue abortada por el usuario"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Afiliación primaria"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Código postal"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Error al tratar de comunicar con el servidor CAS"
 
@@ -440,9 +371,6 @@ msgstr "Metadatos SP SAML 2.0"
 msgid "{admin:metaconv_converted}"
 msgstr "Metadatos convertidos"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nombre común (CN)"
-
 msgid "{logout:completed}"
 msgstr "Terminado"
 
@@ -451,18 +379,9 @@ msgstr ""
 "La clave de acceso del fichero de configuración (auth.adminpassword) no "
 "ha sido cambiada de su valor por defecto. Por favor, edite dicho fichero"
 
-msgid "{attributes:attribute_ou}"
-msgstr "Unidad organizativa"
-
 msgid "{general:service_provider}"
 msgstr "Proveedor de servicio"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Teléfono de su domicilio"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Componente de dominio (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Existe un error en la solicitud de esta página. La razón es: %REASON%"
 
@@ -481,23 +400,14 @@ msgstr "Indique su nombre de usuario y clave de acceso"
 msgid "{errors:report_explain}"
 msgstr "Explique lo que ha hecho para llegar a este error..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Gestor"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Falta la respuesta SAML"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Alias"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Usted accedió a la interfaz SingleLogoutService pero no incluyó un "
 "mensaje SAML LogoutRequest o LogoutResponse"
 
-msgid "{attributes:attribute_street}"
-msgstr "Calle"
-
 msgid "{login:organization}"
 msgstr "Organización"
 
@@ -539,9 +449,6 @@ msgstr "Seleccionar la organización origen"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Opciones sobrantes en el fichero de configuración"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI etiquetado"
-
 msgid "{errors:report_email}"
 msgstr "Correo-e:"
 
@@ -556,9 +463,6 @@ msgstr ""
 "El iniciador de esta solicitud no proporcion&oacute; el par&aacute;metro "
 "RelayState que indica donde ir a continuaci&oacute;n"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Nombre legal"
-
 msgid "{status:header_diagnostics}"
 msgstr "Diagnóstico SimpleSAMLphp"
 
@@ -568,9 +472,6 @@ msgstr ""
 "si su sesión ha caducado, cuanto queda hasta que lo haga y todos los "
 "atributos existentes en su sesión."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Identificador único de la organización de origen"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Página no encontrada"
 
@@ -591,33 +492,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certificado no válido"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "DN de la Unidad Organizativa (OU) de su organización origen"
-
 msgid "{general:remember}"
 msgstr "Recordar el consentimiento"
 
 msgid "{disco:selectidp}"
 msgstr "Seleccione su proveedor de identidad"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Código postal"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Identificador único de la persona en su organización de origen"
-
 msgid "{login:help_desk_email}"
 msgstr "Enviar correo electrónico al soporte técnico"
 
 msgid "{login:help_desk_link}"
 msgstr "Página de soporte técnico"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Membresía a grupos"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Identificador de usuario"
-
 msgid "{login:remember_me}"
 msgstr "Recordarme"
 
@@ -641,12 +527,6 @@ msgstr "Recordar mi elección"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Proveedor de Servicio SAML 2.0 (local)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Localidad"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identificador del perfil de garantía"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "En un fichero de formato SimpleSAMLphp - utilice esta opción si está "
@@ -697,9 +577,6 @@ msgstr "Proveedor de Identidad ADFS (local)"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Certificado desconocido"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Número de fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Error de LDAP"
 
@@ -719,18 +596,12 @@ msgstr ""
 "administrador de este servicio de conexión y envíele el mensaje de error "
 "anterior."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Teléfono móvil"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "Metadatos IdP ADFS"
 
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Proveedor de Identidad Shib 1.3 (local)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Idioma preferido"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "No se ha podido validar el certificado recibido"
 
@@ -745,17 +616,6 @@ msgstr "Los siguientes datos opcionales no se han encontrado"
 msgid "{logout:logout_only}"
 msgstr "No, sólo %SPS"
 
-msgid "{attributes:attribute_o}"
-msgstr "Nombre de la organización"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr ""
-"Distinguished name (DN) de la entrada del directorio que representa el "
-"identificador primario de la Unidad Organizativa."
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Número de identificación local"
-
 msgid "{login:next}"
 msgstr "Siguiente"
 
@@ -775,9 +635,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "No certificado"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Clave o contraseña y método de encriptación utilizado"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Se perdió la información para cerrar la sesión"
 
@@ -793,12 +650,6 @@ msgstr ""
 " documento de metadatos a sus socios de confianza para configurar una "
 "federación."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Elementos de información privada"
-
-msgid "{status:header_wsfed}"
-msgstr "Ejemplo WS-Fed SP"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certificados"
 
@@ -807,18 +658,12 @@ msgstr ""
 "Fallo de autenticación: El certificado enviado por su navegador es "
 "inválido o no puede ser leído"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nombre legal de su organización"
-
 msgid "{status:header_shib}"
 msgstr "Ejemplo Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analizar"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Número de la organización"
-
 msgid "Hello, Untranslated World!"
 msgstr "Hola, mundo traducido!"
 
@@ -1176,8 +1021,8 @@ msgstr ""
 "anterior."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Su sesión será valida durante %SECONDS% segundos."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Su sesión será valida durante %remaining% segundos."
 
 msgid "Domain component (DC)"
 msgstr "Componente de dominio (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..262432c553
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Üldnimi"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Üldnimi"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Üldnimi"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domeeni komponent (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domeeni komponent (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domeeni komponent (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Kuvatav nimi"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisatsiooni koduleht"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisatsiooni koduleht"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisatsiooni koduleht"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organisatsiooni ametlik nimetus"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organisatsiooni ametlik nimetus"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organisatsiooni ametlik nimetus"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Rollid"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Rollid"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Rollid"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Identiteedi tagamise profiil"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identiteedi tagamise profiil"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identiteedi tagamise profiil"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Volitused selle teenuse suhtes"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Volitused selle teenuse suhtes"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Volitused selle teenuse suhtes"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Hüüdnimi"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Hüüdnimi"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Hüüdnimi"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Koduorganisatsiooni unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Koduorganisatsiooni unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Koduorganisatsiooni unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Koduorganisatsiooni allüksuse unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Koduorganisatsiooni allüksuse unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Koduorganisatsiooni allüksuse unikaalne nimi (DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Peamine kuuluvus"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Peamine kuuluvus"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Peamine kuuluvus"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Peamise allüksuse unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Peamise allüksuse unikaalne nimi (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Peamise allüksuse unikaalne nimi (DN)"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Rollid koduorganisatsioonis"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Rollid koduorganisatsioonis"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Rollid koduorganisatsioonis"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faksinumber"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faksinumber"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faksinumber"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Eesnimi"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Eesnimi"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Eesnimi"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Kodune telefon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Kodune telefon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Kodune telefon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Kodune postiaadress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Kodune postiaadress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Kodune postiaadress"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG-foto"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Asukoht"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Asukoht"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Asukoht"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Sildistatud URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Sildistatud URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Sildistatud URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-post"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-post"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-post"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Juhataja"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Juhataja"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Juhataja"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiil"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiil"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiil"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Registrikood"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Registrikood"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Registrikood"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Sünniaeg"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Sünniaeg"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Sünniaeg"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Kohalik isikukood"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Kohalik isikukood"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Kohalik isikukood"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Isikukood"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Isikukood"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Isikukood"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organisatsiooni nimi"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organisatsiooni nimi"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organisatsiooni nimi"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Allüksus"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Allüksus"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Allüksus"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postkast"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postkast"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postkast"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Postiaadress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Postiaadress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Postiaadress"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postiindeks"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postiindeks"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postiindeks"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Eelistatud keel"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Eelistatud keel"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Eelistatud keel"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Koduorganisatsiooni domeen"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Koduorganisatsiooni domeen"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Koduorganisatsiooni domeen"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Koduorganisatsiooni domeen"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Privaatandmete elemendid"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Privaatandmete elemendid"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Privaatandmete elemendid"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Privaatandmete elemendid"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Perekonnanimi"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Perekonnanimi"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Perekonnanimi"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Tänav"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Tänav"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Tänav"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefoninumber"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefoninumber"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefoninumber"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Tiitel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Tiitel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Tiitel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Kasutaja ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Kasutaja ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Kasutaja ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Kasutaja parooliräsi"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Kasutaja parooliräsi"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Kasutaja parooliräsi"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Üldnimi"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Kuvatav nimi"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Kuvatav nimi"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Isiku põhinimi koduasutuses"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Püsiv pseudonüümne ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faksinumber"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Eesnimi"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Eesnimi"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Eesnimi"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Eesnimi"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Eesnimi"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Kodune telefon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Asukoht"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Sildistatud URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Sildistatud URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-post"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-post"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-post"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-post"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-post"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiil"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organisatsiooni nimi"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postiindeks"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postiindeks"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Eelistatud keel"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Eelistatud keel"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Eelistatud keel"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Eelistatud keel"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Eelistatud keel"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Perekonnanimi"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Perekonnanimi"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Perekonnanimi"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Perekonnanimi"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Perekonnanimi"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefoninumber"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefoninumber"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Tiitel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Tiitel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Kasutaja ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Kasutaja ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Kasutaja ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Kasutaja ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Kasutaja ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/messages.po
index f0010796e4..c4eb2f2a5f 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/et/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "Metaandmete laadimise tõrge"
 msgid "{admin:metaconv_title}"
 msgstr "Metaandmete parsija"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Volitused selle teenuse suhtes"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG-foto"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Tõrkeid ei leitud"
 
@@ -133,9 +127,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Mine tagasi SimpleSAMLphp paigaldusleheküljele"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation identiteedipakkuja (kaug)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp tõrge"
 
@@ -153,18 +144,12 @@ msgstr ""
 "selle teenuse administraator, siis peaksid kontrollima, et metaandmete "
 "seadistused oleks korrektselt seadistatud."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Koduorganisatsiooni unikaalne nimi (DN)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Saabus halb päring"
 
 msgid "{status:sessionsize}"
 msgstr "Sessiooni suurus: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Postiaadress"
-
 msgid "{logout:title}"
 msgstr "Logis välja"
 
@@ -186,30 +171,15 @@ msgstr "Ootel"
 msgid "{admin:cfg_check_header}"
 msgstr "Seadistuste kontroll"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Rollid koduorganisatsioonis"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Perekonnanimi"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Saada teade"
 
 msgid "{status:logout}"
 msgstr "Logi välja"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organisatsiooni nimi"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefoninumber"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Tuvastusteenusele saadetud parameetrid ei vastanud nõuetele."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-post"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "SAML päringu loomisel ilmnes tõrge."
 
@@ -219,9 +189,6 @@ msgstr "Lisaväljad"
 msgid "{logout:return}"
 msgstr "Tagasi teenuse juurde"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Kuvatav nimi"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "<a href=\"%METAURL%\">Metaandmete XML-i on võimalik saada spetsiaalselt "
@@ -235,9 +202,6 @@ msgstr ""
 "Silumisrežiimi on võimalik välja lülitada SimpleSAMLphp "
 "seadistustefailist <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Kodune postiaadress"
-
 msgid "{disco:select}"
 msgstr "Vali"
 
@@ -264,9 +228,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Kas sa soovid kõigist ülal loetletud teenustest välja logida?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Tiitel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ligipääs puudub"
 
@@ -281,9 +242,6 @@ msgstr "RelayState puudub"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Olekuinfo läks kaduma ja päringut pole võimalik uuesti käivitada"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Isikukood"
-
 msgid "{login:password}"
 msgstr "Parool"
 
@@ -310,24 +268,15 @@ msgstr "Tõrge väljalogimispäringu töötlemisel"
 msgid "{admin:metaover_errorentry}"
 msgstr "Tõrge selles metaandmete kirjes"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Rollid"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metaandmeid ei leitud"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Eesnimi"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktinfo:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Käsitlemata tõrge"
 
-msgid "{status:validfor}"
-msgstr "Sinu sessioon kehtib veel %SECONDS% sekundit."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP demonäide"
 
@@ -361,30 +310,18 @@ msgstr "Vali seadistustefail, mida kontrollida:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Autentimine ei õnnestunud: brauser saatis tundmatu sertifikaadi"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisatsiooni koduleht"
-
 msgid "{logout:logging_out_from}"
 msgstr "Välja logimine järgmistest teenustest:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Sa oled nüüd edukalt välja logitud teenusest %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation teenusepakkuja (hostitud)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Tõrkeraport saadeti administraatoritele."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Sünniaeg"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Väljalogimispäringu töötlemisel tekkis tõrge"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Püsiv pseudonüümne ID"
-
 msgid "{logout:success}"
 msgstr "Sa oled kõigist ülal loetletud teenustest edukalt välja logitud."
 
@@ -394,12 +331,6 @@ msgstr "Märkused"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Autentimine katkestati kasutaja poolt"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Peamine kuuluvus"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postiindeks"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "CAS-serveriga suhtlemisel tekkis tõrge."
 
@@ -412,9 +343,6 @@ msgstr "SAML 2.0 SP metaandmed"
 msgid "{admin:metaconv_converted}"
 msgstr "Teisendatud metaandmed"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Üldnimi"
-
 msgid "{logout:completed}"
 msgstr "Lõpetatud"
 
@@ -423,18 +351,9 @@ msgstr ""
 "Seadistustes on vaikimisi parool (auth.adminpassword) muutmata. Palun "
 "muuda seadistustefaili."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Allüksus"
-
 msgid "{general:service_provider}"
 msgstr "Teenusepakkuja"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Kodune telefon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domeeni komponent (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Leheküljele esitati vigane päring. Põhjus: %REASON%"
 
@@ -453,23 +372,14 @@ msgstr "Sisesta oma kasutajatunnus ja parool"
 msgid "{errors:report_explain}"
 msgstr "Kirjelda, millega tegelesid, kui see tõrge ilmnes..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Juhataja"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAML-vastust ei pakutud"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Hüüdnimi"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Sa külastasid SingleLogoutService liidest, kui ei pakkunud SAML "
 "LogoutRequest või LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Tänav"
-
 msgid "{login:organization}"
 msgstr "Organisatsioon"
 
@@ -505,9 +415,6 @@ msgstr "Vali koduorganisatsioon"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Üleliigne seadistus seadistustefailis"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Sildistatud URI"
-
 msgid "{errors:report_email}"
 msgstr "E-posti aadress:"
 
@@ -522,9 +429,6 @@ msgstr ""
 "Selle päringu algataja ei täitnud RelayState parameetrit, mis näitab, "
 "kuhu edasi minna."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Ametlik nimi"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostika"
 
@@ -534,9 +438,6 @@ msgstr ""
 "sessioon on aegunud, kui kaua see veel kestab ja kõiki teisi sessiooniga "
 "seotud atribuute."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Koduorganisatsiooni domeen"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Lehekülge ei leitud"
 
@@ -555,30 +456,18 @@ msgstr "SAML olemi detailide vaatamiseks klõpsa SAML olemi päisel."
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Vigane sertifikaat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Koduorganisatsiooni allüksuse unikaalne nimi (DN)"
-
 msgid "{general:remember}"
 msgstr "Jäta meelde"
 
 msgid "{disco:selectidp}"
 msgstr "Vali oma identiteedipakkuja"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postkast"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Isiku põhinimi koduasutuses"
-
 msgid "{login:help_desk_email}"
 msgstr "Saada kasutajatoele e-kiri."
 
 msgid "{login:help_desk_link}"
 msgstr "Kasutajatoe koduleht"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Kasutaja ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS tõrge"
 
@@ -599,12 +488,6 @@ msgstr "Jäta valik meelde"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 teenusepakkuja (hostitud)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Asukoht"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identiteedi tagamise profiil"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "SimpleSAMLphp formaadis: kasuta seda siis, kui ka teine pool kasutab "
@@ -649,9 +532,6 @@ msgstr "Teade"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Tundmatu sertifikaat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faksinumber"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP-tõrge"
 
@@ -670,15 +550,9 @@ msgstr ""
 "valesti seadistamise tõttu. Võta ühendust selle sisselogimisteenuse "
 "administraatoriga ja saada talle ülalolev veateade."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiil"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 identiteedipakkuja (hostitud)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Eelistatud keel"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Sa ei esitanud kehtivat sertifikaati."
 
@@ -691,15 +565,6 @@ msgstr "Järgmisi lisavälju ei leitud"
 msgid "{logout:logout_only}"
 msgstr "Ei, ainult %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organisatsiooni nimi"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Peamise allüksuse unikaalne nimi (DN)"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Kohalik isikukood"
-
 msgid "{login:next}"
 msgstr "Edasi"
 
@@ -715,9 +580,6 @@ msgstr "Seda lehekülge ei leitud. Põhjus oli %REASON%. Aadress oli: %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Sertifikaat puudub"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Kasutaja parooliräsi"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Väljalogimisinfo läks kaotsi"
 
@@ -733,12 +595,6 @@ msgstr ""
 "need metaandmed usaldatavatele partneritele usaldatava föderatsiooni "
 "loomiseks."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Privaatandmete elemendid"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP demonäide"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikaadid"
 
@@ -747,18 +603,12 @@ msgstr ""
 "Autentimine ei õnnestunud: brauseri poolt saadetud sertifikaat on vigane "
 "või pole loetav"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organisatsiooni ametlik nimetus"
-
 msgid "{status:header_shib}"
 msgstr "Shibbolethi demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parsi"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Registrikood"
-
 msgid "Person's principal name at home organization"
 msgstr "Isiku põhinimi koduasutuses"
 
@@ -1088,8 +938,8 @@ msgstr ""
 "administraatoriga ja saada talle ülalolev veateade."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Sinu sessioon kehtib veel %SECONDS% sekundit."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Sinu sessioon kehtib veel %remaining% sekundit."
 
 msgid "Domain component (DC)"
 msgstr "Domeeni komponent (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..223120040d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Izen arrunta (CN)"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Izen arrunta (CN)"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Izen arrunta (CN)"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domeinuaren osagaia (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domeinuaren osagaia (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domeinuaren osagaia (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Bistaratzeko izena"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Erakundearen hasiera-orria"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Erakundearen hasiera-orria"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Erakundearen hasiera-orria"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Erakundearen izen legala"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Erakundearen izen legala"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Erakundearen izen legala"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Afiliazioa"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Afiliazioa"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Afiliazioa"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Bermearen profilaren identifikatzailea"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Bermearen profilaren identifikatzailea"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Bermearen profilaren identifikatzailea"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Zerbitzuari dagokion eskubidea"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Zerbitzuari dagokion eskubidea"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Zerbitzuari dagokion eskubidea"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Ezizena"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Ezizena"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Ezizena"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Pertsonaren jatorrizko erakundearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Pertsonaren jatorrizko erakundearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Pertsonaren jatorrizko erakundearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Pertsonaren jatorrizko erakundeko antolamendu-unitatearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Pertsonaren jatorrizko erakundeko antolamendu-unitatearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Pertsonaren jatorrizko erakundeko antolamendu-unitatearen izen osatua (DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Lehen afiliazioa"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Lehen afiliazioa"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Lehen afiliazioa"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Pertsonaren antolamendu-unitatearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Pertsonaren antolamendu-unitatearen izen osatua (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Pertsonaren antolamendu-unitatearen izen osatua (DN)"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Afiliazioa jatorrizko erakundean"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Afiliazioa jatorrizko erakundean"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Afiliazioa jatorrizko erakundean"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Goitizen ID etengabea"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Goitizen ID etengabea"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Goitizen ID etengabea"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax-zenbakia"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax-zenbakia"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax-zenbakia"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Izena"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Izena"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Izena"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Etxeko telefonoa"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Etxeko telefonoa"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Etxeko telefonoa"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Etxeko helbidea"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Etxeko helbidea"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Etxeko helbidea"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG argazkia"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG argazkia"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG argazkia"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Herria"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Herria"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Herria"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI etiketatua"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI etiketatua"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI etiketatua"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Posta"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Posta"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Posta"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Kudeatzailea"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Kudeatzailea"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Kudeatzailea"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mugikorra"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mugikorra"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mugikorra"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Erakundearen zenbakia"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Erakundearen zenbakia"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Erakundearen zenbakia"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Jaioteguna"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Jaioteguna"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Jaioteguna"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Tokiko zenbaki identifikatzailea"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Tokiko zenbaki identifikatzailea"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Tokiko zenbaki identifikatzailea"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Gizarte-segurantzako zenbakia"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Gizarte-segurantzako zenbakia"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Gizarte-segurantzako zenbakia"
+
+# English string: Organization name
+msgid "o"
+msgstr "Erakundearen izena"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Erakundearen izena"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Erakundearen izena"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Antolamendu-unitatea"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Antolamendu-unitatea"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Antolamendu-unitatea"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Posta-bulegoko ontzia"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Posta-bulegoko ontzia"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Posta-bulegoko ontzia"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Posta-helbidea"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Posta-helbidea"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Posta-helbidea"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Posta-kodea"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Posta-kodea"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Posta-kodea"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Hizkuntza lehenetsia"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Jatorrizko erakundearen domeinu izena"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Jatorrizko erakundearen domeinu izena"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Jatorrizko erakundearen domeinu izena"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Jatorrizko erakundearen domeinu izena"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Informazio pribatuaren elementuak"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Informazio pribatuaren elementuak"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Informazio pribatuaren elementuak"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Informazio pribatuaren elementuak"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Abizenak"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Abizenak"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Abizenak"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Kalea"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Kalea"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Kalea"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefono zenbakia"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefono zenbakia"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefono zenbakia"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Tratamendua"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Tratamendua"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Tratamendua"
+
+# English string: User ID
+msgid "uid"
+msgstr "Erabiltzaile ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Erabiltzaile ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Erabiltzaile ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Erabiltzailearen pasahitzaren hash-a"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Erabiltzailearen pasahitzaren hash-a"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Erabiltzailearen pasahitzaren hash-a"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Izen arrunta (CN)"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Bistaratzeko izena"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Bistaratzeko izena"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Goitizen ID etengabea"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Goitizen ID etengabea"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Goitizen ID etengabea"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Goitizen ID etengabea"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax-zenbakia"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Izena"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Izena"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Izena"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Izena"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Izena"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Etxeko telefonoa"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Herria"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI etiketatua"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI etiketatua"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Posta"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Posta"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Posta"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Posta"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Posta"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mugikorra"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Erakundearen izena"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Posta-kodea"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Posta-kodea"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Hizkuntza lehenetsia"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Abizenak"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Abizenak"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Abizenak"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Abizenak"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Abizenak"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefono zenbakia"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefono zenbakia"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Tratamendua"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Tratamendua"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Erabiltzaile ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Erabiltzaile ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Erabiltzaile ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Erabiltzaile ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Erabiltzaile ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/messages.po
index ff123121ee..83dc59edea 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/eu/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "Errorea metadatuak kargatzean"
 msgid "{admin:metaconv_title}"
 msgstr "Metadatuak aztertu"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Zerbitzuari dagokion eskubidea"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG argazkia"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Ez da errorerik aurkitu"
 
@@ -135,9 +129,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Itzuli SimpleSAMLphp instalazio orrira "
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identitate hornitzailea (Urrunekoa)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp-en errorea"
 
@@ -156,18 +147,12 @@ msgstr ""
 "Zerbitzuaren administratzailea bazara, ziurta ezazu metadatuen "
 "konfigurazioa zuzena dela."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Pertsonaren jatorrizko erakundearen izen osatua (DN)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Eskaera oker bat jaso da."
 
 msgid "{status:sessionsize}"
 msgstr "Saioaren tamaina: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Posta-helbidea"
-
 msgid "{logout:title}"
 msgstr "Saioa itxita."
 
@@ -189,32 +174,17 @@ msgstr "Itxaroten"
 msgid "{admin:cfg_check_header}"
 msgstr "Konfigurazioa egiaztatu"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Afiliazioa jatorrizko erakundean"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Abizenak"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Mezua bidali"
 
 msgid "{status:logout}"
 msgstr "Irten"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Erakundearen izena"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefono zenbakia"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Aurkikuntza zerbitzuari bidalitako prametroak ez dira zehaztapenera "
 "doitzen."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Posta"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Errore bat jazo da SAML eskaera sortzen saiatzean."
 
@@ -224,9 +194,6 @@ msgstr "Hautazko datuak"
 msgid "{logout:return}"
 msgstr "Itzuli zerbitzura"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Bistaratzeko izena"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "<a href=\"%METAURL%\">xml metadatuekin URL bat</a> eskura dezakezu:"
 
@@ -238,9 +205,6 @@ msgstr ""
 "Arazketa modua desaktibatu daiteke SimpleSAMLphp "
 "<tt>config/config.php</tt> konfigurazio orokorreko fitxategian."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Etxeko helbidea"
-
 msgid "{disco:select}"
 msgstr "Hautatu"
 
@@ -267,9 +231,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Goian agertzen diren zerbitzu guztietako saioak itxi nahi al dituzu?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Tratamendua"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Sarrera zehaztu gabe"
 
@@ -284,9 +245,6 @@ msgstr "RelayState zehaztu gabe"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Egoera informazioa galdua eta ez dago modurik eskaera berrabiarazteko"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Gizarte-segurantzako zenbakia"
-
 msgid "{login:password}"
 msgstr "Pasahitza"
 
@@ -313,24 +271,15 @@ msgstr "Errorea saioa ixteko eskaera prozesatzean "
 msgid "{admin:metaover_errorentry}"
 msgstr "Metadatu sarrera honetan  errorea"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Afiliazioa"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Ez dira metadatuak aurkitu"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Izena"
-
 msgid "{login:contact_info}"
 msgstr "Harremanetarako informazioa:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Kudeatu gabeko salbuespena"
 
-msgid "{status:validfor}"
-msgstr "Zure saioa %SECONDS% segundoz izango da baliagarri."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Adibidea"
 
@@ -364,30 +313,18 @@ msgstr "Hautatu ezazu egiaztatu beharreko konfigurazio fitxategia: "
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Kautotze okerra: zure nabigatzaileak bidalitako ziurtagiria ezezaguna da"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Erakundearen hasiera-orria"
-
 msgid "{logout:logging_out_from}"
 msgstr "Honako zerbitzu hauen saioak itxi:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "%SP% saioa zuzen itxi da."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Zerbitzu hornitzailea (Anfitrioia)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Errore txostena administratzaileei bidali zaie."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Jaioteguna"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Errore bat jazo da saioa ixteko eskaera prozesatzean."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Goitizen ID etengabea"
-
 msgid "{logout:success}"
 msgstr "Hemen adierazten den zerrendako zerbitzu guztietako saioak zuzen itxi dira"
 
@@ -397,12 +334,6 @@ msgstr "Oharrak"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Kautotzea bertan behera utzi du erabiltzaileak"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Lehen afiliazioa"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Posta-kodea"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Errorea CAS zerbitzariarekin komunikatzen saiatzean"
 
@@ -412,9 +343,6 @@ msgstr "Ez"
 msgid "{admin:metaconv_converted}"
 msgstr "Bihurtutako metadatuak"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Izen arrunta (CN)"
-
 msgid "{logout:completed}"
 msgstr "Amaitua"
 
@@ -423,18 +351,9 @@ msgstr ""
 "Ez da aldatu konfigurazio fitxategiaren pasahitzaren (auth.adminpassword)"
 " balio lehenetsia. Mesedez, edita ezazu fitxategia"
 
-msgid "{attributes:attribute_ou}"
-msgstr "Antolamendu-unitatea"
-
 msgid "{general:service_provider}"
 msgstr "Zerbitzu hornitzailea"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Etxeko telefonoa"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domeinuaren osagaia (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Errore bat dago orri honen eskaeran. Arrazoia hau da: %REASON%"
 
@@ -453,23 +372,14 @@ msgstr "Sartu erabiltzaile-izena eta pasahitza"
 msgid "{errors:report_explain}"
 msgstr "Azal ezazu zer egin duzun errore honetara iristeko..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Kudeatzailea"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAML erantzuna falta da"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Ezizena"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "SingleLogoutService interfazera sartu zara baina ez duzu erantsi  SAML "
 "LogoutRequest edo LogoutResponse mezurik"
 
-msgid "{attributes:attribute_street}"
-msgstr "Kalea"
-
 msgid "{login:organization}"
 msgstr "Erakundea"
 
@@ -509,9 +419,6 @@ msgstr "Jatorrizko erakundea hautatu"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Konfigurazio fitxategian soberan dauden aukerak"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI etiketatua"
-
 msgid "{errors:report_email}"
 msgstr "E-posta:"
 
@@ -526,9 +433,6 @@ msgstr ""
 "Eskaera honen abiarazleak ez du ematen ondoren nora joan adierazten duen "
 "RelayState parametroa"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Izen legala"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp Diagnostikoa"
 
@@ -538,9 +442,6 @@ msgstr ""
 " saioa iraungi den, zenbat denbora geratzen den hau gerta dadin eta zure "
 "saioan dauden atributu guztiak."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Jatorrizko erakundearen domeinu izena"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Ez da orria aurkitu"
 
@@ -559,30 +460,18 @@ msgstr "SAML entitate baten xehetasunak ikusteko, klikatu entitatearen goiburua.
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ziurtagiri balio gabea"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Pertsonaren jatorrizko erakundeko antolamendu-unitatearen izen osatua (DN)"
-
 msgid "{general:remember}"
 msgstr "Onespena gogoratu"
 
 msgid "{disco:selectidp}"
 msgstr "Hauta ezazu zure identitate hornitzailea"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Posta-bulegoko ontzia"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
-
 msgid "{login:help_desk_email}"
 msgstr "Bidali posta laguntza teknikoari "
 
 msgid "{login:help_desk_link}"
 msgstr "Laguntza teknikoaren orria "
 
-msgid "{attributes:attribute_uid}"
-msgstr "Erabiltzaile ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS Errorea"
 
@@ -603,12 +492,6 @@ msgstr "Nire hautaketa gogoratu"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Zerbitzu hornitzailea (Anfitrioia)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Herria"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Bermearen profilaren identifikatzailea"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "SimpleSAMLphp formatuko fitxategi batean - beste muturrean SimpleSAMLphp "
@@ -653,9 +536,6 @@ msgstr "Mezua"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Ziurtagiri ezezaguna"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax-zenbakia"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP Errorea"
 
@@ -674,15 +554,9 @@ msgstr ""
 "okerra izan da. Jar zaitez harremanetan identifikazio zerbitzu honen "
 "administratzailearekin eta bidal iezaiozu lehenagoko errore mezua. "
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mugikorra"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identitate hornitzailea (Anfitrioia)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Hizkuntza lehenetsia"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Ez duzu baliozko ziurtagiririk aurkeztu "
 
@@ -697,15 +571,6 @@ msgstr "Hautazko datu hauek ez dira aurkitu"
 msgid "{logout:logout_only}"
 msgstr "Ez, %SPS bakarrik"
 
-msgid "{attributes:attribute_o}"
-msgstr "Erakundearen izena"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Pertsonaren antolamendu-unitatearen izen osatua (DN)"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Tokiko zenbaki identifikatzailea"
-
 msgid "{login:next}"
 msgstr "Hurrengoa"
 
@@ -725,9 +590,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Ziurtagiri gabe"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Erabiltzailearen pasahitzaren hash-a"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Saioa ixteko informazioa galdu da"
 
@@ -743,12 +605,6 @@ msgstr ""
 "dokumentu hau konfidantzazko zure kideei bidal diezaiekezu federazio bat "
 "konfiguratzeko."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Informazio pribatuaren elementuak"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Adibidea"
-
 msgid "{admin:metadata_cert}"
 msgstr "Ziurtagiriak"
 
@@ -757,18 +613,12 @@ msgstr ""
 "Kautotze okerra: Zure nabigatzaileak bidalitako ziurtagiria baliogabea da"
 " edo ezin da irakurri"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Erakundearen izen legala"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth Adibidea"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Aztertu"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Erakundearen zenbakia"
-
 msgid "Person's principal name at home organization"
 msgstr "Jatorrizko erakundean pertsonak duen izen nagusia"
 
@@ -1098,8 +948,8 @@ msgstr ""
 "administratzailearekin eta bidal iezaiozu lehenagoko errore mezua. "
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Zure saioa %SECONDS% segundoz izango da baliagarri."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Zure saioa %remaining% segundoz izango da baliagarri."
 
 msgid "Domain component (DC)"
 msgstr "Domeinuaren osagaia (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/fa/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/fa/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..29364f1a86
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/fa/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "cn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "urn:mace:dir:attribute-def:cn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "urn:oid:2.5.4.3"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "dc"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "urn:mace:dir:attribute-def:dc"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "urn:oid:0.9.2342.19200300.100.1.25"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "displayName"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "urn:mace:dir:attribute-def:displayName"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "urn:oid:2.16.840.1.113730.3.1.241"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "urn:mace:dir:attribute-def:eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "eduPersonAffiliation"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonAffiliation"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "eduPersonEntitlement"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "urn:mace:dir:attribute-def:eduPersonEntitlement"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "urn:mace:dir:attribute-def:eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "eduPersonPrincipalName"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "eduPersonScopedAffiliation"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "urn:mace:dir:attribute-def:eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "urn:oid:2.5.4.23"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "givenName"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "urn:mace:dir:attribute-def:givenName"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "urn:oid:2.5.4.42"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "homePhone"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "urn:mace:dir:attribute-def:homePhone"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "urn:oid:0.9.2342.19200300.100.1.20"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "urn:mace:dir:attribute-def:homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "urn:oid:0.9.2342.19200300.100.1.39"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "urn:mace:dir:attribute-def:jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "urn:oid:0.9.2342.19200300.100.1.60"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "l"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "urn:mace:dir:attribute-def:l"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "urn:oid:2.5.4.7"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "labeledURI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "urn:mace:dir:attribute-def:labeledURI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "urn:oid:1.3.6.1.4.1.250.1.57"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "urn:mace:dir:attribute-def:mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "urn:oid:0.9.2342.19200300.100.1.3"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "urn:mace:dir:attribute-def:manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "urn:oid:0.9.2342.19200300.100.1.10"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "mobile"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "urn:mace:dir:attribute-def:mobile"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "urn:oid:0.9.2342.19200300.100.1.41"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "urn:mace:dir:attribute-def:norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "norEduPersonNIN"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonNIN"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+
+# English string: Organization name
+msgid "o"
+msgstr "o"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "urn:mace:dir:attribute-def:o"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "urn:oid:2.5.4.10"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "urn:oid:2.5.4.11"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "ou"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "urn:mace:dir:attribute-def:ou"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "postOfficeBox"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "urn:mace:dir:attribute-def:postOfficeBox"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "urn:oid:2.5.4.18"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "postalAddress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "urn:mace:dir:attribute-def:postalAddress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "urn:oid:2.5.4.16"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "postalCode"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "urn:mace:dir:attribute-def:postalCode"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "urn:oid:2.5.4.17"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "preferredLanguage"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "urn:mace:dir:attribute-def:preferredLanguage"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "urn:oid:2.16.840.1.113730.3.1.39"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "urn:schac:attribute-def:schacHomeOrganization"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:schac:attribute-def:schacUserPrivateAttribute"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "sn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "urn:mace:dir:attribute-def:sn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "urn:oid:2.5.4.4"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "street"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "urn:mace:dir:attribute-def:street"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "urn:oid:2.5.4.9"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "urn:mace:dir:attribute-def:telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "urn:oid:2.5.4.20"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "title"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "urn:mace:dir:attribute-def:title"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "urn:oid:2.5.4.12"
+
+# English string: User ID
+msgid "uid"
+msgstr "uid"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "urn:mace:dir:attribute-def:uid"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "urn:oid:0.9.2342.19200300.100.1.1"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "userPassword"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "urn:mace:dir:attribute-def:userPassword"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "urn:oid:2.5.4.35"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "facebook_cn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "facebook.name"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "http://axschema.org/namePerson/friendly"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "openid.sreg.nickname"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "http://axschema.org/namePerson"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "openid.sreg.fullname"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "twitter.name"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "windowslive.displayName"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "facebook_user"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "linkedin_user"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "twitter_screen_n_realm"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "windowslive_user"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "windowslive.userPrincipalName"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "facebook_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "linkedin_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "twitter_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "windowslive_targetedID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "http://axschema.org/contact/phone/fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "facebook.first_name"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "linkedin.firstName"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "http://axschema.org/namePerson/first"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "windowslive.FirstName"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "windowslive.givenName"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "http://axschema.org/contact/phone/home"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "windowslive.Location"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "facebook.profile_url"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "twitter.url"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "facebook.email"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "http://axschema.org/contact/email"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "openid.sreg.email"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "windowslive_mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "windowslive.mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "http://axschema.org/contact/phone/cell"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "http://axschema.org/company/name"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "http://axschema.org/contact/postalCode/home"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "openid.sreg.postcode"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "facebook.locale"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "http://axschema.org/pref/language"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "openid.sreg.language"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "twitter.lang"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "windowslive.preferredLanguage"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "facebook.last_name"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "linkedin.lastName"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "http://axschema.org/namePerson/last"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "windowslive.LastName"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "windowslive.surname"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "http://axschema.org/contact/phone/default"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "http://axschema.org/contact/phone/business"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "linkedin.headline"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "http://axschema.org/company/title"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "facebook.username"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "linkedin.id"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "twitter.screen_name"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "windowslive_uid"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "windowslive.id"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..cfaa83efaa
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Käyttönimi"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Käyttönimi"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Käyttönimi"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domain-osio"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domain-osio"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domain-osio"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Näyttönimi"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisaation kotisivu"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisaation kotisivu"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisaation kotisivu"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organisaation virallinen nimi"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organisaation virallinen nimi"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organisaation virallinen nimi"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Suhde organisaatioon"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Suhde organisaatioon"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Suhde organisaatioon"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Organisaationoikeudet"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Organisaationoikeudet"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Organisaationoikeudet"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Kutsumanimi"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Kutsumanimi"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Kutsumanimi"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "DN-osio organisaation nimestä"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "DN-osio organisaation nimestä"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "DN-osio organisaation nimestä"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "DN-osio organisaatioyksikön nimestä"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "DN-osio organisaatioyksikön nimestä"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "DN-osio organisaatioyksikön nimestä"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Ensisijainen suhde organisaatioon"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Ensisijainen suhde organisaatioon"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Ensisijainen suhde organisaatioon"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Henkilön universaali nimi"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Henkilön universaali nimi"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Henkilön universaali nimi"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Henkilön rooli kotiorganisaatiossa"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Henkilön rooli kotiorganisaatiossa"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Henkilön rooli kotiorganisaatiossa"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faksinumero"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faksinumero"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faksinumero"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Etunimet"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Etunimet"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Etunimet"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Kotipuhelin"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Kotipuhelin"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Kotipuhelin"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Kodin postiosoite"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Kodin postiosoite"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Kodin postiosoite"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG kuva"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG kuva"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG kuva"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Paikkakunta"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Paikkakunta"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Paikkakunta"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Kotisivu"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Kotisivu"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Kotisivu"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Sähköposti"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Sähköposti"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Sähköposti"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Kännykkä"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Kännykkä"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Kännykkä"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisaation numero"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisaation numero"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisaation numero"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Syntymäaika"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Syntymäaika"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Syntymäaika"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Henkilönumero"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Henkilönumero"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Henkilönumero"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Henkilötunnus"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Henkilötunnus"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Henkilötunnus"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organisaation nimi"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organisaation nimi"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organisaation nimi"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisaation yksikkö"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisaation yksikkö"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisaation yksikkö"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postilokero"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postilokero"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postilokero"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Postiosoite"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Postiosoite"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Postiosoite"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postinumero"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postinumero"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postinumero"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Ensisijainen kieli"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Ensisijainen kieli"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Ensisijainen kieli"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Organisaation domain-nimi"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Organisaation domain-nimi"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Organisaation domain-nimi"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Organisaation domain-nimi"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Yksilöivät tunnisteet"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Yksilöivät tunnisteet"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Yksilöivät tunnisteet"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Yksilöivät tunnisteet"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Sukunimi"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Sukunimi"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Sukunimi"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Katu"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Katu"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Katu"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Puhelinnumero"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Puhelinnumero"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Puhelinnumero"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titteli"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titteli"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titteli"
+
+# English string: User ID
+msgid "uid"
+msgstr "uid"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "uid"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "uid"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Käyttäjän salasanatiiviste"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Käyttäjän salasanatiiviste"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Käyttäjän salasanatiiviste"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Käyttönimi"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Näyttönimi"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Näyttönimi"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Henkilön universaali nimi"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Henkilön universaali nimi"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Henkilön universaali nimi"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Henkilön universaali nimi"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Henkilön universaali nimi"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Pseudonyymi-identiteetti"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faksinumero"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Etunimet"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Etunimet"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Etunimet"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Etunimet"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Etunimet"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Kotipuhelin"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Paikkakunta"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Kotisivu"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Kotisivu"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Sähköposti"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Sähköposti"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Sähköposti"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Sähköposti"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Sähköposti"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Kännykkä"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organisaation nimi"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postinumero"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postinumero"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Ensisijainen kieli"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Ensisijainen kieli"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Ensisijainen kieli"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Ensisijainen kieli"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Ensisijainen kieli"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Sukunimi"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Sukunimi"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Sukunimi"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Sukunimi"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Sukunimi"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Puhelinnumero"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Puhelinnumero"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titteli"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titteli"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "uid"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "uid"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "uid"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "uid"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "uid"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/messages.po
index 6d1706d3ed..5655dff804 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/fi/LC_MESSAGES/messages.po
@@ -30,12 +30,6 @@ msgstr "Tunnus"
 msgid "{errors:title_METADATA}"
 msgstr "Metadatan lataaminen epäonnistui"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Organisaationoikeudet"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG kuva"
-
 msgid "{errors:descr_LOGOUTINFOLOST}"
 msgstr ""
 "Uloskirjautumistiedot hävisivät. Sinun tulee palata siihen palveluun "
@@ -110,18 +104,12 @@ msgstr ""
 "SimpleSAMLphp-asenuksen määrittelyissä on virhe. Mikäli olet tämän "
 "palvelun ylläpitäjä tulee sinun varmistua metadatan oikeellisuudesta."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "DN-osio organisaation nimestä"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Vääränlainen pyyntö vastaanotettu"
 
 msgid "{status:sessionsize}"
 msgstr "Istunnon koko: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Postiosoite"
-
 msgid "{logout:title}"
 msgstr "Uloskirjautunut"
 
@@ -131,42 +119,21 @@ msgstr "Valitse kotiorganisaatiosi"
 msgid "{logout:hold}"
 msgstr "Odota"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Henkilön rooli kotiorganisaatiossa"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Sukunimi"
-
 msgid "{status:logout}"
 msgstr "Uloskirjautuminen"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organisaation nimi"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Puhelinnumero"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Discovery-palveluun lähetetyt tiedot eivät vastanneet määräyksiä."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Sähköposti"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "SAML-pyynnin luonnissa tapahtui virhe virhe virhe virhe"
 
 msgid "{logout:return}"
 msgstr "Palaa palveluun"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Näyttönimi"
-
 msgid "{logout:logout_all}"
 msgstr "Kyllä, kaikista palveluista"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Kodin postiosoite"
-
 msgid "{disco:select}"
 msgstr "Valitse"
 
@@ -190,9 +157,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Haluatko uloskirjautua edellämainituista palveluista?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titteli"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ei oikeutta"
 
@@ -204,9 +168,6 @@ msgstr ""
 msgid "{errors:title_NORELAYSTATE}"
 msgstr "Ei RelayState "
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Henkilötunnus"
-
 msgid "{login:password}"
 msgstr "Salasana"
 
@@ -227,21 +188,12 @@ msgstr "Virhe asetuksissa"
 msgid "{errors:title_LOGOUTREQUEST}"
 msgstr "Uloskirjautumispyynnön käsittelyssä tapahtui virhe"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Suhde organisaatioon"
-
-msgid "{attributes:attribute_givenname}"
-msgstr "Etunimet"
-
 msgid "{login:contact_info}"
 msgstr "Yhteystiedot"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Käsittelemätön poikkeus"
 
-msgid "{status:validfor}"
-msgstr "Istuntosi on vielä voimassa %SECONDS% sekuntia"
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP esimerkki"
 
@@ -254,9 +206,6 @@ msgstr ""
 "uloskirjautumista</i>. Varmistaaksesi, että kaikki istuntosi sulkeutuvat,"
 " olet velvollinen <i>sulkemaan web-selaimesi</i>."
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisaation kotisivu"
-
 msgid "{logout:logging_out_from}"
 msgstr "Kirjaudutaan ulos seuraavista palveluista:"
 
@@ -266,33 +215,18 @@ msgstr "Olet kirjautunut ulos palvelusta %SP%."
 msgid "{errors:errorreport_text}"
 msgstr "Virheraportti on lähetetty ylläpitäjille."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Syntymäaika"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Uloskirjautumispyynnön käsittelyn yrityksessä tapahtui virhe"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Pseudonyymi-identiteetti"
-
 msgid "{logout:success}"
 msgstr "Olet onnistuneesti kirjautunut ulos kaikista yllä listatuista palveluista."
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Ensisijainen suhde organisaatioon"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postinumero"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "CAS-palvelun kättelyvirhe"
 
 msgid "{general:no}"
 msgstr "ei"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Käyttönimi"
-
 msgid "{logout:completed}"
 msgstr "Valmis"
 
@@ -301,18 +235,9 @@ msgstr ""
 "Ylläpitäjän salasanaa (auth.adminpassword) ei ole vaihtunut "
 "oletusarvosta. Ole hyvä ja muokkaa asetustiedostoa."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisaation yksikkö"
-
 msgid "{general:service_provider}"
 msgstr "Palveluntarjoaja"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Kotipuhelin"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain-osio"
-
 msgid "{logout:no}"
 msgstr "Ei"
 
@@ -328,23 +253,14 @@ msgstr "Syötä tunnuksesi ja salasanasi"
 msgid "{errors:report_explain}"
 msgstr "Kerro mitä teit kun virhe ilmeni:"
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAML-vastaus puuttuu"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Kutsumanimi"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Yritit kertauloskirjautumisliittymään, mutta et tarjonnut SAML "
 "LogoutRequest:iä tai LogoutRespons:ia."
 
-msgid "{attributes:attribute_street}"
-msgstr "Katu"
-
 msgid "{login:organization}"
 msgstr "Organisaatio"
 
@@ -370,9 +286,6 @@ msgstr "Virhe"
 msgid "{login:change_home_org_button}"
 msgstr "Valitse kotiorganisaatiosi"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Kotisivu"
-
 msgid "{errors:report_email}"
 msgstr "sähköpostiosoite:"
 
@@ -385,9 +298,6 @@ msgstr "Salasanaa ei ole asetettu"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "Pyynnön luoja ei tarjonnut RelayState arvoa, joka ilmaisisi minne jatkaa."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Virallinen nimi"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostiikka"
 
@@ -396,9 +306,6 @@ msgstr ""
 "Tämä on SimpleSAMLphp:n statussivu. Näet onko istuntosi voimassa, kauanko"
 " se on voimassa ja kaikki istuuntosi liitetyt attribuutit."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Organisaation domain-nimi"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Sivua ei löytynyt"
 
@@ -408,33 +315,18 @@ msgstr "Virhe vastaanotettu Identiteetintarjoajalta."
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Epäkelvollinen sertifikaatti"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "DN-osio organisaatioyksikön nimestä"
-
 msgid "{general:remember}"
 msgstr "Muista"
 
 msgid "{disco:selectidp}"
 msgstr "Valitse identiteettillähteesi"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postilokero"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Henkilön universaali nimi"
-
 msgid "{login:help_desk_email}"
 msgstr "Lähetä sähköposti helpdeskille."
 
 msgid "{login:help_desk_link}"
 msgstr "Helpdeskin kotisivu"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Ryhmän jäsenyys"
-
-msgid "{attributes:attribute_uid}"
-msgstr "uid"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS virhe"
 
@@ -452,9 +344,6 @@ msgstr "Kyllä"
 msgid "{disco:remember}"
 msgstr "Muista valintani"
 
-msgid "{attributes:attribute_l}"
-msgstr "Paikkakunta"
-
 msgid "{disco:login_at}"
 msgstr "Kirjaudu"
 
@@ -482,9 +371,6 @@ msgstr "Olet kirjautunut ulos"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Tuntematon sertifikaatti"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faksinumero"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP-virhe"
 
@@ -502,24 +388,12 @@ msgstr ""
 "asetuksista. Ota yhteyttä identiteettipalvelun ylläpitäjään, ja sisällytä"
 " yllä oleva virheilmoitus."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Kännykkä"
-
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Ensisijainen kieli"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Et tarjonnut voimassaolevaa sertifikaattia"
 
 msgid "{logout:logout_only}"
 msgstr "Ei, vain %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organisaation nimi"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Henkilönumero"
-
 msgid "{login:next}"
 msgstr "Seuraava"
 
@@ -537,30 +411,15 @@ msgstr "Sivua ei löytynyt. Syynä oli: %REASON% Osoite oli %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Ei sertifikaattia"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Käyttäjän salasanatiiviste"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Uloskirjautumistiedot hävisivät"
 
 msgid "{errors:descr_CONFIG}"
 msgstr "Vaikuttaa siltä, että SimpleSAMLphp:na asetuksissa on virhe."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Yksilöivät tunnisteet"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-FED SP esimerkki"
-
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organisaation virallinen nimi"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth esimerkki"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisaation numero"
-
 msgid "Person's principal name at home organization"
 msgstr "Henkilön universaali nimi"
 
@@ -804,8 +663,8 @@ msgstr ""
 " yllä oleva virheilmoitus."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Istuntosi on vielä voimassa %SECONDS% sekuntia"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Istuntosi on vielä voimassa %remaining% sekuntia"
 
 msgid "Domain component (DC)"
 msgstr "Domain-osio"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..e4267a5af8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nom usuel"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nom usuel"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nom usuel"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Fragment de domaine (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Fragment de domaine (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Fragment de domaine (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nom pour affichage"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Site web institutionnel"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Site web institutionnel"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Site web institutionnel"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nom légal de l'institution"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nom légal de l'institution"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nom légal de l'institution"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Affiliation"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Affiliation"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Affiliation"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Profil d'assertion d'identité"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Profil d'assertion d'identité"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Profil d'assertion d'identité"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Appartenance à un groupe"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Appartenance à un groupe"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Appartenance à un groupe"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Pseudonyme"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Pseudonyme"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Pseudonyme"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Nom unique (DN) de l'institution d'origine"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Nom unique (DN) de l'institution d'origine"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Nom unique (DN) de l'institution d'origine"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Nom unique (DN) de la section d'origine"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Nom unique (DN) de la section d'origine"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Nom unique (DN) de la section d'origine"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Affiliation primaire"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Affiliation primaire"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Affiliation primaire"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Nom unique (DN) de la section d'origine"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Nom unique (DN) de la section d'origine"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Nom unique (DN) de la section d'origine"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Rôles pour ce service"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Rôles pour ce service"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Rôles pour ce service"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Numéro de fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Numéro de fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Numéro de fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Prénom"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Prénom"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Prénom"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Téléphone personnel"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Téléphone personnel"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Téléphone personnel"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Adresse postale personnelle"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Adresse postale personnelle"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Adresse postale personnelle"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Photo JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Photo JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Photo JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Lieu"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Lieu"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Lieu"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Courriel"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Courriel"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Courriel"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Gestionnaire"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Gestionnaire"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Gestionnaire"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobile"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobile"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobile"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Immatriculation de l'institution"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Immatriculation de l'institution"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Immatriculation de l'institution"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Date de naissance"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Date de naissance"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Date de naissance"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Immatriculation territoriale"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Immatriculation territoriale"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Immatriculation territoriale"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Numéro de sécurité sociale"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Numéro de sécurité sociale"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Numéro de sécurité sociale"
+
+# English string: Organization name
+msgid "o"
+msgstr "Rôles pour ce service"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Rôles pour ce service"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Rôles pour ce service"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Section"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Section"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Section"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Boite postale"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Boite postale"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Boite postale"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adresse postale"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adresse postale"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adresse postale"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Code postal"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Code postal"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Code postal"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Langue préférée"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Langue préférée"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Langue préférée"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Identifiant unique de l'organisation de rattachement"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Identifiant unique de l'organisation de rattachement"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Identifiant unique de l'organisation de rattachement"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Identifiant unique de l'organisation de rattachement"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Éléments d'informations privées"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Éléments d'informations privées"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Éléments d'informations privées"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Éléments d'informations privées"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Nom"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Nom"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Nom"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Rue"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Rue"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Rue"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Numéro de téléphone"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Numéro de téléphone"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Numéro de téléphone"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titre"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titre"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titre"
+
+# English string: User ID
+msgid "uid"
+msgstr "ID Utilisateur"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "ID Utilisateur"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "ID Utilisateur"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Mot de passe chiffré"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Mot de passe chiffré"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Mot de passe chiffré"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nom usuel"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nom pour affichage"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nom pour affichage"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Identifiant persistant anonyme"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Numéro de fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Prénom"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Prénom"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Prénom"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Prénom"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Prénom"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Téléphone personnel"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Lieu"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Courriel"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Courriel"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Courriel"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Courriel"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Courriel"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobile"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Rôles pour ce service"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Code postal"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Code postal"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Langue préférée"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Langue préférée"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Langue préférée"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Langue préférée"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Langue préférée"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Nom"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Nom"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Nom"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Nom"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Nom"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Numéro de téléphone"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Numéro de téléphone"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titre"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titre"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "ID Utilisateur"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "ID Utilisateur"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "ID Utilisateur"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "ID Utilisateur"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "ID Utilisateur"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/messages.po
index cb8bd91da8..7e004a7c47 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/fr/LC_MESSAGES/messages.po
@@ -52,12 +52,6 @@ msgstr "Erreur lors du chargement des métadonnées (metadata)"
 msgid "{admin:metaconv_title}"
 msgstr "Analyseur de métadonnées"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Appartenance à un groupe"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Photo JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Aucune erreur."
 
@@ -137,9 +131,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Retournez à la page d'installation de SimpleSAML."
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Fournisseur d'identité Shib 1.3 distant"
-
 msgid "{errors:error_header}"
 msgstr "erreur de SimpleSAMLphp"
 
@@ -160,18 +151,12 @@ msgstr ""
 "vous assurer que votre configuration des métadonnées est correctement "
 "réalisée."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Nom unique (DN) de l'institution d'origine"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Requête invalide"
 
 msgid "{status:sessionsize}"
 msgstr "Taille de la session : %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adresse postale"
-
 msgid "{logout:title}"
 msgstr "Déconnecté"
 
@@ -193,32 +178,17 @@ msgstr "En cours"
 msgid "{admin:cfg_check_header}"
 msgstr "Vérification de la configuration"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Rôles pour ce service"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Nom"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Envoi du message"
 
 msgid "{status:logout}"
 msgstr "Déconnexion"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Rôles pour ce service"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Numéro de téléphone"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Les paramètres envoyés au service de découverte automatique (discovery "
 "service) ne respectent pas les spécifications."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Courriel"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Une erreur s'est produite lors de la tentative de créer la requête SAML."
 
@@ -228,9 +198,6 @@ msgstr "Champs optionnels"
 msgid "{logout:return}"
 msgstr "Retour au service"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nom pour affichage"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Vous pouvez <a href=\"%METAURL%\">obtenir ces métadonnées XML depuis une "
@@ -244,9 +211,6 @@ msgstr ""
 "Vous pouvez désactivez le mode débogage dans le fichier de configuration "
 "globale de SimpleSAMLphp (<tt>config/config.php</tt>)."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Adresse postale personnelle"
-
 msgid "{disco:select}"
 msgstr "Sélectionner"
 
@@ -274,9 +238,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Voulez vous réellement terminer les connexions à tout ces services?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titre"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Pas d'accès"
 
@@ -292,9 +253,6 @@ msgstr "Pas d'information RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Information d'état perdue, et aucun moyen de relancer la requête"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Numéro de sécurité sociale"
-
 msgid "{login:password}"
 msgstr "Mot de passe"
 
@@ -321,24 +279,15 @@ msgstr "Erreur lors du traitement de la requête de déconnexion"
 msgid "{admin:metaover_errorentry}"
 msgstr "Erreur dans les métadonnées de cet élément"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Affiliation"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Métadonnées non trouvées"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Prénom"
-
 msgid "{login:contact_info}"
 msgstr "Coordonnées :"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Exception non gérée"
 
-msgid "{status:validfor}"
-msgstr "Votre session est encore valide pour %SECONDS% secondes."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Exemple de démonstration de SP SAML 2.0"
 
@@ -374,32 +323,20 @@ msgstr ""
 "Échec de l'authentification : le certificat présenté par votre navigateur"
 " n'est pas connu"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Site web institutionnel"
-
 msgid "{logout:logging_out_from}"
 msgstr "Déconnexion des services suivants :"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Vous avez été déconnecté de %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Fournisseur de service WS-federation local"
-
 msgid "{errors:errorreport_text}"
 msgstr "Le rapport d'erreur a été envoyé aux administrateurs."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Date de naissance"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr ""
 "Une erreur s'est produite lors de la tentative de traiter la demande de "
 "déconnexion."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Identifiant persistant anonyme"
-
 msgid "{logout:success}"
 msgstr "Vous avez été déconnecté avec succès des services listés ci dessus"
 
@@ -409,12 +346,6 @@ msgstr "A noter"
 msgid "{errors:descr_USERABORTED}"
 msgstr "L'authentification a été abandonnée par l'usager"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Affiliation primaire"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Code postal"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Erreur de communication avec le serveur CAS"
 
@@ -427,9 +358,6 @@ msgstr "Métadonnées de SP SAML 2.0"
 msgid "{admin:metaconv_converted}"
 msgstr "Métadonnées converties"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nom usuel"
-
 msgid "{logout:completed}"
 msgstr "Fait"
 
@@ -439,18 +367,9 @@ msgstr ""
 "changé par rapport à la valeur par défaut. Veuillez modifier la "
 "configuration."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Section"
-
 msgid "{general:service_provider}"
 msgstr "Fournisseur de service"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Téléphone personnel"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Fragment de domaine (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Erreur dans la requête de cette page. Motif : %REASON%"
 
@@ -469,23 +388,14 @@ msgstr "Entrez votre identifiant et votre mot de passe"
 msgid "{errors:report_explain}"
 msgstr "Expliquez ce que vous faisiez lorsque cette erreur est apparue..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Gestionnaire"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Aucune réponse SAML fournie"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Pseudonyme"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Vous avez accédé à l'interface SingleLogoutService, mais vous n'avez pas "
 "fourni de LogoutRequest ou LogoutResponse SAML."
 
-msgid "{attributes:attribute_street}"
-msgstr "Rue"
-
 msgid "{login:organization}"
 msgstr "Fournisseur"
 
@@ -525,9 +435,6 @@ msgstr "Choisissez votre fournisseur."
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Options superflues dans le fichier de configuration"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI"
-
 msgid "{errors:report_email}"
 msgstr "Adresse de courriel :"
 
@@ -542,9 +449,6 @@ msgstr ""
 "L'émetteur de cette requête n'a pas fourni de paramètre RelayState "
 "indiquant quelle page afficher ensuite."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "État civil"
-
 msgid "{status:header_diagnostics}"
 msgstr "Diagnostics SimpleSAMLphp"
 
@@ -554,9 +458,6 @@ msgstr ""
 "consulter ici le temps restant sur votre session, ainsi que les attributs"
 " qui y sont attachés."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Identifiant unique de l'organisation de rattachement"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Page introuvable"
 
@@ -575,30 +476,18 @@ msgstr "Pour examiner les détails d'une entité SAML, cliquez sur son en-tête.
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certificat invalide"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Nom unique (DN) de la section d'origine"
-
 msgid "{general:remember}"
 msgstr "Se souvenir du consentement"
 
 msgid "{disco:selectidp}"
 msgstr "Sélectionnez votre fournisseur d'identité"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Boite postale"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
-
 msgid "{login:help_desk_email}"
 msgstr "Assistance technique par courriel"
 
 msgid "{login:help_desk_link}"
 msgstr "Page web de l'assistance technique"
 
-msgid "{attributes:attribute_uid}"
-msgstr "ID Utilisateur"
-
 msgid "{errors:title_CASERROR}"
 msgstr "Erreur CAS"
 
@@ -620,12 +509,6 @@ msgstr "Retenir ce choix"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Fournisseur de service SAML 2.0 local"
 
-msgid "{attributes:attribute_l}"
-msgstr "Lieu"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Profil d'assertion d'identité"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Au format à plat SimpleSAMLphp - à utiliser si vous avez une installation"
@@ -670,9 +553,6 @@ msgstr "Message"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Certificat inconnu"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Numéro de fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Erreur LDAP"
 
@@ -691,15 +571,9 @@ msgstr ""
 "mauvaise configuration de SimpleSAMLphp.  Contactez l'administrateur de "
 "ce service d'identification et envoyez lui le message d'erreur."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobile"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Fournisseur d'identité Shib 1.3 local"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Langue préférée"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Vous n'avez pas présenté de certificat valide"
 
@@ -714,15 +588,6 @@ msgstr "Les champs optionnels suivants n'ont pas été trouvés"
 msgid "{logout:logout_only}"
 msgstr "Non, seulement de %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Rôles pour ce service"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Nom unique (DN) de la section d'origine"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Immatriculation territoriale"
-
 msgid "{login:next}"
 msgstr "Suivant"
 
@@ -742,9 +607,6 @@ msgstr "La page demandée est introuvable. Motif : %REASON%  L'url était : %URL
 msgid "{errors:title_NOCERT}"
 msgstr "Aucun certificat présenté"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Mot de passe chiffré"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Information de déconnexion perdue"
 
@@ -760,12 +622,6 @@ msgstr ""
 " à vos partenaires de confiances pour construire une fédération "
 "d'identité."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Éléments d'informations privées"
-
-msgid "{status:header_wsfed}"
-msgstr "Exemple de démonstration de WS-Fed SP"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certificats"
 
@@ -774,18 +630,12 @@ msgstr ""
 "Échec de l'authentification : le certificat présenté par votre navigateur"
 " est invalide ou illisible"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nom légal de l'institution"
-
 msgid "{status:header_shib}"
 msgstr "Exemple de démonstration de Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analyser"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Immatriculation de l'institution"
-
 msgid "Person's principal name at home organization"
 msgstr "Nom de l'utilisateur dans l'organisation de rattachement"
 
@@ -1127,8 +977,8 @@ msgstr ""
 "ce service d'identification et envoyez lui le message d'erreur."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Votre session est encore valide pour %SECONDS% secondes."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Votre session est encore valide pour %remaining% secondes."
 
 msgid "Domain component (DC)"
 msgstr "Fragment de domaine (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..99f6147444
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3));\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "שם רווח "
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "שם רווח "
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "שם רווח "
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "מרכיב מתחם (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "מרכיב מתחם (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "מרכיב מתחם (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "הראה שם"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "דף-בית של האירגון"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "דף-בית של האירגון"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "דף-בית של האירגון"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "השם הרשמי של האירגון"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "השם הרשמי של האירגון"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "השם הרשמי של האירגון"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "השתייכות"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "השתייכות"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "השתייכות"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "פרופיל הבטחת זהות"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "פרופיל הבטחת זהות"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "פרופיל הבטחת זהות"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "אישור הקשור לשירות"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "אישור הקשור לשירות"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "אישור הקשור לשירות"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "כינוי"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "כינוי"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "כינוי"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "שם מזהה (DN) של אירגון הבית"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "שם מזהה (DN) של אירגון הבית"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "שם מזהה (DN) של אירגון הבית"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "שם מזהה (DN) של היחידה באירגון הבית"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "שם מזהה (DN) של היחידה באירגון הבית"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "שם מזהה (DN) של היחידה באירגון הבית"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "השתייכות עיקרית"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "השתייכות עיקרית"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "השתייכות עיקרית"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "שם מזהה (DN) של היחידה העיקרית באירגון הבית"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "שם מזהה (DN) של היחידה העיקרית באירגון הבית"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "שם מזהה (DN) של היחידה העיקרית באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "שייכות באירגון הבית"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "שייכות באירגון הבית"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "שייכות באירגון הבית"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "מס' פקס"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "מס' פקס"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "מס' פקס"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "שם פרטי"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "שם פרטי"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "שם פרטי"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "טלפון בבית"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "טלפון בבית"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "טלפון בבית"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "כתובת דואר בבית"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "כתובת דואר בבית"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "כתובת דואר בבית"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "תמונה"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "תמונה"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "תמונה"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "איזור"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "איזור"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "איזור"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "סיווג URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "סיווג URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "סיווג URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "דואר"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "דואר"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "דואר"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "מנהל"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "מנהל"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "מנהל"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "נייד"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "נייד"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "נייד"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "מספר אירגוני"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "מספר אירגוני"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "מספר אירגוני"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "תאריך לידה"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "תאריך לידה"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "תאריך לידה"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "מספר זהות מקומי"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "מספר זהות מקומי"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "מספר זהות מקומי"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "מספר מזהה שניתן על ידי הרשויות הציבוריות"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "מספר מזהה שניתן על ידי הרשויות הציבוריות"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "מספר מזהה שניתן על ידי הרשויות הציבוריות"
+
+# English string: Organization name
+msgid "o"
+msgstr "שם אירגון"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "שם אירגון"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "שם אירגון"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "יחידה בארגון"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "יחידה בארגון"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "יחידה בארגון"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "תא דואר"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "תא דואר"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "תא דואר"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "כתובת דואר"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "כתובת דואר"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "כתובת דואר"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "מיקוד"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "מיקוד"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "מיקוד"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "שפה מועדפת"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "שפה מועדפת"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "שפה מועדפת"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "שם המתחם של אירגון הבית"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "שם המתחם של אירגון הבית"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "שם המתחם של אירגון הבית"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "שם המתחם של אירגון הבית"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "רכיבי המידע האישי"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "רכיבי המידע האישי"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "רכיבי המידע האישי"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "רכיבי המידע האישי"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "שם משפחה"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "שם משפחה"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "שם משפחה"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "רחוב"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "רחוב"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "רחוב"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "מספר טלפון"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "מספר טלפון"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "מספר טלפון"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "תואר"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "תואר"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "תואר"
+
+# English string: User ID
+msgid "uid"
+msgstr "מזהה משתמש"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "מזהה משתמש"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "מזהה משתמש"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "הגיבוב של סיסמת המשתמש"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "הגיבוב של סיסמת המשתמש"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "הגיבוב של סיסמת המשתמש"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "שם רווח "
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "הראה שם"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "הראה שם"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "השם העיקרי באירגון הבית"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "מזהה משתמש גלובלי"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "מס' פקס"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "שם פרטי"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "שם פרטי"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "שם פרטי"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "שם פרטי"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "שם פרטי"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "טלפון בבית"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "איזור"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "סיווג URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "סיווג URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "דואר"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "דואר"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "דואר"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "דואר"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "דואר"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "נייד"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "שם אירגון"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "מיקוד"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "מיקוד"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "שפה מועדפת"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "שפה מועדפת"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "שפה מועדפת"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "שפה מועדפת"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "שפה מועדפת"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "שם משפחה"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "שם משפחה"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "שם משפחה"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "שם משפחה"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "שם משפחה"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "מספר טלפון"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "מספר טלפון"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "תואר"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "תואר"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "מזהה משתמש"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "מזהה משתמש"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "מזהה משתמש"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "מזהה משתמש"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "מזהה משתמש"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/messages.po
index 05975ac511..4983a25aa8 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/he/LC_MESSAGES/messages.po
@@ -50,12 +50,6 @@ msgstr "שגיאה בטעינת המטא-מידע"
 msgid "{admin:metaconv_title}"
 msgstr "מנתח מטא-מידע"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "אישור הקשור לשירות"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "תמונה"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "לא נמצאו שגיאות."
 
@@ -126,9 +120,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "חזור לדף ההתקנה של SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "ספק זהות מרוחק מסוג איחוד-WS"
-
 msgid "{errors:error_header}"
 msgstr "שגיאה ב SimpleSAMLphp"
 
@@ -145,18 +136,12 @@ msgstr ""
 "ישנה בעייה בהגדרות של התקנת ה SimpleSAMLphp שלך. אם אתה מנהל המערכת של "
 "שירות זה, כדי שתוודא שהגדרות מהמטא-מידע שלך נכונות."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "שם מזהה (DN) של אירגון הבית"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "התקבלה בקשה לא חוקית"
 
 msgid "{status:sessionsize}"
 msgstr "גודל שיחה: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "כתובת דואר"
-
 msgid "{logout:title}"
 msgstr "התנתקות מהמערכת"
 
@@ -178,30 +163,15 @@ msgstr "בהשעייה"
 msgid "{admin:cfg_check_header}"
 msgstr "בדיקת הגדרות"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "שייכות באירגון הבית"
-
-msgid "{attributes:attribute_sn}"
-msgstr "שם משפחה"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "שלח הודעה"
 
 msgid "{status:logout}"
 msgstr "התנתקות"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "שם אירגון"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "מספר טלפון"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "הפרמטרים שנשלחו לשירות גילוי לא היו על פי מפרט."
 
-msgid "{attributes:attribute_mail}"
-msgstr "דואר"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "שגיאה אירעה בניסיון ליצור את בקשת ה- SAML."
 
@@ -211,9 +181,6 @@ msgstr "שדות רשות"
 msgid "{logout:return}"
 msgstr "חזרה לשרות"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "הראה שם"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "אתה יכול <a href=\"%METAURL%\">לקבל את המטא מידע בכתובת נפרדת</a>:"
 
@@ -225,9 +192,6 @@ msgstr ""
 "אתה יכול לכבות את מצב בדיקת הבאגים בקובץ בההגדרות הגלובלי של "
 "SimpleSAMLphp <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "כתובת דואר בבית"
-
 msgid "{disco:select}"
 msgstr "בחר"
 
@@ -252,9 +216,6 @@ msgstr "ספק זהות זה קיבל בקשת הזדהות מספק שירות,
 msgid "{logout:logout_all_question}"
 msgstr "האם אתה רוצה להתנתק מכל השרותים המוזכרים למעלה?"
 
-msgid "{attributes:attribute_title}"
-msgstr "תואר"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "אין גישה"
 
@@ -269,9 +230,6 @@ msgstr "אין RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "אבד מידע המצב, ואי אפשר להתחל מחדש את הבקשה"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "מספר מזהה שניתן על ידי הרשויות הציבוריות"
-
 msgid "{login:password}"
 msgstr "סיסמה"
 
@@ -296,24 +254,15 @@ msgstr "שגיאה בעיבוד בקשת התנתקות"
 msgid "{admin:metaover_errorentry}"
 msgstr "שגיאה ברשומת מטא-מידע זו"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "השתייכות"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "לא נמצא מטא-מידע"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "שם פרטי"
-
 msgid "{login:contact_info}"
 msgstr "צור קשר"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "חריגה לא מטופלת "
 
-msgid "{status:validfor}"
-msgstr "השיחה שלך ברת-תוקף לעוד %SECONDS% שניות מעכשיו."
-
 msgid "{status:header_saml20_sp}"
 msgstr "הדגמת דוגמה לס\"ש מסוג SAML 2.0"
 
@@ -346,30 +295,18 @@ msgstr "בחר קובץ הגדרות לבדיקה:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "ההיזדהות נכשלה: התעודה שהדפדפן שלח לא ידועה"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "דף-בית של האירגון"
-
 msgid "{logout:logging_out_from}"
 msgstr "מתנתק מהשרותים הבאים:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "%SP%-נותקת בהצלחה מ"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "ספק שירות מקומי מסוג איחוד-WS"
-
 msgid "{errors:errorreport_text}"
 msgstr "דוח השגיאה נשלח למנהל המערכת."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "תאריך לידה"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "שגיאה בזמן  הניסיון לעבד את בקשת התנתקות."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "מזהה משתמש גלובלי"
-
 msgid "{logout:success}"
 msgstr "התנתקת בהצלחה מכל השרותים הכתובים למעלה"
 
@@ -379,12 +316,6 @@ msgstr "הודעות"
 msgid "{errors:descr_USERABORTED}"
 msgstr "ההיזדהות בוטלה על ידי המשתמש"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "השתייכות עיקרית"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "מיקוד"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "שגיאה בהתקשרות עם שרת שהם."
 
@@ -397,9 +328,6 @@ msgstr "מטא-מידע של סש מסוג SAML 2.0 "
 msgid "{admin:metaconv_converted}"
 msgstr "מטא-מידע מומר"
 
-msgid "{attributes:attribute_cn}"
-msgstr "שם רווח "
-
 msgid "{logout:completed}"
 msgstr "הסתיים"
 
@@ -408,18 +336,9 @@ msgstr ""
 "הסיסמה בהגדרות (auth.adminpassword)  לא שונתה מהערך ההתחלתי. אנא ערוך את "
 "קובץ ההגדרות."
 
-msgid "{attributes:attribute_ou}"
-msgstr "יחידה בארגון"
-
 msgid "{general:service_provider}"
 msgstr "ספק שירות"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "טלפון בבית"
-
-msgid "{attributes:attribute_dc}"
-msgstr "מרכיב מתחם (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "ישנה שגיאה בבקשה לדף זה. הסיבה הייתה: %REASON%"
 
@@ -438,23 +357,14 @@ msgstr "הכנס שם משתמש וסיסמה"
 msgid "{errors:report_explain}"
 msgstr "הסבר מה עשית כשהתרחשה השגיאה..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "מנהל"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "לא סופקה תגובת SAML"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "כינוי"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "ניגשת לממשק שירות ההתנתקות הכללית, אבל לא סיפקת בקשת או תגובת התנתקות של "
 "SAML."
 
-msgid "{attributes:attribute_street}"
-msgstr "רחוב"
-
 msgid "{login:organization}"
 msgstr "אירגון"
 
@@ -488,9 +398,6 @@ msgstr "החלף אירגון בית"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "אפשרויות מיותרות בקובץ ההגדרות"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "סיווג URI"
-
 msgid "{errors:report_email}"
 msgstr "כתובת דואל:"
 
@@ -503,9 +410,6 @@ msgstr "סיסמה לא מוגדרת"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "יוזם הבקשה לא סיפק פרמטר RelayState המציין לאן ללכת ."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "שם רשמי"
-
 msgid "{status:header_diagnostics}"
 msgstr "איבחון SimpleSAMLphp"
 
@@ -514,9 +418,6 @@ msgstr ""
 "שלום, זהו דף המצב של SimpleSAMLphp. כאן אפשר לראות אם השיחה הופסקה, כמה "
 "זמן היא תמשיך עד להפסקתה וכל התכונות המצורפות לשיחה."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "שם המתחם של אירגון הבית"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "דף לא נמצא"
 
@@ -535,30 +436,18 @@ msgstr "כדי להסתכל על הפרטים של ישות SAML, לחץ על כ
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "תעודה לא-חוקית"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "שם מזהה (DN) של היחידה באירגון הבית"
-
 msgid "{general:remember}"
 msgstr "זכור"
 
 msgid "{disco:selectidp}"
 msgstr "בחר את ספק הזהות שלך"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "תא דואר"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "השם העיקרי באירגון הבית"
-
 msgid "{login:help_desk_email}"
 msgstr "שלח דואל לתיכה הטכנית"
 
 msgid "{login:help_desk_link}"
 msgstr "תמיכה טכנית"
 
-msgid "{attributes:attribute_uid}"
-msgstr "מזהה משתמש"
-
 msgid "{errors:title_CASERROR}"
 msgstr "שגיאת שהם"
 
@@ -577,12 +466,6 @@ msgstr "זכור את הבחירה שלי"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "ספק שירות מקומי מסוג SAML 2.0"
 
-msgid "{attributes:attribute_l}"
-msgstr "איזור"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "פרופיל הבטחת זהות"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "בתבנית קובץ SimpleSAMLphp שטוח - למקרים בהם אתה משתמש בישות SimpleSAMLphp"
@@ -627,9 +510,6 @@ msgstr "הודעה"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "תעודה לא ידועה"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "מס' פקס"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "שגיאת LDAP"
 
@@ -646,15 +526,9 @@ msgstr ""
 "שגיאה זו היא ככל הנראה בשל התנהגות בלתי צפויה או שגויה של SimpleSAMLphp. "
 "צור קשר עם מנהל המערכת של שירות ההתחברות הזה, ושלח לו את השגיאה למעלה."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "נייד"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "ספק זהות מקומי מסוג Shib 1.3"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "שפה מועדפת"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "לא הצגת תעודה חוקית "
 
@@ -667,15 +541,6 @@ msgstr "שדות הרשות הבאים לא נמצאו"
 msgid "{logout:logout_only}"
 msgstr "לא, רק %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "שם אירגון"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "שם מזהה (DN) של היחידה העיקרית באירגון הבית"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "מספר זהות מקומי"
-
 msgid "{login:next}"
 msgstr "הבא"
 
@@ -691,9 +556,6 @@ msgstr "הדף הניתן לא נמצא. הסיבה הייתה %REASON% והכת
 msgid "{errors:title_NOCERT}"
 msgstr "אין תעודה"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "הגיבוב של סיסמת המשתמש"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "מידע ההתנתקות אבד"
 
@@ -708,30 +570,18 @@ msgstr ""
 "הנה המטא-מידע ש SimpleSAMLphp ייצר עבורך. אתה יכול לשלוח את מסמך "
 "המטא-מידע לשותפים מהימנים כדי ליצור איחוד מאובטח. "
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "רכיבי המידע האישי"
-
-msgid "{status:header_wsfed}"
-msgstr "הדגמת דוגמה לס\"ש מסוג WS-Fed"
-
 msgid "{admin:metadata_cert}"
 msgstr "תעודות"
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr "ההיזדהות נכשלה: התעודה שהדפדפן שלח לא חוקית או לא ניתנת לקריאה"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "השם הרשמי של האירגון"
-
 msgid "{status:header_shib}"
 msgstr "הדגמה ל- Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "נתח"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "מספר אירגוני"
-
 msgid "Person's principal name at home organization"
 msgstr "השם העיקרי באירגון הבית"
 
@@ -1052,8 +902,8 @@ msgstr ""
 "צור קשר עם מנהל המערכת של שירות ההתחברות הזה, ושלח לו את השגיאה למעלה."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "השיחה שלך ברת-תוקף לעוד %SECONDS% שניות מעכשיו."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "השיחה שלך ברת-תוקף לעוד %remaining% שניות מעכשיו."
 
 msgid "Domain component (DC)"
 msgstr "מרכיב מתחם (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..ff787bb93f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Ime i prezime"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Ime i prezime"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Ime i prezime"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domenska komponenta (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domenska komponenta (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domenska komponenta (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Mrežno ime"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Web stranice ustanove"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Web stranice ustanove"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Web stranice ustanove"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Službeni naziv ustanove"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Službeni naziv ustanove"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Službeni naziv ustanove"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Povezanost s ustanovom"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Povezanost s ustanovom"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Povezanost s ustanovom"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Usklađenost sa standardima zaštite korisničkih podataka"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Usklađenost sa standardima zaštite korisničkih podataka"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Usklađenost sa standardima zaštite korisničkih podataka"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Pripadnost grupi"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Pripadnost grupi"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Pripadnost grupi"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Nadimak"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Nadimak"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Nadimak"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Jedinstveni naziv (DN) korisnikove matične ustanove"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Jedinstveni naziv (DN) korisnikove matične ustanove"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Jedinstveni naziv (DN) korisnikove matične ustanove"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove organizacijske jedinice"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove organizacijske jedinice"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Jedinstveni naziv (DN) korisnikove organizacijske jedinice"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Temeljna povezanost s ustanovom"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Temeljna povezanost s ustanovom"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Temeljna povezanost s ustanovom"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacijske jedinice"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacijske jedinice"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacijske jedinice"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Korisnička oznaka"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Korisnička oznaka"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Korisnička oznaka"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Povezanost s matičnom ustanovom"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Povezanost s matičnom ustanovom"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Povezanost s matičnom ustanovom"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Broj telefaksa"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Broj telefaksa"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Broj telefaksa"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Ime"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Kućni telefonski broj"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Kućni telefonski broj"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Kućni telefonski broj"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Kućna poštanska adresa"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Kućna poštanska adresa"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Kućna poštanska adresa"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Slika u JPEG formatu"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Slika u JPEG formatu"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Slika u JPEG formatu"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Mjesto (lokalitet)"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Mjesto (lokalitet)"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Mjesto (lokalitet)"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI adresa"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI adresa"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI adresa"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Elektronička adresa"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Elektronička adresa"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Elektronička adresa"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Voditelj"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Voditelj"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Voditelj"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Broj mobilnog telefona"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Broj mobilnog telefona"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Broj mobilnog telefona"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Brojčani identifikator ustanove"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Brojčani identifikator ustanove"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Brojčani identifikator ustanove"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Datum rođenja"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Datum rođenja"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Datum rođenja"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokalni brojčani identifikator osobe u ustanovi (LOCAL_NO)"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokalni brojčani identifikator osobe u ustanovi (LOCAL_NO)"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokalni brojčani identifikator osobe u ustanovi (LOCAL_NO)"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Brojčani identifikator osobe"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Brojčani identifikator osobe"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Brojčani identifikator osobe"
+
+# English string: Organization name
+msgid "o"
+msgstr "Naziv matične ustanove"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Naziv matične ustanove"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Naziv matične ustanove"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizacijska jedinica"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizacijska jedinica"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizacijska jedinica"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Broj poštanskog pretinca"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Broj poštanskog pretinca"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Broj poštanskog pretinca"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Poštanska adresa"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Poštanska adresa"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Poštanska adresa"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Broj pošte"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Broj pošte"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Broj pošte"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Primarni jezik"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Primarni jezik"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Primarni jezik"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Oznaka matične ustanove"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Oznaka matične ustanove"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Oznaka matične ustanove"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Oznaka matične ustanove"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Postavke privatnosti"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Postavke privatnosti"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Postavke privatnosti"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Postavke privatnosti"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Prezime"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Ulica"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Ulica"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Ulica"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Broj telefona"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Broj telefona"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Broj telefona"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Naziv"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Naziv"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Naziv"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identifikator korisnika u ustanovi"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identifikator korisnika u ustanovi"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identifikator korisnika u ustanovi"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Kriptirana zaporka"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Kriptirana zaporka"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Kriptirana zaporka"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Ime i prezime"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Mrežno ime"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Mrežno ime"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Korisnička oznaka"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Korisnička oznaka"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Korisnička oznaka"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Korisnička oznaka"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Korisnička oznaka"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Broj telefaksa"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Ime"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Ime"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Ime"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Kućni telefonski broj"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Mjesto (lokalitet)"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI adresa"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI adresa"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Elektronička adresa"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Elektronička adresa"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Elektronička adresa"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Elektronička adresa"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Elektronička adresa"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Broj mobilnog telefona"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Naziv matične ustanove"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Broj pošte"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Broj pošte"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Primarni jezik"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Primarni jezik"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Primarni jezik"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Primarni jezik"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Primarni jezik"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Prezime"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Broj telefona"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Broj telefona"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Naziv"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Naziv"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identifikator korisnika u ustanovi"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identifikator korisnika u ustanovi"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identifikator korisnika u ustanovi"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identifikator korisnika u ustanovi"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identifikator korisnika u ustanovi"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/messages.po
index 7e3e9bdc11..0903bbbf65 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/hr/LC_MESSAGES/messages.po
@@ -54,12 +54,6 @@ msgstr "Greška prilikom učitavanja metapodataka"
 msgid "{admin:metaconv_title}"
 msgstr "Analizator metapodataka"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Pripadnost grupi"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Slika u JPEG formatu"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nije pronađena niti jedna greška."
 
@@ -140,9 +134,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Natrag na početnu stranicu SimpleSAMLphp instalacije"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation autentifikacijski servis (udaljeni)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp greška"
 
@@ -162,18 +153,12 @@ msgstr ""
 "administrator ovog servisa, provjerite jesu li svi metapodaci u "
 "konfiguraciji ispravni."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Jedinstveni naziv (DN) korisnikove matične ustanove"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Dobiveni zahtjev nije ispravan"
 
 msgid "{status:sessionsize}"
 msgstr "Veličina sjednice: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Poštanska adresa"
-
 msgid "{logout:title}"
 msgstr "Odjavljeni ste"
 
@@ -195,30 +180,15 @@ msgstr "Na čekanju"
 msgid "{admin:cfg_check_header}"
 msgstr "Provjera konfiguracije"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Povezanost s matičnom ustanovom"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Prezime"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Pošalji poruku"
 
 msgid "{status:logout}"
 msgstr "Odjava"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Naziv ustanove"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Broj telefona"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Parametri poslani lokacijskom servisu nisu u ispravnom formatu."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Elektronička adresa"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Pojavila se greška prilikom kreiranja SAML zahtjeva."
 
@@ -228,9 +198,6 @@ msgstr "Opcionalna polja"
 msgid "{logout:return}"
 msgstr "Povratak u aplikaciju"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Mrežno ime"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Metapodaci su dostupni na <a href=\"%METAURL%\">ovoj adresi</a>:"
 
@@ -242,9 +209,6 @@ msgstr ""
 "Mod za otkrivanje grešaka možete isključiti u glavnoj SimpleSAMLphp "
 "konfiguracijskoj datoteci <tt>config/config.php</tt>. "
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Kućna poštanska adresa"
-
 msgid "{disco:select}"
 msgstr "Odaberi"
 
@@ -271,9 +235,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Želite li se odjaviti iz svih gore navedenih servisa?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Naziv"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Pristup nije dozvoljen"
 
@@ -288,9 +249,6 @@ msgstr "Parametar RelayState nije zadan"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Podaci o stanju su izgubljeni i zahtjev se ne može reproducirati"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Brojčani identifikator osobe"
-
 msgid "{login:password}"
 msgstr "Zaporka"
 
@@ -317,24 +275,15 @@ msgstr "Greška prilikom odjavljivanja"
 msgid "{admin:metaover_errorentry}"
 msgstr "Ovaj zapis metapodataka sadrži grešku"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Povezanost s ustanovom"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metapodaci nisu pronađeni"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Ime"
-
 msgid "{login:contact_info}"
 msgstr "Kontakt podaci:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Neobrađena iznimka"
 
-msgid "{status:validfor}"
-msgstr "Vaša sjednica bit će valjana još %SECONDS% sekundi."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Primjer SAML 2.0 davatelja usluge"
 
@@ -370,30 +319,18 @@ msgstr ""
 "Neuspješna autentifikacija: digitalni certifikat kojeg je poslao vaš web "
 "preglednik je nepoznat"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Web stranice ustanove"
-
 msgid "{logout:logging_out_from}"
 msgstr "Odjavljujete se iz sljedećih servisa:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Uspješno ste odjavljeni iz %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation davatelj usluge (lokalni)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Prijava greške poslana je administratorima."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Datum rođenja"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Došlo je do greške prilikom obrade zahtjeva za odjavljivanjem."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Trajni anonimni identifikator"
-
 msgid "{logout:success}"
 msgstr "Uspješno ste se odjavili iz svih gore navedenih servisa."
 
@@ -403,12 +340,6 @@ msgstr "Napomene"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Korisnik je prekinuo proces autentifikacie"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Temeljna povezanost s ustanovom"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Broj pošte"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Greška u komunikaciji sa CAS poslužiteljem."
 
@@ -421,9 +352,6 @@ msgstr "SAML 2.0 metapodaci o davatelju usluge"
 msgid "{admin:metaconv_converted}"
 msgstr "Pretvoreni metapodaci"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Ime i prezime"
-
 msgid "{logout:completed}"
 msgstr "Završeno"
 
@@ -433,18 +361,9 @@ msgstr ""
 "auth.adminpassword) u konfiguraciji nije promjenjena. Molimo promjenite "
 "administratorsku zaporku u konfiguracijskoj datoteci."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizacijska jedinica"
-
 msgid "{general:service_provider}"
 msgstr "Davatelj usluge"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Kućni telefonski broj"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domenska komponenta (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Dogodila se greška prilikom dohvaćanja ove stranice. Razlog: %REASON%"
 
@@ -463,24 +382,15 @@ msgstr "Unesite korisničku oznaku i zaporku"
 msgid "{errors:report_explain}"
 msgstr "Opišite što ste radili kad se pojavila greška..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Voditelj"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nije dostavljen nikakav SAML odgovor"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Nadimak"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Pristupili ste sučelju za odjavljivanje iz sustava jedinstvene "
 "autentifikacije, ali niste dostavili SAML LogoutRequest ili "
 "LogoutResponse poruku."
 
-msgid "{attributes:attribute_street}"
-msgstr "Ulica"
-
 msgid "{login:organization}"
 msgstr "Ustanova"
 
@@ -520,9 +430,6 @@ msgstr "Odaberite matičnu ustanovu"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Suvišni parametri u konfiguracijskoj datoteci"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI adresa"
-
 msgid "{errors:report_email}"
 msgstr "E-mail adresa:"
 
@@ -538,9 +445,6 @@ msgstr ""
 "parametar koji sadrži adresu na koju treba preusmjeriti korisnikov web "
 "preglednik nakon uspješne autentifikacije."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Službeni naziv"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp dijagnostika"
 
@@ -551,9 +455,6 @@ msgstr ""
 "dugo vaša sjednica trajati te sve atribute koji su vezani uz vašu "
 "sjednicu."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Oznaka matične ustanove"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Stranica nije pronađena"
 
@@ -572,30 +473,18 @@ msgstr "Da biste vidjeli detalje o SAML entitetu, kliknite na njegovo zaglavlje.
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certifikat nije valjan"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Jedinstveni naziv (DN) korisnikove organizacijske jedinice"
-
 msgid "{general:remember}"
 msgstr "Zapamti moj odabir"
 
 msgid "{disco:selectidp}"
 msgstr "Odaberite autentifikacijski servis"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Broj poštanskog pretinca"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Korisnička oznaka"
-
 msgid "{login:help_desk_email}"
 msgstr "Pošaljite e-mail službi za podršku korisnicima"
 
 msgid "{login:help_desk_link}"
 msgstr "Stranice službe za podršku korisnicima"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Identifikator korisnika u ustanovi"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS greška"
 
@@ -616,12 +505,6 @@ msgstr "Zapamti moj odabir"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 davatelj usluge (lokalni)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Mjesto (lokalitet)"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Usklađenost sa standardima zaštite korisničkih podataka"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "U SimpleSAMLphp formatu - koristite ovu opciju ako se na drugoj strani "
@@ -666,9 +549,6 @@ msgstr "Poruka"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Nepoznat digitalni certifikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Broj telefaksa"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP greška"
 
@@ -687,15 +567,9 @@ msgstr ""
 "neispravne konfiguracije programskog alata SimpleSAMLphp. Kontaktirajte "
 "administratore ovog servisa i pošaljite im gore navedenu poruku o greški."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Broj mobilnog telefona"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 autentifikacijski servis (lokalni)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Primarni jezik"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Niste predočili valjani certifikat."
 
@@ -708,15 +582,6 @@ msgstr "Nisu pronađena sljedeća opcionalna polja"
 msgid "{logout:logout_only}"
 msgstr "Ne, samo iz %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Naziv matične ustanove"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacijske jedinice"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokalni brojčani identifikator osobe u ustanovi (LOCAL_NO)"
-
 msgid "{login:next}"
 msgstr "Dalje"
 
@@ -736,9 +601,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Nema digitalnog certifikata"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Kriptirana zaporka"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informacija o odjavljivanju je izgubljena"
 
@@ -755,12 +617,6 @@ msgstr ""
 "identiteta u koje imate povjerenja i s kojima želite uspostaviti "
 "federaciju."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Postavke privatnosti"
-
-msgid "{status:header_wsfed}"
-msgstr "Primjer WS-Fed davatelja usluge"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certifikati"
 
@@ -769,18 +625,12 @@ msgstr ""
 "Neuspješna autentifikacija: digitalni certifikat koji je poslao vaš web "
 "preglednik nije ispravan ili se ne može pročitati"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Službeni naziv ustanove"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth primjer"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analiziraj"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Brojčani identifikator ustanove"
-
 msgid "Person's principal name at home organization"
 msgstr "Korisnička oznaka"
 
@@ -1117,8 +967,8 @@ msgstr ""
 "administratore ovog servisa i pošaljite im gore navedenu poruku o greški."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Vaša sjednica bit će valjana još %SECONDS% sekundi."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Vaša sjednica bit će valjana još %remaining% sekundi."
 
 msgid "Domain component (DC)"
 msgstr "Domenska komponenta (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..34b2c4536d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Teljes név"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Teljes név"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Teljes név"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domain összetevő (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domain összetevő (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domain összetevő (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Megjeleníthető név"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Szervezet weboldala"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Szervezet weboldala"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Szervezet weboldala"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Szervezet hivatalos neve"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Szervezet hivatalos neve"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Szervezet hivatalos neve"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Viszony"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Viszony"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Viszony"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Ezekre a szolgáltatásokra jogosult"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Ezekre a szolgáltatásokra jogosult"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Ezekre a szolgáltatásokra jogosult"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Becenév"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Becenév"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Becenév"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "A felhasználó munkahelyének azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "A felhasználó munkahelyének azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "A felhasználó munkahelyének azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "A felhasználó szervezeti egység azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "A felhasználó szervezeti egység azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "A felhasználó szervezeti egység azonosító neve (DN-je)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Elsődleges viszony"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Elsődleges viszony"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Elsődleges viszony"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "A személy elsődleges szervezeti egységének azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "A személy elsődleges szervezeti egységének azonosító neve (DN-je)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "A személy elsődleges szervezeti egységének azonosító neve (DN-je)"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Saját intézményhez való viszony"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Saját intézményhez való viszony"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Saját intézményhez való viszony"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Állandó anonim azonosító"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Állandó anonim azonosító"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Állandó anonim azonosító"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Keresztnév"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Keresztnév"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Keresztnév"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Otthoni telefon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Otthoni telefon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Otthoni telefon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Otthoni levelezési cím"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Otthoni levelezési cím"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Otthoni levelezési cím"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Fotó JPEG formátumban"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Fotó JPEG formátumban"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Fotó JPEG formátumban"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Település"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Település"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Település"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Honlap cím"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Honlap cím"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Honlap cím"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobil"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobil"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobil"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Szervezeti szám"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Szervezeti szám"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Szervezeti szám"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Születési dátum"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Születési dátum"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Születési dátum"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Helyi azonosító szám"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Helyi azonosító szám"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Helyi azonosító szám"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Társadalombiztosítási azonosító szám"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Társadalombiztosítási azonosító szám"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Társadalombiztosítási azonosító szám"
+
+# English string: Organization name
+msgid "o"
+msgstr "Szervezet neve"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Szervezet neve"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Szervezet neve"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Szervezeti egység"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Szervezeti egység"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Szervezeti egység"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postafiók"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postafiók"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postafiók"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Levelezési cím"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Levelezési cím"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Levelezési cím"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Irányítószám"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Irányítószám"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Irányítószám"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Elsődleges nyelv"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Elsődleges nyelv"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Elsődleges nyelv"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Saját intézmény domain neve"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Saját intézmény domain neve"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Saját intézmény domain neve"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Saját intézmény domain neve"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Védett adatokat tartalmazó attribútumok"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Védett adatokat tartalmazó attribútumok"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Védett adatokat tartalmazó attribútumok"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Védett adatokat tartalmazó attribútumok"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Vezetéknév"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Vezetéknév"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Vezetéknév"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Utca"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Utca"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Utca"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonszám"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonszám"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonszám"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Cím"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Cím"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Cím"
+
+# English string: User ID
+msgid "uid"
+msgstr "Felhasználói azonosító"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Felhasználói azonosító"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Felhasználói azonosító"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "A felhasználó jelszava (kódolva)"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "A felhasználó jelszava (kódolva)"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "A felhasználó jelszava (kódolva)"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Teljes név"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Megjeleníthető név"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Megjeleníthető név"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Állandó azonosító a saját intézményben"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Állandó anonim azonosító"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Állandó anonim azonosító"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Állandó anonim azonosító"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Állandó anonim azonosító"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Keresztnév"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Keresztnév"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Keresztnév"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Keresztnév"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Keresztnév"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Otthoni telefon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Település"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Honlap cím"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Honlap cím"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobil"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Szervezet neve"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Irányítószám"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Irányítószám"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Elsődleges nyelv"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Elsődleges nyelv"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Elsődleges nyelv"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Elsődleges nyelv"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Elsődleges nyelv"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Vezetéknév"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Vezetéknév"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Vezetéknév"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Vezetéknév"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Vezetéknév"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonszám"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonszám"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Cím"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Cím"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Felhasználói azonosító"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Felhasználói azonosító"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Felhasználói azonosító"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Felhasználói azonosító"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Felhasználói azonosító"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/messages.po
index 863e652e35..12c1bee662 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/hu/LC_MESSAGES/messages.po
@@ -48,12 +48,6 @@ msgstr "Metaadat betöltési hiba"
 msgid "{admin:metaconv_title}"
 msgstr "Metaadat értelmező"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Ezekre a szolgáltatásokra jogosult"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Fotó JPEG formátumban"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nincs hiba."
 
@@ -132,9 +126,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Vissza a SimpleSAMLphp telepítő oldalára"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation alkalmazásszolgáltató (távoli)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp hiba"
 
@@ -152,18 +143,12 @@ msgstr ""
 "adminisztrátora, bizonyosodjon meg arról, hogy a metaadatok helyesen "
 "vannak beállítva!"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "A felhasználó munkahelyének azonosító neve (DN-je)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Hibás kérés"
 
 msgid "{status:sessionsize}"
 msgstr "Munkamenet mérete: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Levelezési cím"
-
 msgid "{logout:title}"
 msgstr "Sikeres kilépés"
 
@@ -185,32 +170,17 @@ msgstr "Felfüggesztve"
 msgid "{admin:cfg_check_header}"
 msgstr "Beállítások ellenőrzése"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Saját intézményhez való viszony"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Vezetéknév"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Üzenet küldése"
 
 msgid "{status:logout}"
 msgstr "Kilépés"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Szervezet neve"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonszám"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "A felfedező szolgáltatás (discovery service) olyan paramétereket kapott, "
 "amelyek nem felelnek meg a specifikációnak."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Hiba történt a SAML kérés létrehozása közben."
 
@@ -220,9 +190,6 @@ msgstr "Opcionális mező"
 msgid "{logout:return}"
 msgstr "Vissza a szolgáltatáshoz"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Megjeleníthető név"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "A következő címről <a href=\"%METAURL%\">töltheti le a metaadatokat</a>:"
 
@@ -234,9 +201,6 @@ msgstr ""
 "A SimpleSAMLphp <tt>config/config.php</tt> fájljában kikapcsolhatja a "
 "hibakereső módot."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Otthoni levelezési cím"
-
 msgid "{disco:select}"
 msgstr "Választ"
 
@@ -266,9 +230,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Ki akar jelentkezni az összes fenti alkalmazásból?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Cím"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Hozzáférés megtagadva"
 
@@ -281,9 +242,6 @@ msgstr "Nincs RelayState paraméter"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Állapotinformáció elveszett, a kérést nem lehet újraindítani"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Társadalombiztosítási azonosító szám"
-
 msgid "{login:password}"
 msgstr "Jelszó"
 
@@ -310,24 +268,15 @@ msgstr "Feldolgozhatatlan kijelentkezési kérés"
 msgid "{admin:metaover_errorentry}"
 msgstr "Hiba ebben a metaadat bejegyzésben"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Viszony"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata nem található"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Keresztnév"
-
 msgid "{login:contact_info}"
 msgstr "Elérési információk"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Kezeletlen kivétel"
 
-msgid "{status:validfor}"
-msgstr "Az ön munkamenete még %SECONDS% másodpercig érvényes"
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP próba példa"
 
@@ -361,30 +310,18 @@ msgstr "Válassza ki az ellenőrizendő konfigurációs állományt"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Azonosítási hiba: a böngésző által küldött tanúsítványt ismeretlen típusú."
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Szervezet weboldala"
-
 msgid "{logout:logging_out_from}"
 msgstr "Kilépés az alábbi szolgáltatásokból:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Sikeresen kilépett a(z) %SP% szolgáltatásból"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation alkalmazásszolgáltató (helyi)"
-
 msgid "{errors:errorreport_text}"
 msgstr "A hibabejelentést elküldtük az adminisztrátoroknak."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Születési dátum"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "A kijelentkezési kérés (logout request) feldolgozása során hiba történt."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Állandó anonim azonosító"
-
 msgid "{logout:success}"
 msgstr "Sikeresen kijelentkezett az fent felsorolt összes alkalmazásból."
 
@@ -394,12 +331,6 @@ msgstr "Megjegyzések"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Az azonosítást a felhasználó megszakította"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Elsődleges viszony"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Irányítószám"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Hiba történt a CAS kiszolgálóval való kommunikáció közben."
 
@@ -412,9 +343,6 @@ msgstr "SAML 2.0 SP Metaadatok"
 msgid "{admin:metaconv_converted}"
 msgstr "Konvertált metaadatok"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Teljes név"
-
 msgid "{logout:completed}"
 msgstr "Befejezve"
 
@@ -423,18 +351,9 @@ msgstr ""
 "Még nem lett megváltoztatva a karbantartói jelszó (auth.adminpassword) a "
 "konfigurációs fájlban, kérjük, változtassa meg most! "
 
-msgid "{attributes:attribute_ou}"
-msgstr "Szervezeti egység"
-
 msgid "{general:service_provider}"
 msgstr "Alkalmazásszolgáltató"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Otthoni telefon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain összetevő (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Hiba történt az oldal lekérdezése közben. A hibaüzenet: %REASON%"
 
@@ -453,23 +372,14 @@ msgstr "Felhasználónév és jelszó"
 msgid "{errors:report_explain}"
 msgstr "Írja le milyen lépéseket hajtott végre, aminek végén hiba történt..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nincs SAML válasz"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Becenév"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "A Single Logout interfészen vagy SAML LogoutRequest vagy LogoutResponse "
 "üzenetet kell megadni."
 
-msgid "{attributes:attribute_street}"
-msgstr "Utca"
-
 msgid "{login:organization}"
 msgstr "Szervezet"
 
@@ -507,9 +417,6 @@ msgstr "Válassza ki a szervezetét"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Felesleges opciók a konfigurációs állományban"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Honlap cím"
-
 msgid "{errors:report_email}"
 msgstr "E-mail címek:"
 
@@ -524,9 +431,6 @@ msgstr ""
 "A kérés összeállítója nem adta meg a RelayState paramétert, amely azt "
 "határozza meg, hogy hová irányítsuk tovább."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Hivatalos név (noreduperson)"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp hibakeresés"
 
@@ -536,9 +440,6 @@ msgstr ""
 "munkamenete, mikor lépett be utoljára és a munkamenethez tartozó "
 "attribútumokat."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Saját intézmény domain neve"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Oldal nem található"
 
@@ -557,30 +458,18 @@ msgstr "A SAML entitások részleteiért kattintson a SAML entitás fejlécére"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Érvénytelen tanúsítvány"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "A felhasználó szervezeti egység azonosító neve (DN-je)"
-
 msgid "{general:remember}"
 msgstr "Emlékezzen a hozzájárulásra"
 
 msgid "{disco:selectidp}"
 msgstr "Válasszon személyazonosság-szolgáltatót (IdP)"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postafiók"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Állandó azonosító a saját intézményben"
-
 msgid "{login:help_desk_email}"
 msgstr "Küldjön e-mailt az ügyfélszolgálatnak"
 
 msgid "{login:help_desk_link}"
 msgstr "Ügyfélszolgálat weboldala"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Felhasználói azonosító"
-
 msgid "{login:remember_me}"
 msgstr "Emlékezzen rám"
 
@@ -604,9 +493,6 @@ msgstr "Emlékezzen erre"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 alkalmazásszolgáltató (helyi)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Település"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "SimpleSAMLphp fájl formátumban - akkor használható, ha a másik oldalon "
@@ -651,9 +537,6 @@ msgstr "Üzenet"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Ismeretlen tanúsítvány"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP hiba"
 
@@ -671,15 +554,9 @@ msgstr ""
 "félrekonfigurálásával kapcsolatos. Kérjük, keresse meg a bejelentkező "
 "szolgáltatás adminisztrátorát, és küldje el neki a fenti hibaüzenetet!"
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobil"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 személyazonosság-szolgáltató (helyi)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Elsődleges nyelv"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Nem található hiteles tanúsítvány"
 
@@ -692,15 +569,6 @@ msgstr "A következő opcionális mezők nem találhatók"
 msgid "{logout:logout_only}"
 msgstr "Nem, csak innen: %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Szervezet neve"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "A személy elsődleges szervezeti egységének azonosító neve (DN-je)"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Helyi azonosító szám"
-
 msgid "{login:next}"
 msgstr "Következő"
 
@@ -718,9 +586,6 @@ msgstr "%URL% oldal nem található, a következő ok miatt: %REASON% "
 msgid "{errors:title_NOCERT}"
 msgstr "Hiányzó tanúsítvány."
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "A felhasználó jelszava (kódolva)"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Elveszett kijelentkezési információk"
 
@@ -735,30 +600,18 @@ msgstr ""
 "Ezeket a metaadatokat a SimpleSAMLphp generálta. Ezt a dokumentumot "
 "küldheti el föderációs partnerei számára."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Védett adatokat tartalmazó attribútumok"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP próba példa"
-
 msgid "{admin:metadata_cert}"
 msgstr "Tanúsítványok."
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr "Azonosítási hiba: a böngésző által küldött tanúsítvány hibás."
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Szervezet hivatalos neve"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth próba"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Értelmez"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Szervezeti szám"
-
 msgid "Person's principal name at home organization"
 msgstr "Állandó azonosító a saját intézményben"
 
@@ -1085,8 +938,8 @@ msgstr ""
 "szolgáltatás adminisztrátorát, és küldje el neki a fenti hibaüzenetet!"
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Az ön munkamenete még %SECONDS% másodpercig érvényes"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Az ön munkamenete még %remaining% másodpercig érvényes"
 
 msgid "Domain component (DC)"
 msgstr "Domain összetevő (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..ff63bab785
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Common Name"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Common Name"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Common Name"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domain component(DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domain component(DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domain component(DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nama yang ditampilkan"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Homepage organisasi"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Homepage organisasi"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Homepage organisasi"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nama legal Organisasi"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nama legal Organisasi"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nama legal Organisasi"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Afiliasi"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Afiliasi"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Afiliasi"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Profil penjamin identitas"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Profil penjamin identitas"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Profil penjamin identitas"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Hak mengenai layanan ini"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Hak mengenai layanan ini"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Hak mengenai layanan ini"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Nama panggilan"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Nama panggilan"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Nama panggilan"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) of person's home organization"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) of person's home organization"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) of person's home organization"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Afiliasi utama"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Afiliasi utama"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Afiliasi utama"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) of person's primary Organizational Unit"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) of person's primary Organizational Unit"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Distinguished name (DN) of person's primary Organizational Unit"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Afiliasi di organisasi asal"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Afiliasi di organisasi asal"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Afiliasi di organisasi asal"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "No Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "No Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "No Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Nama"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Nama"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Nama"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telepon rumah"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telepon rumah"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telepon rumah"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Alamat pos rumah"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Alamat pos rumah"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Alamat pos rumah"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Lokalitas"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Lokalitas"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Lokalitas"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Berlabel URL"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Berlabel URL"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Berlabel URL"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Handphone"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Handphone"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Handphone"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Nomor Organisasi"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Nomor Organisasi"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Nomor Organisasi"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Tanggal lahir"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Tanggal lahir"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Tanggal lahir"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Nomor identitas lokal"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Nomor identitas lokal"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Nomor identitas lokal"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Identity number assigned by public authorities"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Identity number assigned by public authorities"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Identity number assigned by public authorities"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nama organisasi"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nama organisasi"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nama organisasi"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizational unit"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizational unit"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizational unit"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "PO Box"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "PO Box"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "PO Box"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Alamat pos"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Alamat pos"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Alamat pos"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Kode pos"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Kode pos"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Kode pos"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Pilihan Bahasa"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Pilihan Bahasa"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Pilihan Bahasa"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Home organization domain name"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Home organization domain name"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Home organization domain name"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Home organization domain name"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Elemen-elemen informasi personal"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Elemen-elemen informasi personal"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Elemen-elemen informasi personal"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Elemen-elemen informasi personal"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Nama Keluaga"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Nama Keluaga"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Nama Keluaga"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Jalan"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Jalan"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Jalan"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "No Telepon"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "No Telepon"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "No Telepon"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Gelar"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Gelar"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Gelar"
+
+# English string: User ID
+msgid "uid"
+msgstr "User ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "User ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "User ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Hash password user"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Hash password user"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Hash password user"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Common Name"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nama yang ditampilkan"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nama yang ditampilkan"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Nama kepala pada organisasi asal"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Persistent pseudonymous ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "No Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Nama"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Nama"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Nama"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Nama"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Nama"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telepon rumah"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Lokalitas"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Berlabel URL"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Berlabel URL"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Handphone"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nama organisasi"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Kode pos"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Kode pos"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Pilihan Bahasa"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Pilihan Bahasa"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Pilihan Bahasa"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Pilihan Bahasa"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Pilihan Bahasa"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Nama Keluaga"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Nama Keluaga"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Nama Keluaga"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Nama Keluaga"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Nama Keluaga"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "No Telepon"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "No Telepon"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Gelar"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Gelar"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "User ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "User ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "User ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "User ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "User ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/messages.po
index 5a678b68a7..35c3a2a36f 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/id/LC_MESSAGES/messages.po
@@ -50,12 +50,6 @@ msgstr "Error meload metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Parser metadata"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Hak mengenai layanan ini"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Foto JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Tidak ada error yang ditemukan"
 
@@ -135,9 +129,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Kembali ke halaman instalasi SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Identity Provider WS-Federation (Remote)"
-
 msgid "{errors:error_header}"
 msgstr "Error simpelSAMLphp"
 
@@ -156,18 +147,12 @@ msgstr ""
 "Jika Anda adalah administrator dari layanan ini, Anda harus memastikan "
 "konfigurasi metdata Anda telah disetup dengan benar. "
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) of person's home organization"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Request buruk diterima"
 
 msgid "{status:sessionsize}"
 msgstr "Ukuran session: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Alamat pos"
-
 msgid "{logout:title}"
 msgstr "Log out"
 
@@ -189,32 +174,17 @@ msgstr "Ditahan"
 msgid "{admin:cfg_check_header}"
 msgstr "Pemeriksaan konfigurasi"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Afiliasi di organisasi asal"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Nama Keluaga"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Submit pesan"
 
 msgid "{status:logout}"
 msgstr "Logout"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organization name"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "No Telepon"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Parameter-parameter yang dikirimkan ke layanan penemuan tidak sesuai "
 "dengan spesifikasi"
 
-msgid "{attributes:attribute_mail}"
-msgstr "Mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Sebuah error telah terjadi ketika membuat request SAML."
 
@@ -224,9 +194,6 @@ msgstr "Field-field opsional"
 msgid "{logout:return}"
 msgstr "Kembali ke layanan"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nama yang ditampilkan"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Anda dapat <a href=\"%METAURL%\">mendapatkan xml metadata pada URL "
@@ -240,9 +207,6 @@ msgstr ""
 "Anda dapat menonaktifkan mode debuh pada file konfigurasi global "
 "simpleSAMLhphp  <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Alamat pos rumah"
-
 msgid "{disco:select}"
 msgstr "Pilih"
 
@@ -269,9 +233,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Apakah anda ingin logout dari semua layanan diatas ?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Gelar"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Tiaak ada akses"
 
@@ -286,9 +247,6 @@ msgstr "Tidak ada RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Informasi state hilang, dan tidak ada cara untuk me-restat request"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Identity number assigned by public authorities"
-
 msgid "{login:password}"
 msgstr "Password"
 
@@ -313,24 +271,15 @@ msgstr "Error memproses Request Logout"
 msgid "{admin:metaover_errorentry}"
 msgstr "Error pada entri metadata ini"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Afiliasi"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata tidak ditemukan"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Nama"
-
 msgid "{login:contact_info}"
 msgstr "Informasi Kontak"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Exception yang tidak tertangani"
 
-msgid "{status:validfor}"
-msgstr "Session anda valid untuk %SECONDS% detik dari sekarang."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Contoh Demo SAML 2.0 SP"
 
@@ -364,30 +313,18 @@ msgstr "Pilih file konfigurasi untuk diperiksa"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Autentifikasi gagal: sertifikat yang browser anda kirimkan tidak dikenal"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Homepage organisasi"
-
 msgid "{logout:logging_out_from}"
 msgstr "Log out dari layanan-layanan berikut:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Sekarang anda telah sukses log out dari %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Servide Provider WS-Federation (Hosted)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Laporan error telah dikirimkan ke administrator"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Tanggal lahir"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Sebuah error telah terjadi ketika memproses Request Logout."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistent pseudonymous ID"
-
 msgid "{logout:success}"
 msgstr "Anda telah berhasil log out dari semua layanan yang tercantuh diatas."
 
@@ -397,12 +334,6 @@ msgstr "Pemberitahuan"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Autentifikasi dibatalkan oleh user"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Afiliasi utama"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Kode pos"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Error ketika berkomunikasi dengans server CAS."
 
@@ -415,9 +346,6 @@ msgstr "Metadata SAML 2.0 SP"
 msgid "{admin:metaconv_converted}"
 msgstr "Metadata yang telah dikonvesi"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Common Name"
-
 msgid "{logout:completed}"
 msgstr "Selesai"
 
@@ -426,18 +354,9 @@ msgstr ""
 "Password di konfigurasi (auth.adminspassword) tidak berubah dari nilai "
 "default. Silahkan edit file konfigurasi."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizational unit"
-
 msgid "{general:service_provider}"
 msgstr "Service Provider"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telepon rumah"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain component(DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Terjadi error pada request ke halaman ini. Alasannya adalah: %REASON%"
 
@@ -456,23 +375,14 @@ msgstr "Masukkan username dan password Anda"
 msgid "{errors:report_explain}"
 msgstr "Jelaskan apa yang Anda lakukan ketika error ini terjadi..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Tidak ada response SAML yang disediakan"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Nama panggilan"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Anda mengakses antarmuka SingleLogout, tetapi tidak menyediakan "
 "LogoutRequest SAML atau LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Jalan"
-
 msgid "{login:organization}"
 msgstr "Organisasi"
 
@@ -512,9 +422,6 @@ msgstr "Pilih basis organisasi"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Pilihan tak beguna di file konfigurasi"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Berlabel URL"
-
 msgid "{errors:report_email}"
 msgstr "Alamat E-mail:"
 
@@ -529,9 +436,6 @@ msgstr ""
 "Inisiator dari request ini tidak menyediakan parameter RelayState yang "
 "mengindikasikan kemana selanjutnya pergi."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Nama legal"
-
 msgid "{status:header_diagnostics}"
 msgstr "Diagnostik SimpleSAMLphp"
 
@@ -541,9 +445,6 @@ msgstr ""
 "melihat jika session anda telah time out, berapa lama ia berlaku sampai "
 "time out dan semua attribut yang menempel pada session anda."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Home organization domain name"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Halaman tidak ditemukan"
 
@@ -562,30 +463,18 @@ msgstr "Untuk melihat detail entiti SAML, klik pada bagian header entiti SAML"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Sertifikat invalid"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) of the person's home organizational unit"
-
 msgid "{general:remember}"
 msgstr "Ingat"
 
 msgid "{disco:selectidp}"
 msgstr "Pilih identity provider anda"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "PO Box"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Nama kepala pada organisasi asal"
-
 msgid "{login:help_desk_email}"
 msgstr "Kirim e-mail ke help dek"
 
 msgid "{login:help_desk_link}"
 msgstr "Homepage Help desk"
 
-msgid "{attributes:attribute_uid}"
-msgstr "User ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "Error CAS"
 
@@ -606,12 +495,6 @@ msgstr "Ingat pilihan saya"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Service Provider SAML 2.0 (Hosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Lokalitas"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Profil penjamin identitas"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Dalam format file biasa SimpleSAMLphp - gunakan ini jika Anda menggunakan"
@@ -656,9 +539,6 @@ msgstr "Pesan"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Sertifikat tidak dikenal"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "No Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Error LDAP"
 
@@ -677,15 +557,9 @@ msgstr ""
 " yang salah di SimpleSAMLphp. Hubungi administrator dari layanan login "
 "ini, dan kirimkan kepada mereka pesan error diatas."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Handphone"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Identity Provider Shib 1.3 (Hosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Pilihan Bahasa"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Anda tidak menyediakan sertifikat yang valid."
 
@@ -700,15 +574,6 @@ msgstr "Field-field opsional berikut tidak dapat ditemukan"
 msgid "{logout:logout_only}"
 msgstr "Tidak, hanya %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Nama organisasi"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Distinguished name (DN) of person's primary Organizational Unit"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Nomor identitas lokal"
-
 msgid "{login:next}"
 msgstr "Selanjutnya"
 
@@ -728,9 +593,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Tidak ada sertifikat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Hash password user"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informasi logout hilang"
 
@@ -746,12 +608,6 @@ msgstr ""
 "Anda. Anda dapat mengirim dokumen metadata ini kepada rekan yang "
 "dipercayai untuk mensetup federasi terpercaya."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Elemen-elemen informasi personal"
-
-msgid "{status:header_wsfed}"
-msgstr "Contoh Demo WS-Fed SP"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikat"
 
@@ -760,18 +616,12 @@ msgstr ""
 "Autentifikasi gagal: Sertifikat yang browser Anda kirimkan invalid atau "
 "tidak dapat dibaca"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nama legal Organisasi"
-
 msgid "{status:header_shib}"
 msgstr "Demo Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parse"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Nomor Organisasi"
-
 msgid "Person's principal name at home organization"
 msgstr "Nama kepala pada organisasi asal"
 
@@ -1102,8 +952,8 @@ msgstr ""
 "ini, dan kirimkan kepada mereka pesan error diatas."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Session anda valid untuk %SECONDS% detik dari sekarang."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Session anda valid untuk %remaining% detik dari sekarang."
 
 msgid "Domain component (DC)"
 msgstr "Domain component(DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..e7ddfd7e75
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nome completo"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nome completo"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nome completo"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Componente di dominio (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Componente di dominio (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Componente di dominio (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nome da visualizzare"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Homepage della propria organizzazione"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Homepage della propria organizzazione"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Homepage della propria organizzazione"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nome legale della propria organizzazione"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nome legale della propria organizzazione"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nome legale della propria organizzazione"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Affiliazione"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Affiliazione"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Affiliazione"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Profilo di garanzia sull'identità"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Profilo di garanzia sull'identità"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Profilo di garanzia sull'identità"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Qualifica rispetto al servizio"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Qualifica rispetto al servizio"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Qualifica rispetto al servizio"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Soprannome (nick)"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Soprannome (nick)"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Soprannome (nick)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) dell'organizzazione "
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) dell'organizzazione "
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) dell'organizzazione "
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Affiliazione primaria"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Affiliazione primaria"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Affiliazione primaria"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Affiliazione nella propria organizzazione"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Affiliazione nella propria organizzazione"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Affiliazione nella propria organizzazione"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Numero di fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Numero di fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Numero di fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Nome "
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Nome "
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Nome "
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefono"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefono"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefono"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Indirizzo postale"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Indirizzo postale"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Indirizzo postale"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Località"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Località"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Località"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Etichetta URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Etichetta URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Etichetta URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Cellulare"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Cellulare"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Cellulare"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Numero organizzativo"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Numero organizzativo"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Numero organizzativo"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Data di nascita"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Data di nascita"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Data di nascita"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Numero identificativo locale"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Numero identificativo locale"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Numero identificativo locale"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Numero di identità assegnato dall'autorità pubblica"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Numero di identità assegnato dall'autorità pubblica"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Numero di identità assegnato dall'autorità pubblica"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nome dell'organizzazione"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nome dell'organizzazione"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nome dell'organizzazione"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Unità organizzativa"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Unità organizzativa"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Unità organizzativa"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Casella postale"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Casella postale"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Casella postale"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Indirizzo postale"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Indirizzo postale"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Indirizzo postale"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "CAP"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "CAP"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "CAP"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Lingua preferita"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Lingua preferita"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Lingua preferita"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Nome del dominio della propria organizzazione"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Nome del dominio della propria organizzazione"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Nome del dominio della propria organizzazione"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Nome del dominio della propria organizzazione"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Elementi informativi privati"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Elementi informativi privati"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Elementi informativi privati"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Elementi informativi privati"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Cognome"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Cognome"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Cognome"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Via"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Via"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Via"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Numero di telefono"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Numero di telefono"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Numero di telefono"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titolo"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titolo"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titolo"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identificativo utente"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identificativo utente"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identificativo utente"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Hash della password utente"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Hash della password utente"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Hash della password utente"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nome completo"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nome da visualizzare"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nome da visualizzare"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Nome identificativo (principal name) nella propria organizzazione"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Pseudonimo identificativo persistente"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Numero di fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Nome "
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Nome "
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Nome "
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Nome "
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Nome "
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefono"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Località"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Etichetta URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Etichetta URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Cellulare"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nome dell'organizzazione"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "CAP"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "CAP"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Lingua preferita"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Lingua preferita"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Lingua preferita"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Lingua preferita"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Lingua preferita"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Cognome"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Cognome"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Cognome"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Cognome"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Cognome"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Numero di telefono"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Numero di telefono"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titolo"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titolo"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identificativo utente"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identificativo utente"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identificativo utente"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identificativo utente"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identificativo utente"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/messages.po
index f34a236f7e..3a52011922 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/it/LC_MESSAGES/messages.po
@@ -52,12 +52,6 @@ msgstr "Errore nel caricamento dei metadati"
 msgid "{admin:metaconv_title}"
 msgstr "Parser dei metadati"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Qualifica rispetto al servizio"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Foto JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nessun errore trovato."
 
@@ -138,9 +132,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Torna alla pagine di installazione di SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (Remoto)"
-
 msgid "{errors:error_header}"
 msgstr "Errore di SimpleSAMLphp"
 
@@ -159,18 +150,12 @@ msgstr ""
 "SimpleSAMLphp. Se sei l'amministratore di sistema, assicurati che la "
 "configurazione dei metadati sia corretta."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) dell'organizzazione "
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "E' stata ricevuta una richiesta erronea."
 
 msgid "{status:sessionsize}"
 msgstr "Dimensione della session: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Indirizzo postale"
-
 msgid "{logout:title}"
 msgstr "Disconnesso"
 
@@ -192,30 +177,15 @@ msgstr "In attesa"
 msgid "{admin:cfg_check_header}"
 msgstr "Verifica della configurazione"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Affiliazione nella propria organizzazione"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Cognome"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Invio messaggio"
 
 msgid "{status:logout}"
 msgstr "Disconnessione"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Nome dell'organizzazione"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Numero di telefono"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "I parametri inviati al discovery service non rispettano le specifiche."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Si è verificato un errore durante la creazione della richiesta SAML."
 
@@ -225,9 +195,6 @@ msgstr "Campi opzionali"
 msgid "{logout:return}"
 msgstr "Ritornare al servizio"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nome da visualizzare"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Si possono <a href=\"%METAURL%\">ottenere i metadati in XML dall'URL "
@@ -241,9 +208,6 @@ msgstr ""
 "E' possibile disabilitare la modalità di debug nel file di configurazione"
 " globale di SimpleSAMLphp, <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Indirizzo postale"
-
 msgid "{disco:select}"
 msgstr "Selezionare"
 
@@ -271,9 +235,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Vuoi disconnetterti da tutti i servizi qui sopra riportati?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titolo"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Nessun accesso"
 
@@ -290,9 +251,6 @@ msgstr ""
 "Le informazioni di stato sono andate perse, e non c'è modo di far "
 "ripartire la richiesta"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Numero di identità assegnato dall'autorità pubblica"
-
 msgid "{login:password}"
 msgstr "Password"
 
@@ -321,24 +279,15 @@ msgstr ""
 msgid "{admin:metaover_errorentry}"
 msgstr "Errore in questo elemento dei metadati"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Affiliazione"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadati non trovati"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Nome "
-
 msgid "{login:contact_info}"
 msgstr "Informazioni di contatto:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Eccezione non gestita"
 
-msgid "{status:validfor}"
-msgstr "La tua sessione è valida per ulteriori %SECONDS% secondi."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Demo di SAML 2.0 SP"
 
@@ -374,32 +323,20 @@ msgstr ""
 "L'autenticazione è fallita perché il tuo browser ha inviato un certificat"
 " sconosciuto."
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Homepage della propria organizzazione"
-
 msgid "{logout:logging_out_from}"
 msgstr "Disconnessione in corso dai seguenti servizi:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Adesso sei correttamente disconnesso da %SP%"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Hosted)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Il rapporto dell'errore è stato inviato agli amministratori."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Data di nascita"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr ""
 "Si è verificato un errore quando si è tentato di elaborare la richiesta "
 "di disconnessione (Logout Request)."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Pseudonimo identificativo persistente"
-
 msgid "{logout:success}"
 msgstr "Sei stato disconnesso da tutti i servizi sopra elencati."
 
@@ -409,12 +346,6 @@ msgstr "Notifiche"
 msgid "{errors:descr_USERABORTED}"
 msgstr "L'autenticazione è stata interrotta dall'utente"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Affiliazione primaria"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "CAP"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Errore nella comunicazione con il server CAS."
 
@@ -427,9 +358,6 @@ msgstr "Metadati SAML 2.0 SP"
 msgid "{admin:metaconv_converted}"
 msgstr "Metadati convertiti"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nome completo"
-
 msgid "{logout:completed}"
 msgstr "Completato"
 
@@ -439,18 +367,9 @@ msgstr ""
 "stata cambiata dal valore di default. Si prega di editare il file di "
 "configurazione."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Unità organizzativa"
-
 msgid "{general:service_provider}"
 msgstr "Fornitore di servizi"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefono"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Componente di dominio (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "C'è un errore nella richiesta di questa pagina: %REASON%"
 
@@ -469,23 +388,14 @@ msgstr "Inserire nome utente e password"
 msgid "{errors:report_explain}"
 msgstr "Descrivi cosa stavi facendo al momento dell'errore"
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nessuna risposta SAML fornita."
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Soprannome (nick)"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Hai acceduto all'interfaccia di SingleLogoutService, ma senza fornire un "
 "messaggio SAML di LogoutRequest o LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Via"
-
 msgid "{login:organization}"
 msgstr "Organizzazione"
 
@@ -525,9 +435,6 @@ msgstr "Selezionare la propria organizzazione"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Opzioni superflue nel file di configurazione"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Etichetta URI"
-
 msgid "{errors:report_email}"
 msgstr "Indirizzo di e-mail:"
 
@@ -542,9 +449,6 @@ msgstr ""
 "Chi ha iniziato la richiesta non ha fornito un parametro RelayState per "
 "specificare come proseguire dopo il login."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Nome legale"
-
 msgid "{status:header_diagnostics}"
 msgstr "Diagnostici di SimpleSAMLphp"
 
@@ -554,9 +458,6 @@ msgstr ""
 "vedere se la sessione è scaduta, quanto è durata prima di scadere e tutti"
 " gli attributi ad essa collegati."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Nome del dominio della propria organizzazione"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Pagina non trovata"
 
@@ -577,30 +478,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certificato non valido"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
-
 msgid "{general:remember}"
 msgstr "Ricordare"
 
 msgid "{disco:selectidp}"
 msgstr "Selezionare il proprio identity provider"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Casella postale"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Nome identificativo (principal name) nella propria organizzazione"
-
 msgid "{login:help_desk_email}"
 msgstr "Invia una mail al servizio di assistenza"
 
 msgid "{login:help_desk_link}"
 msgstr "Homepage del servizio di assistenza"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Identificativo utente"
-
 msgid "{errors:title_CASERROR}"
 msgstr "Errore CAS"
 
@@ -621,12 +510,6 @@ msgstr "Ricorda la mia scelta"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Hosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Località"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Profilo di garanzia sull'identità"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "In formato flat per SimpleSAMLphp - da utilizzare se dall'altra parte c'è"
@@ -671,9 +554,6 @@ msgstr "Messaggio"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Certificato sconosciuto"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Numero di fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Errore LDAP"
 
@@ -692,15 +572,9 @@ msgstr ""
 " di questo servizio di login con una copia del messaggio di errore "
 "riportato qui sopra."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Cellulare"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Hosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Lingua preferita"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Non hai fornito un certificato valido."
 
@@ -715,15 +589,6 @@ msgstr "I seguenti campi, opzionali, non sono stati trovati"
 msgid "{logout:logout_only}"
 msgstr "No, solo da %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Nome dell'organizzazione"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Distinguished name (DN) dell'unità organizzativa della persona"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Numero identificativo locale"
-
 msgid "{login:next}"
 msgstr "Avanti"
 
@@ -741,9 +606,6 @@ msgstr "La pagina data non è stata trovata. Motivo: %REASON%, URL: %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Nessun certificato"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Hash della password utente"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informazioni di disconnessione smarrite."
 
@@ -758,12 +620,6 @@ msgstr ""
 "Questi sono i metadati che SimpleSAMLphp ha generato e che possono essere"
 " inviati ai partner fidati per creare una federazione tra siti."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Elementi informativi privati"
-
-msgid "{status:header_wsfed}"
-msgstr "Demo di WS-Fed SP"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certificati"
 
@@ -772,18 +628,12 @@ msgstr ""
 "L'autenticazione è fallita perché il tuo browser ha inviato un "
 "certificato non valido o illegibile."
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nome legale della propria organizzazione"
-
 msgid "{status:header_shib}"
 msgstr "Demo di Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analisi"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Numero organizzativo"
-
 msgid "Person's principal name at home organization"
 msgstr "Nome identificativo (principal name) nella propria organizzazione"
 
@@ -1125,8 +975,8 @@ msgstr ""
 "riportato qui sopra."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "La tua sessione è valida per ulteriori %SECONDS% secondi."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "La tua sessione è valida per ulteriori %remaining% secondi."
 
 msgid "Domain component (DC)"
 msgstr "Componente di dominio (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..c5897cbdba
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "一般名"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "一般名"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "一般名"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "ドメイン名"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "ドメイン名"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "ドメイン名"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "表示名"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "表示名"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "表示名"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "組織のホームページ"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "組織のホームページ"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "組織のホームページ"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "組織の正式名称"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "組織の正式名称"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "組織の正式名称"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "所属"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "所属"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "所属"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "識別子保証プロファイル"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "識別子保証プロファイル"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "識別子保証プロファイル"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "サービスに関する資格"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "サービスに関する資格"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "サービスに関する資格"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "ニックネーム"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "ニックネーム"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "ニックネーム"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "組織識別名"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "組織識別名"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "組織識別名"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "組織単位識別名"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "組織単位識別名"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "組織単位識別名"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "主所属"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "主所属"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "主所属"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "主要組織単位識別名"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "主要組織単位識別名"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "主要組織単位識別名"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "永続的利用者名"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "永続的利用者名"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "永続的利用者名"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "組織内職種"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "組織内職種"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "組織内職種"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "永続的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "永続的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "永続的匿名ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax番号"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax番号"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax番号"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "名"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "名"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "名"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "電話番号"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "電話番号"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "電話番号"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "住所"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "住所"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "住所"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG写真"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG写真"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG写真"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "地域"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "地域"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "地域"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "メールアドレス"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "メールアドレス"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "メールアドレス"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "管理者"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "管理者"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "管理者"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "携帯電話"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "携帯電話"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "携帯電話"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "組織番号"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "組織番号"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "組織番号"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "生年月日"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "生年月日"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "生年月日"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "支部ID"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "支部ID"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "支部ID"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "公開認証局によって割り当てられた識別番号"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "公開認証局によって割り当てられた識別番号"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "公開認証局によって割り当てられた識別番号"
+
+# English string: Organization name
+msgid "o"
+msgstr "所属組織"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "所属組織"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "所属組織"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "組織単位"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "組織単位"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "組織単位"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "オフィスボックスポスト"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "オフィスボックスポスト"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "オフィスボックスポスト"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "住所"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "住所"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "住所"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "郵便番号"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "郵便番号"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "郵便番号"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "言語"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "言語"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "言語"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "組織内ドメイン"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "組織内ドメイン"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "組織内ドメイン"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "組織内ドメイン"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "個人情報要素"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "個人情報要素"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "個人情報要素"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "個人情報要素"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "姓"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "姓"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "姓"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "番地"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "番地"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "番地"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "電話番号"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "電話番号"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "電話番号"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "タイトル"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "タイトル"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "タイトル"
+
+# English string: User ID
+msgid "uid"
+msgstr "ユーザーID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "ユーザーID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "ユーザーID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "パスワードハッシュ"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "パスワードハッシュ"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "パスワードハッシュ"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "一般名"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "表示名"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "表示名"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "表示名"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "表示名"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "表示名"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "表示名"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "表示名"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "永続的利用者名"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "永続的利用者名"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "永続的利用者名"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "永続的利用者名"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "永続的利用者名"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "永続的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "永続的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "永続的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "永続的匿名ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax番号"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "名"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "名"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "名"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "名"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "名"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "電話番号"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "地域"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "メールアドレス"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "メールアドレス"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "メールアドレス"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "メールアドレス"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "メールアドレス"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "携帯電話"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "所属組織"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "郵便番号"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "郵便番号"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "言語"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "言語"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "言語"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "言語"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "言語"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "姓"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "姓"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "姓"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "姓"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "姓"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "電話番号"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "電話番号"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "タイトル"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "タイトル"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "ユーザーID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "ユーザーID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "ユーザーID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "ユーザーID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "ユーザーID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/messages.po
index a8250f4eeb..a70892416f 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ja/LC_MESSAGES/messages.po
@@ -48,12 +48,6 @@ msgstr "目らーデータの読み込み中にエラーが発生しました"
 msgid "{admin:metaconv_title}"
 msgstr "メタデータパーサ"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "サービスに関する資格"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG写真"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "エラーは見つかりませんでした。"
 
@@ -121,9 +115,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "SimpleSAMLphpの設定ページに戻る"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federationアイデンティティプロバイダ(リモート)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphpエラー"
 
@@ -136,18 +127,12 @@ msgstr "あなたがログインを行う時、LDAPというユーザーデー
 msgid "{errors:descr_METADATA}"
 msgstr "SimpleSAMLphpの設定に誤りがありました。もしあなたがこのサービスの管理者であればメタデータ設定を正しくセットアップする必要があります。"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "組織識別名"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "不正なリクエストを受信しました"
 
 msgid "{status:sessionsize}"
 msgstr "セッションサイズ: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "住所"
-
 msgid "{logout:title}"
 msgstr "ログアウト"
 
@@ -169,30 +154,15 @@ msgstr "保留"
 msgid "{admin:cfg_check_header}"
 msgstr "設定確認"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "組織内職種"
-
-msgid "{attributes:attribute_sn}"
-msgstr "姓"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "メッセージを送信"
 
 msgid "{status:logout}"
 msgstr "ログアウト"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "組織名"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "電話番号"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "サービスディスカバリに送信したパラメータが仕様に従っていません。"
 
-msgid "{attributes:attribute_mail}"
-msgstr "メールアドレス"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "SAMLリクエストの生成中にエラーが発生しました。"
 
@@ -202,9 +172,6 @@ msgstr "任意項目"
 msgid "{logout:return}"
 msgstr "サービスへ戻る"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "表示名"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "<a href=\"%METAURL%\">このURLでメタデータのXMLを取得できます</a>:"
 
@@ -214,9 +181,6 @@ msgstr "はい、全てのサービスからログアウトします"
 msgid "{admin:debug_disable_debug_mode}"
 msgstr "あなたはSimpleSAMLphpのグローバル設定<tt>config/config.php</tt>でデバックモードをオフに出来ます。"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "住所"
-
 msgid "{disco:select}"
 msgstr "選択"
 
@@ -241,9 +205,6 @@ msgstr "このアイデンティティプロバイダはサービスプロバイ
 msgid "{logout:logout_all_question}"
 msgstr "上記の全てのサービスからログアウトしますか?"
 
-msgid "{attributes:attribute_title}"
-msgstr "タイトル"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "アクセスがありません"
 
@@ -256,9 +217,6 @@ msgstr "RelayStateがありません"
 msgid "{errors:descr_NOSTATE}"
 msgstr "状態情報を失い、リクエストを再開出来ません"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "公開認証局によって割り当てられた識別番号"
-
 msgid "{login:password}"
 msgstr "パスワード"
 
@@ -283,24 +241,15 @@ msgstr "ログアウト洋弓の処理中にエラーが発生しました"
 msgid "{admin:metaover_errorentry}"
 msgstr "このメタデータエントリでのエラー"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "所属"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "メタデータが見つかりません"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "名"
-
 msgid "{login:contact_info}"
 msgstr "連絡先:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "未処理例外"
 
-msgid "{status:validfor}"
-msgstr "セッションは今から %SECONDS% 秒間有効です"
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP デモ例"
 
@@ -331,30 +280,18 @@ msgstr "確認する設定ファイルを選択:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "認証に失敗しました: ブラウザから不明な証明書が送られました"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "組織のホームページ"
-
 msgid "{logout:logging_out_from}"
 msgstr "以下のサービスからログアウトしました:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "あなたは %SP% からのログアウトに成功しました。"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federationサービスプロバイダ(ホスト)"
-
 msgid "{errors:errorreport_text}"
 msgstr "このエラーは管理者に送信されました。"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "生年月日"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "ログアウト処理中にエラーが発生しました。"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "永続的匿名ID"
-
 msgid "{logout:success}"
 msgstr "上記の全てのサービスからログアウトしました。"
 
@@ -364,12 +301,6 @@ msgstr "お知らせ"
 msgid "{errors:descr_USERABORTED}"
 msgstr "認証はユーザーによって中断されました"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "主所属"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "郵便番号"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "CASサーバーとの通信中にエラーが発生しました。"
 
@@ -382,27 +313,15 @@ msgstr "SAML 2.0 SPメタデータ"
 msgid "{admin:metaconv_converted}"
 msgstr "変換されたメタデータ"
 
-msgid "{attributes:attribute_cn}"
-msgstr "一般名"
-
 msgid "{logout:completed}"
 msgstr "完了しました"
 
 msgid "{errors:descr_NOTSET}"
 msgstr "設定のパスワード(auth.adminpassword)は既定値から変更されていません設定ファイルを編集してください。"
 
-msgid "{attributes:attribute_ou}"
-msgstr "組織単位"
-
 msgid "{general:service_provider}"
 msgstr "サービスプロバイダ"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "電話番号"
-
-msgid "{attributes:attribute_dc}"
-msgstr "ドメイン名"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "ページのリクエスト中にエラーが発生しました。理由は: %REASON%"
 
@@ -421,23 +340,14 @@ msgstr "ユーザー名とパスワードを入力してください"
 msgid "{errors:report_explain}"
 msgstr "何をした際にこのエラーが発生したかを説明してください..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "管理者"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAMLレスポンスがありません"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "ニックネーム"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "SingleLogoutServiceインターフェースへアクセスしましたが、SAML LogoutRequest や LogoutResponse"
 " が提供されませんでした。"
 
-msgid "{attributes:attribute_street}"
-msgstr "番地"
-
 msgid "{login:organization}"
 msgstr "組織"
 
@@ -471,9 +381,6 @@ msgstr "組織の選択"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "設定ファイルに不適切なオプションが在ります"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI"
-
 msgid "{errors:report_email}"
 msgstr "Eメールアドレス:"
 
@@ -486,9 +393,6 @@ msgstr "パスワードが設定されていません"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "リクエスト生成時にはRelayStateパラメーターを提供されませんでした。"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "正式名称"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp 診断"
 
@@ -497,9 +401,6 @@ msgstr ""
 "こんにちは、ここは "
 "SimpleSAMLphpのステータスページです。ここではセッションのタイムアウト時間やセッションに結びつけられた属性情報を見ることが出来ます。"
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "組織内ドメイン"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "ページが見つかりません"
 
@@ -518,30 +419,18 @@ msgstr "SAML実体の詳細を確認する為には、SAML実体ヘッダをク
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "無効な証明書です"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "組織単位識別名"
-
 msgid "{general:remember}"
 msgstr "記憶する"
 
 msgid "{disco:selectidp}"
 msgstr "アイデンティティプロバイダを選択してください"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "オフィスボックスポスト"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "永続的利用者名"
-
 msgid "{login:help_desk_email}"
 msgstr "ヘルプデスクにメールする"
 
 msgid "{login:help_desk_link}"
 msgstr "ヘルプデスクページ"
 
-msgid "{attributes:attribute_uid}"
-msgstr "ユーザーID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CASエラー"
 
@@ -560,12 +449,6 @@ msgstr "選択を記憶する"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0サービスプロバイダ(ホスト)"
 
-msgid "{attributes:attribute_l}"
-msgstr "地域"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "識別子保証プロファイル"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr "SimpleSAMLphp のファイルフォーマット - 片側でも SimpleSAMLphpエンティティを使用する場合にこれを使用します:"
 
@@ -605,9 +488,6 @@ msgstr "メッセージ"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "不明な証明書です"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax番号"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAPエラー"
 
@@ -620,15 +500,9 @@ msgstr "与えられたページは見つかりませんでした。URLは: %URL
 msgid "{errors:howto_text}"
 msgstr "このエラーは恐らく未知の問題かSimpleSAMLphpの設定ミスです。ログインサービスの管理者に上記のエラーメッセージを連絡して下さい。"
 
-msgid "{attributes:attribute_mobile}"
-msgstr "携帯電話"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3アイデンティティプロバイダ(ホスト)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "言語"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "正当な証明書が提示されませんでした。"
 
@@ -641,15 +515,6 @@ msgstr "以下の任意項目は見つかりませんでした"
 msgid "{logout:logout_only}"
 msgstr "いいえ、%SP% のみログアウトします"
 
-msgid "{attributes:attribute_o}"
-msgstr "所属組織"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "主要組織単位識別名"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "支部ID"
-
 msgid "{login:next}"
 msgstr "次へ"
 
@@ -665,9 +530,6 @@ msgstr "与えられたページは見つかりませんでした。理由は: %
 msgid "{errors:title_NOCERT}"
 msgstr "証明書がありません"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "パスワードハッシュ"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "ログアウト情報を失いました"
 
@@ -680,27 +542,15 @@ msgstr "SimpleSAMLphpの設定にミスがある様です。"
 msgid "{admin:metadata_intro}"
 msgstr "ここは SimpleSAMLphp が生成したメタデータがあります。あなたは信頼するパートナーにこのメタデータを送信し信頼された連携を構築出来ます。"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "個人情報要素"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP デモ例"
-
 msgid "{errors:descr_INVALIDCERT}"
 msgstr "認証失敗: あなたのブラウザは無効か読むことの出来ない証明書を送信しました。"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "組織の正式名称"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth デモ"
 
 msgid "{admin:metaconv_parse}"
 msgstr "パース"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "組織番号"
-
 msgid "Person's principal name at home organization"
 msgstr "永続的利用者名"
 
@@ -1009,8 +859,8 @@ msgid ""
 msgstr "このエラーは恐らく未知の問題かSimpleSAMLphpの設定ミスです。ログインサービスの管理者に上記のエラーメッセージを連絡して下さい。"
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "セッションは今から %SECONDS% 秒間有効です"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "セッションは今から %remaining% 秒間有効です"
 
 msgid "Domain component (DC)"
 msgstr "ドメイン名"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..11a4db4835
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lb\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Allgeméngen Numm"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Allgeméngen Numm"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Allgeméngen Numm"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domain Komponent"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domain Komponent"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domain Komponent"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Ugewisenen Numm"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisatiouns Websait"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisatiouns Websait"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisatiouns Websait"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Numm vun der Organisatioun"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Numm vun der Organisatioun"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Numm vun der Organisatioun"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Zesummenschloss"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Zesummenschloss"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Zesummenschloss"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Berechtegung"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Berechtegung"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Berechtegung"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Spëtznumm"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Spëtznumm"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Spëtznumm"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) of person's home organization"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) of person's home organization"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) of person's home organization"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) of the person's home organizational unit"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Haapt Zougehéiregkeet"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Haapt Zougehéiregkeet"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Haapt Zougehéiregkeet"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Gruppen Zougehéiregket"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Gruppen Zougehéiregket"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Gruppen Zougehéiregket"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistent anonym ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax Nummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax Nummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax Nummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Familliennumm"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Familliennumm"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Familliennumm"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Haustelefon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Haustelefon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Haustelefon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Adress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Adress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Adress"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Photo am JPEG Format"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Photo am JPEG Format"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Photo am JPEG Format"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Uertschaft"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Uertschaft"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Uertschaft"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Beschrëfteten URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Beschrëfteten URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Beschrëfteten URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "GSM Nummer"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "GSM Nummer"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "GSM Nummer"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisatiounsnummer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisatiounsnummer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisatiounsnummer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Gebuertsdaag"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Gebuertsdaag"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Gebuertsdaag"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Identitéitsnummer"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Identitéitsnummer"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Identitéitsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Sozialversëcherungsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Sozialversëcherungsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Sozialversëcherungsnummer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organisatiounsnumm"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organisatiounsnumm"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organisatiounsnumm"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisatiounseenheet"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisatiounseenheet"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisatiounseenheet"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postschléissfach"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postschléissfach"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postschléissfach"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adress"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postleitzuel"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postleitzuel"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postleitzuel"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Lieblingssprooch"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Lieblingssprooch"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Lieblingssprooch"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Eendeiteg Heemorganisatiouns ID"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Eendeiteg Heemorganisatiouns ID"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Eendeiteg Heemorganisatiouns ID"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Eendeiteg Heemorganisatiouns ID"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:schac:attribute-def:schacUserPrivateAttribute"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Virnumm"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Virnumm"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Virnumm"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Strooss"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Strooss"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Strooss"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonsnummer"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonsnummer"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonsnummer"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Zougehéiregkeet"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Zougehéiregkeet"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Zougehéiregkeet"
+
+# English string: User ID
+msgid "uid"
+msgstr "Benotzer ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Benotzer ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Benotzer ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "userPassword"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "urn:mace:dir:attribute-def:userPassword"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "urn:oid:2.5.4.35"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Allgeméngen Numm"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Ugewisenen Numm"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Ugewisenen Numm"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Haaptnumm bei der Heemorganisatioun"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax Nummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Familliennumm"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Familliennumm"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Familliennumm"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Familliennumm"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Familliennumm"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Haustelefon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Uertschaft"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Beschrëfteten URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Beschrëfteten URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "GSM Nummer"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organisatiounsnumm"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postleitzuel"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postleitzuel"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Lieblingssprooch"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Lieblingssprooch"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Lieblingssprooch"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Lieblingssprooch"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Lieblingssprooch"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Virnumm"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Virnumm"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Virnumm"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Virnumm"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Virnumm"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonsnummer"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonsnummer"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Zougehéiregkeet"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Zougehéiregkeet"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Benotzer ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Benotzer ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Benotzer ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Benotzer ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Benotzer ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/messages.po
index d643592802..14ce70ceab 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/lb/LC_MESSAGES/messages.po
@@ -24,12 +24,6 @@ msgstr "Benotzernumm"
 msgid "{errors:title_METADATA}"
 msgstr "Fehler beim Lueden vun den Meta Données"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Berechtegung"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Photo am JPEG Format"
-
 msgid "{errors:report_trackid}"
 msgstr ""
 "Wann dir ons dësen Fehler matdeelt, dann schéckt w.e.g och d Tracking ID "
@@ -75,41 +69,14 @@ msgstr ""
 " dir den Administrator vun dësem Service sid, dann stellt sëcher dass d "
 "Meta Données richteg angeriicht sin."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) of person's home organization"
-
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adress"
-
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Gruppen Zougehéiregket"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Virnumm"
-
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organisatiounsnumm"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonsnummer"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "D'Parameter fir den Disovery Service woren net korrekt par rapport zur "
 "Specifikatioun"
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Beim Erstellen vun der SAML Unfro as en Fehler geschitt."
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Ugewisenen Numm"
-
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Adress"
-
 msgid "{login:login_button}"
 msgstr "Login"
 
@@ -121,9 +88,6 @@ msgstr ""
 "Dësen IdP kruut eng Authenticatiounsunfro vun engem Service provider, "
 "mais et gouf en Fehler wéi déi sollt bearbescht gin."
 
-msgid "{attributes:attribute_title}"
-msgstr "Zougehéiregkeet"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Keen Zougrëff"
 
@@ -135,9 +99,6 @@ msgstr ""
 msgid "{errors:title_NORELAYSTATE}"
 msgstr "Den ReplayState Parameter fehlt"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Sozialversëcherungsnummer"
-
 msgid "{login:password}"
 msgstr "Passwuert"
 
@@ -155,59 +116,26 @@ msgstr "Konfiguratiounsfehler"
 msgid "{errors:title_LOGOUTREQUEST}"
 msgstr "Fehler beim Bearbeschten vun der Logout Unfro"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Zesummenschloss"
-
-msgid "{attributes:attribute_givenname}"
-msgstr "Familliennumm"
-
 msgid "{login:error_header}"
 msgstr "Fehler"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisatiouns Websait"
-
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Gebuertsdaag"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "En Fehler as geschit beim Bearbeschten vun der Logout Unfro"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistent anonym ID"
-
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Haapt Zougehéiregkeet"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postleitzuel"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Fehler beim Kommunizeiren mam CAS Server"
 
 msgid "{general:no}"
 msgstr "Nee"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Allgeméngen Numm"
-
 msgid "{errors:descr_NOTSET}"
 msgstr ""
 "D'Passwuert an der Konfiguration (auth.adminpassword) as bis elo net "
 "geännertgin. W.e.g aennert daat an der Konfiguratioun."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisatiounseenheet"
-
 msgid "{general:service_provider}"
 msgstr "Service Provider"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Haustelefon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain Komponent"
-
 msgid "{general:no_cancel}"
 msgstr "Nee"
 
@@ -217,23 +145,14 @@ msgstr "Gid w.e.g Aeren Benotzernumm an d Passwuert an"
 msgid "{errors:report_explain}"
 msgstr "Erklaert w.e.g genau waat dir gemaacht hud fir den Fehler auszeléisen..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Keng SAML Aentwert ungin"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Spëtznumm"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Der hud den SingleLogoutService accédéiert mais ken SAML LogoutRequest "
 "oder LogoutResponse unginn."
 
-msgid "{attributes:attribute_street}"
-msgstr "Strooss"
-
 msgid "{login:organization}"
 msgstr "Organisatioun"
 
@@ -250,9 +169,6 @@ msgstr ""
 "Der hud den Assertion Consumer Sercice Interface accédéiert mais keng "
 "SAML Authentication Aentwert unginn"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Beschrëfteten URI"
-
 msgid "{errors:report_email}"
 msgstr "E-mail Adress"
 
@@ -265,27 +181,12 @@ msgstr "Passwuert net angin"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "Den Initiator vun der Unfro huet ken ReplayState Parameter matgeschekt."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Eendeiteg Heemorganisatiouns ID"
-
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ongültegen Zertifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) of the person's home organizational unit"
-
 msgid "{general:remember}"
 msgstr "Zoustëmmung verhalen"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postschléissfach"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Haaptnumm bei der Heemorganisatioun"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Benotzer ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS Fehler"
 
@@ -301,9 +202,6 @@ msgstr "Falsch Unfro fir den Discovery Service"
 msgid "{general:yes_continue}"
 msgstr "Jo"
 
-msgid "{attributes:attribute_l}"
-msgstr "Uertschaft"
-
 msgid "{errors:title_GENERATEAUTHNRESPONSE}"
 msgstr "Et wor net méiglech eng Authenticatiounsaentwert ze erstellen"
 
@@ -313,9 +211,6 @@ msgstr "Fehler beim Erstellen vun der Unfro"
 msgid "{errors:report_submit}"
 msgstr "Fehlerbericht schécken"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax Nummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP Fehler"
 
@@ -325,33 +220,15 @@ msgstr ""
 "SimpleSAMLphp ausgeléist. Kontaktéiert am beschten den Administrator vun "
 "dësem Login Service an schéckt him den Fehlerbericht"
 
-msgid "{attributes:attribute_mobile}"
-msgstr "GSM Nummer"
-
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Lieblingssprooch"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Dir hud keen gültegen Zertifikat"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organisatiounsnumm"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Identitéitsnummer"
-
 msgid "{errors:descr_GENERATEAUTHNRESPONSE}"
 msgstr "Beim Erstellen vun der Authenticatiounsaentwert as en Fehler passéiert"
 
 msgid "{errors:descr_CONFIG}"
 msgstr "SimpleSAMLphp schéint falsch konfiguréiert ze sin."
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Numm vun der Organisatioun"
-
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisatiounsnummer"
-
 msgid "Person's principal name at home organization"
 msgstr "Haaptnumm bei der Heemorganisatioun"
 
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..293e30b6ef
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Pilnas vardas"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Pilnas vardas"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Pilnas vardas"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domeno komponentas"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domeno komponentas"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domeno komponentas"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Rodomas vardas"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organizacijos svetainė"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organizacijos svetainė"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organizacijos svetainė"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organizacijos juridinis pavadinimas"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organizacijos juridinis pavadinimas"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organizacijos juridinis pavadinimas"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Pareigos"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Pareigos"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Pareigos"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Tapatybės tikrumo profilis"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Tapatybės tikrumo profilis"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Tapatybės tikrumo profilis"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Teisės susiję su paslauga"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Teisės susiję su paslauga"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Teisės susiję su paslauga"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Slapyvardis"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Slapyvardis"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Slapyvardis"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Asmens organizacijos atpažinimo vardas"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Asmens organizacijos atpažinimo vardas"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Asmens organizacijos atpažinimo vardas"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Asmens organizacijos skyriaus atpažinimo vardas"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Asmens organizacijos skyriaus atpažinimo vardas"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Asmens organizacijos skyriaus atpažinimo vardas"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Pirminė sąsaja"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Pirminė sąsaja"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Pirminė sąsaja"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Asmens pirminio organizacijos skyriaus atpažinimo vardas"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Asmens pirminio organizacijos skyriaus atpažinimo vardas"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Asmens pirminio organizacijos skyriaus atpažinimo vardas"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Sąsaja su organizacija"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Sąsaja su organizacija"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Sąsaja su organizacija"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fakso numeris"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fakso numeris"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fakso numeris"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Vardas"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Vardas"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Vardas"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Namų telefo nr."
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Namų telefo nr."
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Namų telefo nr."
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Namų adresas"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Namų adresas"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Namų adresas"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG nuotrauka"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG nuotrauka"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG nuotrauka"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Vietovė"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Vietovė"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Vietovė"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Žymėtasis URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Žymėtasis URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Žymėtasis URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "El.paštas"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "El.paštas"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "El.paštas"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Vadovas"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Vadovas"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Vadovas"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiliojo numeris"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiliojo numeris"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiliojo numeris"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organizacijos numeris"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organizacijos numeris"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organizacijos numeris"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Gimimo data"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Gimimo data"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Gimimo data"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Vietinis tapatybės numeris"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Vietinis tapatybės numeris"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Vietinis tapatybės numeris"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Valstybės institucijų priskirtas tapatybės numeris"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Valstybės institucijų priskirtas tapatybės numeris"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Valstybės institucijų priskirtas tapatybės numeris"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organizacijos pavadinimas"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organizacijos pavadinimas"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organizacijos pavadinimas"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizacijos skyrius"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizacijos skyrius"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizacijos skyrius"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Pašto dėžutės nr."
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Pašto dėžutės nr."
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Pašto dėžutės nr."
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adresas"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adresas"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adresas"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Pašto kodas"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Pašto kodas"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Pašto kodas"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Kalba"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Kalba"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Kalba"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Organizacijos domenas"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Organizacijos domenas"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Organizacijos domenas"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Organizacijos domenas"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Privačios informacijos elementai"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Privačios informacijos elementai"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Privačios informacijos elementai"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Privačios informacijos elementai"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Pavardė"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Pavardė"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Pavardė"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Gatvė"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Gatvė"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Gatvė"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefono nr."
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefono nr."
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefono nr."
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Pavadinimas"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Pavadinimas"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Pavadinimas"
+
+# English string: User ID
+msgid "uid"
+msgstr "Naudotojo ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Naudotojo ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Naudotojo ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Naudotojo slaptažodžio maiša"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Naudotojo slaptažodžio maiša"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Naudotojo slaptažodžio maiša"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Pilnas vardas"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Rodomas vardas"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Rodomas vardas"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Asmens pagrindinis vardas organizacijoje"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Nuolatinio pseudonimo ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fakso numeris"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Vardas"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Vardas"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Vardas"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Vardas"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Vardas"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Namų telefo nr."
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Vietovė"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Žymėtasis URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Žymėtasis URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "El.paštas"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "El.paštas"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "El.paštas"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "El.paštas"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "El.paštas"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiliojo numeris"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organizacijos pavadinimas"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Pašto kodas"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Pašto kodas"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Kalba"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Kalba"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Kalba"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Kalba"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Kalba"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Pavardė"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Pavardė"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Pavardė"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Pavardė"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Pavardė"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefono nr."
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefono nr."
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Pavadinimas"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Pavadinimas"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Naudotojo ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Naudotojo ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Naudotojo ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Naudotojo ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Naudotojo ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/messages.po
index f75442d392..05ce6bef74 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/lt/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "Klaida siunčiant metaduomenis"
 msgid "{admin:metaconv_title}"
 msgstr "Metaduomenų analizatorius"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Teisės susiję su paslauga"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG nuotrauka"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Klaidų nerasta."
 
@@ -134,9 +128,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Grįžti atgal į SimpleSAMLphp diegimo puslapį"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federacijos Paslaugos teikėjas (nutolęs)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp klaida"
 
@@ -154,18 +145,12 @@ msgstr ""
 "sistemos administratorius, turėtumėte patikrinti, ar teisingai nustatyti "
 "metaduomenys."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Asmens organizacijos atpažinimo vardas"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Gauta neteisinga užklausa"
 
 msgid "{status:sessionsize}"
 msgstr "Sesijos trukmė: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adresas"
-
 msgid "{logout:title}"
 msgstr "Atsijungta"
 
@@ -187,30 +172,15 @@ msgstr "Prašome palaukti"
 msgid "{admin:cfg_check_header}"
 msgstr "Konfigūracijos patikrinimas"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Sąsaja su organizacija"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Pavardė"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Patvirtinti pranešimą"
 
 msgid "{status:logout}"
 msgstr "Atsijungti"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organizacijos pavadinimas"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefono nr."
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Parametrai, nusiųsti \"discovery\" servisui neatitiko specifikacijų."
 
-msgid "{attributes:attribute_mail}"
-msgstr "El.paštas"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Klaida kuriant SAML užklausą."
 
@@ -220,9 +190,6 @@ msgstr "Neprivalomi laukai"
 msgid "{logout:return}"
 msgstr "Grįžti į paslaugą"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Rodomas vardas"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Jūs galite <a href=\"%METAURL%\">gauti metaduomenis XML formatu</a>:"
 
@@ -234,9 +201,6 @@ msgstr ""
 "Jūs galite išjungti detalųjį naršymą globaliame SimpleSAMLphp "
 "konfigūraciniame faile <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Namų adresas"
-
 msgid "{disco:select}"
 msgstr "Pasirinkite"
 
@@ -263,9 +227,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Ar norite atsijungti nuo visų žemiau išvardintų paslaugų?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Pavadinimas"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Prieigos nėra"
 
@@ -280,9 +241,6 @@ msgstr "Nėra perdavimo statuso"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Būsenos informacija prarasta, nėra galimybių pakartoti užklausą"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Valstybės institucijų priskirtas tapatybės numeris"
-
 msgid "{login:password}"
 msgstr "Slaptažodis"
 
@@ -307,24 +265,15 @@ msgstr "Klaida vykdant atsijungimo užklausą"
 msgid "{admin:metaover_errorentry}"
 msgstr "Klaida šiame metaduomenų įraše"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Pareigos"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metaduomenys nerasti"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Vardas"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktai:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Nežinoma klaida"
 
-msgid "{status:validfor}"
-msgstr "Jūsų sesija galioja %SECONDS% sekundžių, skaičiuojant nuo šio momento."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demonstracinės versijos Pavyzdys"
 
@@ -358,30 +307,18 @@ msgstr "Tikrinti konfigūracijos failą:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Autentikacija nepavyko: Jūsų naršyklės siųstas sertifikatas yra nežinomas"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organizacijos svetainė"
-
 msgid "{logout:logging_out_from}"
 msgstr "Vyksta atjungimas nuo šių paslaugų:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Jūs sėkmingai buvote atjungtas iš %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federacijos Paslaugos teikėjas (vietinis)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Pranešimas apie klaidą išsiųstas administratoriams."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Gimimo data"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Klaida įvyko bandant įvykdyti atsijungimo užklausą."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Nuolatinio pseudonimo ID"
-
 msgid "{logout:success}"
 msgstr "Jūs sėkmingai buvote atjungtas nuo visų žemiau išvardintų paslaugų."
 
@@ -391,12 +328,6 @@ msgstr "Pranešimai"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Autentikacija nutraukė naudotojas"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Pirminė sąsaja"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Pašto kodas"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Klaida bandant jungtis prie CAS serverio."
 
@@ -409,9 +340,6 @@ msgstr "SAML 2.0 SP Metaduomenys"
 msgid "{admin:metaconv_converted}"
 msgstr "Sukonvertuoti metaduomenys"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Pilnas vardas"
-
 msgid "{logout:completed}"
 msgstr "Atlikta"
 
@@ -420,18 +348,9 @@ msgstr ""
 "Konfigūracijoje esantis slaptažodis (auth.adminpassword) nepakeistas iš "
 "pradinės reikšmės. Prašome pakeisti konfigūracijos failą."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizacijos skyrius"
-
 msgid "{general:service_provider}"
 msgstr "Paslaugos teikėjas"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Namų telefo nr."
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domeno komponentas"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Užklausoje į šį puslapį rasta klaida. Priežastis buvo: %REASON%"
 
@@ -450,23 +369,14 @@ msgstr "Įveskite savo prisijungimo vardą ir slaptažodį"
 msgid "{errors:report_explain}"
 msgstr "Aprašykite kokius veiksmus atlikote, kuomet pasirodė ši klaida..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Vadovas"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nepateiktas SAML atsakymas"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Slapyvardis"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Jūs pasiekėte SingleLogoutService paslaugą, tačiau nepateikėte SAML "
 "LogoutRequest ar LogoutResponse užklausų."
 
-msgid "{attributes:attribute_street}"
-msgstr "Gatvė"
-
 msgid "{login:organization}"
 msgstr "Organizacija"
 
@@ -504,9 +414,6 @@ msgstr "Pasirinkite organizaciją"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Pertekliniai parametrai konfigūraciniame faile"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Žymėtasis URI"
-
 msgid "{errors:report_email}"
 msgstr "El. pašto adresas:"
 
@@ -521,9 +428,6 @@ msgstr ""
 "Šios užklausos iniciatorius nepateikė perdavimo statuso parametro, kuris "
 "nusako kur toliau kreiptis."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Juridinis vardas"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp Diagnostika"
 
@@ -533,9 +437,6 @@ msgstr ""
 "Jūsų sesija turi laiko apribojimą, kiek trunka tas laiko apribojimas bei "
 "kitus Jūsų sesijai priskirtus atributus."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Organizacijos domenas"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Puslapis nerastas"
 
@@ -556,30 +457,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Neteisingas sertifikatas"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Asmens organizacijos skyriaus atpažinimo vardas"
-
 msgid "{general:remember}"
 msgstr "Įsiminti"
 
 msgid "{disco:selectidp}"
 msgstr "Pasirinkite savo tapatybių tiekėją"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Pašto dėžutės nr."
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Asmens pagrindinis vardas organizacijoje"
-
 msgid "{login:help_desk_email}"
 msgstr "Siųsti el. laišką naudotojų aptarnavimo specialistams"
 
 msgid "{login:help_desk_link}"
 msgstr "Naudotojų aptarnavimo puslapis"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Naudotojo ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS klaida"
 
@@ -600,12 +489,6 @@ msgstr "Prisiminti pasirinkimą"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Paslaugos teikėjas (vietinis)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Vietovė"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Tapatybės tikrumo profilis"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "SimpleSAMLphp paprasto failo formatas - naudokite jį, jei naudojate "
@@ -650,9 +533,6 @@ msgstr "Pranešimas"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Nežinomas sertifikatas"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fakso numeris"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP klaida"
 
@@ -670,15 +550,9 @@ msgstr ""
 "sukonfigūravimo. Susisiekite su šios sistemos administratoriumi ir "
 "nusiųskite žemiau rodomą klaidos pranešimą."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiliojo numeris"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Tapatybių teikėjas (vietinis)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Kalba"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Jūs nepateikėte teisingo sertifikato."
 
@@ -693,15 +567,6 @@ msgstr "Šie neprivalomi laukai nerasti"
 msgid "{logout:logout_only}"
 msgstr "Ne, tik %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organizacijos pavadinimas"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Asmens pirminio organizacijos skyriaus atpažinimo vardas"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Vietinis tapatybės numeris"
-
 msgid "{login:next}"
 msgstr "Kitas"
 
@@ -721,9 +586,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Nėra sertifikato"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Naudotojo slaptažodžio maiša"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Atsijungimo informacija prarasta"
 
@@ -739,12 +601,6 @@ msgstr ""
 "patikimą federaciją, galite patikimiems partneriams išsiųsti šiuos "
 "metaduomenis."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Privačios informacijos elementai"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demonstracinės versijos Pavyzdys"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikatai"
 
@@ -753,18 +609,12 @@ msgstr ""
 "Autentikacija nepavyko: Jūsų naršyklės siųstas sertifikatas yra nevalidus"
 " arba negali būti perskaitytas"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organizacijos juridinis pavadinimas"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demonstracinė versija"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Nagrinėti"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organizacijos numeris"
-
 msgid "Person's principal name at home organization"
 msgstr "Asmens pagrindinis vardas organizacijoje"
 
@@ -1096,8 +946,8 @@ msgstr ""
 "nusiųskite žemiau rodomą klaidos pranešimą."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Jūsų sesija galioja %SECONDS% sekundžių, skaičiuojant nuo šio momento."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Jūsų sesija galioja %remaining% sekundžių, skaičiuojant nuo šio momento."
 
 msgid "Domain component (DC)"
 msgstr "Domeno komponentas"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..9eca6a241a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Vārds"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Vārds"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Vārds"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domēns (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domēns (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domēns (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Parādāmais vārds"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organizācijas mājas lapa"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organizācijas mājas lapa"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organizācijas mājas lapa"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organizācijas juridiskais nosaukums"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organizācijas juridiskais nosaukums"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organizācijas juridiskais nosaukums"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Piederība"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Piederība"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Piederība"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Apraksts, kā atšķirt cilvēku no robota"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Apraksts, kā atšķirt cilvēku no robota"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Apraksts, kā atšķirt cilvēku no robota"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Pilnvaras attiecībā uz servisu"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Pilnvaras attiecībā uz servisu"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Pilnvaras attiecībā uz servisu"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Niks"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Niks"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Niks"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Organizācijas vārds (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Organizācijas vārds (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Organizācijas vārds (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Organizācijas vienības vārds (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Organizācijas vienības vārds (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Organizācijas vienības vārds (DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Pamatdarba amats"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Pamatdarba amats"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Pamatdarba amats"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Personas pamata organizācijas vienības vārds (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Personas pamata organizācijas vienības vārds (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Personas pamata organizācijas vienības vārds (DN)"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Priekšnieka vārds"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Priekšnieka vārds"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Priekšnieka vārds"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Amats organizācijā"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Amats organizācijā"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Amats organizācijā"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fakss"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fakss"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fakss"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Vārds"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Vārds"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Vārds"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefons"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefons"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefons"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Pasta adrese"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Pasta adrese"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Pasta adrese"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG fotogrāfija"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG fotogrāfija"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG fotogrāfija"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Atrašanās vieta"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Atrašanās vieta"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Atrašanās vieta"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI nosaukums"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI nosaukums"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI nosaukums"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Pasts"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Pasts"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Pasts"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Priekšnieks"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Priekšnieks"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Priekšnieks"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobilais telefons"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobilais telefons"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobilais telefons"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organizācijas reģistrācijas numurs"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organizācijas reģistrācijas numurs"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organizācijas reģistrācijas numurs"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Dzimšanas datums"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Dzimšanas datums"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Dzimšanas datums"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Personas kods"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Personas kods"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Personas kods"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Publisko autoritāšu piešķirtais identitātes numurs"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Publisko autoritāšu piešķirtais identitātes numurs"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Publisko autoritāšu piešķirtais identitātes numurs"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organizācijas nosaukums"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organizācijas nosaukums"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organizācijas nosaukums"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizācijas vienība"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizācijas vienība"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizācijas vienība"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Pasta kaste"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Pasta kaste"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Pasta kaste"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Pasta adrese"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Pasta adrese"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Pasta adrese"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Pasta kods"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Pasta kods"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Pasta kods"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Vēlamā valoda"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Vēlamā valoda"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Vēlamā valoda"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Organizācijas domeins"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Organizācijas domeins"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Organizācijas domeins"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Organizācijas domeins"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Privātās informācijas elementi"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Privātās informācijas elementi"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Privātās informācijas elementi"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Privātās informācijas elementi"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Uzvārds"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Uzvārds"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Uzvārds"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Iela"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Iela"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Iela"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefons"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefons"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefons"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Amats"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Amats"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Amats"
+
+# English string: User ID
+msgid "uid"
+msgstr "Lietotāja ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Lietotāja ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Lietotāja ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Paroles jaucējsumma (hash)"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Paroles jaucējsumma (hash)"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Paroles jaucējsumma (hash)"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Vārds"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Parādāmais vārds"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Parādāmais vārds"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Priekšnieka vārds"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Priekšnieka vārds"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Priekšnieka vārds"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Priekšnieka vārds"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Priekšnieka vārds"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Pastāvīgs pseidonīma ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fakss"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Vārds"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Vārds"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Vārds"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Vārds"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Vārds"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefons"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Atrašanās vieta"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI nosaukums"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI nosaukums"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Pasts"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Pasts"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Pasts"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Pasts"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Pasts"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobilais telefons"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organizācijas nosaukums"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Pasta kods"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Pasta kods"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Vēlamā valoda"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Vēlamā valoda"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Vēlamā valoda"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Vēlamā valoda"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Vēlamā valoda"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Uzvārds"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Uzvārds"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Uzvārds"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Uzvārds"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Uzvārds"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefons"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefons"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Amats"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Amats"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Lietotāja ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Lietotāja ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Lietotāja ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Lietotāja ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Lietotāja ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/messages.po
index 9250283d96..1ef6079aed 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/lv/LC_MESSAGES/messages.po
@@ -53,12 +53,6 @@ msgstr "Metadatu ielādes kļūda"
 msgid "{admin:metaconv_title}"
 msgstr "Metadatu parsētājs"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Pilnvaras attiecībā uz servisu"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG fotogrāfija"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Kļūdas nav atrastas."
 
@@ -131,9 +125,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Iet atpakaļ uz SimpleSAMLphp instalācijas lapu"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation servisa piegādātājs (attālināts)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp kļūda"
 
@@ -150,18 +141,12 @@ msgstr ""
 "Jūsu SimpleSAMLphp instalācijas konfigurācijā ir kļūda. Pārliecinieties, "
 "lai metadatu konfigurācija būtu korekta."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Organizācijas vārds (DN)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Saņemts nepareizs pieprasījums"
 
 msgid "{status:sessionsize}"
 msgstr "Sesijas izmērs: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Pasta adrese"
-
 msgid "{logout:title}"
 msgstr "Atslēdzies"
 
@@ -183,30 +168,15 @@ msgstr "Apturēts"
 msgid "{admin:cfg_check_header}"
 msgstr "Konfigurācijas pārbaude"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Amats organizācijā"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Uzvārds"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Sūtīt ziņu"
 
 msgid "{status:logout}"
 msgstr "Atslēgties"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organizācijas nosaukums"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefons"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Discovery servisam nosūtītie parametri neatbilst specifikācijām."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Pasts"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Veidojot SAML pieprasījumu radās kļūda."
 
@@ -216,9 +186,6 @@ msgstr "Neobligātie lauki"
 msgid "{logout:return}"
 msgstr "Atgriezties pie servisa"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Parādāmais vārds"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Jūs varat <a href=\"%METAURL%\">saņemt metadatu xml šajā URL</a>:"
 
@@ -230,9 +197,6 @@ msgstr ""
 "Jūs varat izslēgt atkļūdošanas režīmu globālajā SimpleSAMLphp "
 "konfigurācijas failā <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Pasta adrese"
-
 msgid "{disco:select}"
 msgstr "Izvēlēties"
 
@@ -259,9 +223,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Vai vēlaties atslēgties no visiem uzskaitītajiem servisiem?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Amats"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Nav pieejas"
 
@@ -274,9 +235,6 @@ msgstr "Nav RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Stāvokļa informācija pazaudēta un nav iespējams atkārtot pieprasījumu"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Publisko autoritāšu piešķirtais identitātes numurs"
-
 msgid "{login:password}"
 msgstr "Parole"
 
@@ -303,24 +261,15 @@ msgstr "Atslēgšanās pieprasījuma apstrādes kļūda"
 msgid "{admin:metaover_errorentry}"
 msgstr "Kļūda šajā metadatu ierakstā"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Piederība"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadati nav atrasti"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Vārds"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktinformācija"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Nezināma kļūda"
 
-msgid "{status:validfor}"
-msgstr "Sesija ir derīga %SECONDS% sekundes no šī brīža."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP demonstrācijas piemērs"
 
@@ -355,30 +304,18 @@ msgstr ""
 "Autentifikācija neizdevās, jo Jūsu interneta pārlūks atsūtījis "
 "nepazīstamu sertifikātu"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organizācijas mājas lapa"
-
 msgid "{logout:logging_out_from}"
 msgstr "Atslēgšanās no šiem servisiem:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Jūs esat sekmīgi atslēdzies no %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation servisa piegādātājs (hostēts)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Kļūdas ziņojums administratoriem ir nosūtīts."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Dzimšanas datums"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Apstrādājot atslēgšanās pieprasījumu, radās kļūda."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Pastāvīgs pseidonīma ID"
-
 msgid "{logout:success}"
 msgstr "Jūs esat sekmīgi atslēdzies un augstāk uzskaitītajiem servisiem."
 
@@ -388,12 +325,6 @@ msgstr "Brīdinājumi"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Autentifikāciju pārtraucis lietotājs"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Pamatdarba amats"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Pasta kods"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Kļūda komunicējot ar CAS serveri."
 
@@ -406,9 +337,6 @@ msgstr "SAML 2.0 SP metadati"
 msgid "{admin:metaconv_converted}"
 msgstr "Konvertētie metadati"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Vārds"
-
 msgid "{logout:completed}"
 msgstr "Pabeigts"
 
@@ -417,18 +345,9 @@ msgstr ""
 "Konfigurācijā auth.adminpassword parolei ir noklusētā vērtība, tā nav "
 "mainīta. Lūdzu nomainiet to, labojot failu."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizācijas vienība"
-
 msgid "{general:service_provider}"
 msgstr "Servisa piegādātājs"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefons"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domēns (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Kļūdains pieprasījums šai lapai. Iemesls: %REASON%"
 
@@ -447,23 +366,14 @@ msgstr "Ievadiet savu lietotāja vārdu un paroli"
 msgid "{errors:report_explain}"
 msgstr "Aprakstiet, ko Jūs darījāt, kad notika kļūda."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Priekšnieks"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nav SAML atbildes"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Niks"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Jūs izmantojat SingleLogoutService interfeisu, bet neesat devis SAML "
 "atslēgšanās pieprasījumu vai atslēgšanās atbildi."
 
-msgid "{attributes:attribute_street}"
-msgstr "Iela"
-
 msgid "{login:organization}"
 msgstr "Organizācija"
 
@@ -501,9 +411,6 @@ msgstr "Izvēlēties organizāciju"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Sīkas (superfluous) opcijas konfigurācijas failā"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI nosaukums"
-
 msgid "{errors:report_email}"
 msgstr "E-pasta adrese:"
 
@@ -518,9 +425,6 @@ msgstr ""
 "Pieprasījuma veidotājs nav norādījis RelayState parametru, kas parādītu, "
 "kurp iet tālāk."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Juridiskais nosaukums"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostika"
 
@@ -529,9 +433,6 @@ msgstr ""
 "Šī ir SimpleSAMLphp statusa lapa. Te Jūs varat redzēt vai Jūsu sesija ir "
 "pārtraukta, cik ilgi tā bijusi aktīva un visus ar to saistītos atribūtus."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Organizācijas domeins"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Lapa nav atrasta"
 
@@ -550,30 +451,18 @@ msgstr "Lai aplūkotu SAML vienuma detaļas, klikšķiniet uz vienuma galvenes."
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Nederīgs sertifikāts"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Organizācijas vienības vārds (DN)"
-
 msgid "{general:remember}"
 msgstr "Atcerēties"
 
 msgid "{disco:selectidp}"
 msgstr "Izvēlieties identitātes piegādātāju"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Pasta kaste"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Priekšnieka vārds"
-
 msgid "{login:help_desk_email}"
 msgstr "Sūtīt e-pastu palīdzības dienestam"
 
 msgid "{login:help_desk_link}"
 msgstr "Palīdzības dienesta interneta lapa"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Lietotāja ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS kļūda"
 
@@ -594,12 +483,6 @@ msgstr "Atcerēties manu izvēli"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 servisa piegādātājs (hostēts)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Atrašanās vieta"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Apraksts, kā atšķirt cilvēku no robota"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "SimpleSAMLphp parasta faila formātā - lietojiet šo, ja izmantojat "
@@ -644,9 +527,6 @@ msgstr "Ziņa"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Nepazīstams sertifikāts"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fakss"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP kļūda"
 
@@ -663,15 +543,9 @@ msgstr ""
 "Iespējams, kļūda radusies no neparedzētas darbības vai nepareizas "
 "SimpleSAMLphp konfigurācijas. Nosūtiet administratoram kļūdas ziņojumu."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobilais telefons"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 identitātes piegādātājs (hostēts)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Vēlamā valoda"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Jūs neesat norādījis derīgu sertifikātu."
 
@@ -684,15 +558,6 @@ msgstr "Nav atrasti neobligātie lauki"
 msgid "{logout:logout_only}"
 msgstr "Nē, tikai %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organizācijas nosaukums"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Personas pamata organizācijas vienības vārds (DN)"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Personas kods"
-
 msgid "{login:next}"
 msgstr "Tālāk"
 
@@ -712,9 +577,6 @@ msgstr "Norādītā lapa nav atrasta. Iemesls: %REASON% Saite: %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Nav sertifikāta"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Paroles jaucējsumma (hash)"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Atslēgšanās informācija zaudēta"
 
@@ -729,12 +591,6 @@ msgstr ""
 "Šeit ir SimpleSAMLphp ģenerētie metadati. Jūs varat tos sūtīt partneriem,"
 " lai izveidotu uzticamu federāciju."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Privātās informācijas elementi"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP demonstrācijas piemērs"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikāti"
 
@@ -743,18 +599,12 @@ msgstr ""
 "Autentifikācija neizdevās, jo Jūsu interneta pārlūks atsūtījis nederīgu "
 "vai nelasāmu sertifikātu"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organizācijas juridiskais nosaukums"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parsēt"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organizācijas reģistrācijas numurs"
-
 msgid "Person's principal name at home organization"
 msgstr "Priekšnieka vārds"
 
@@ -1082,8 +932,8 @@ msgstr ""
 "SimpleSAMLphp konfigurācijas. Nosūtiet administratoram kļūdas ziņojumu."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Sesija ir derīga %SECONDS% sekundes no šī brīža."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Sesija ir derīga %remaining% sekundes no šī brīža."
 
 msgid "Domain component (DC)"
 msgstr "Domēns (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..dc076ea98c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nb\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Fullt navn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Fullt navn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Fullt navn"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Navneledd (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Navneledd (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Navneledd (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Navn som normalt vises"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisasjonens hjemmeside"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisasjonens hjemmeside"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisasjonens hjemmeside"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Foretaksnavn"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Foretaksnavn"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Foretaksnavn"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Tilhørighet"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Tilhørighet"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Tilhørighet"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Tillitsnivå for autentisering"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Tillitsnivå for autentisering"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Tillitsnivå for autentisering"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Rettighet"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Rettighet"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Rettighet"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Kallenavn"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Kallenavn"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Kallenavn"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Entydig navn (DN) for brukerens vertsorganisasjon"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Entydig navn (DN) for brukerens vertsorganisasjon"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Entydig navn (DN) for brukerens vertsorganisasjon"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Entydig navn (DN) for brukerens organisasjonsenhet"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Entydig navn (DN) for brukerens organisasjonsenhet"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Entydig navn (DN) for brukerens organisasjonsenhet"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primær tilknytning til organisasjon"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primær tilknytning til organisasjon"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primær tilknytning til organisasjon"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Entydig navn for organisasjonsenheten som brukeren primært er tilknyttet"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Entydig navn for organisasjonsenheten som brukeren primært er tilknyttet"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Entydig navn for organisasjonsenheten som brukeren primært er tilknyttet"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Gruppetilhørighet"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Gruppetilhørighet"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Gruppetilhørighet"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistent anonym ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faksnummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faksnummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faksnummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Fornavn"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Fornavn"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Fornavn"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Hjemmetelefon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Hjemmetelefon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Hjemmetelefon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Postadresse hjemme"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Postadresse hjemme"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Postadresse hjemme"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG-foto"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Sted"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Sted"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Sted"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI med valgfri tilleggskommentar"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI med valgfri tilleggskommentar"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI med valgfri tilleggskommentar"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-post"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-post"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-post"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Overordnet"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Overordnet"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Overordnet"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiltelefon"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisasjonsnummer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisasjonsnummer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisasjonsnummer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Fødselsdato"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Fødselsdato"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Fødselsdato"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokalt ID-nummer"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokalt ID-nummer"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokalt ID-nummer"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Fødselsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Fødselsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Fødselsnummer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Navn på organisasjon"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Navn på organisasjon"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Navn på organisasjon"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisasjonsenhet"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisasjonsenhet"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisasjonsenhet"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postboks"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postboks"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postboks"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Postadresse"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Postadresse"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Postadresse"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postnummer"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Foretrukket språk"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Foretrukket språk"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Foretrukket språk"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Unik ID for organisasjon"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Unik ID for organisasjon"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Unik ID for organisasjon"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Unik ID for organisasjon"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Private informasjonselement"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informasjonselement"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Private informasjonselement"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informasjonselement"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Etternavn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Etternavn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Etternavn"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Gate"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Gate"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Gate"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefon"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Tittel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Tittel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Tittel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Bruker-ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Bruker-ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Bruker-ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Hash av brukerens passord"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Hash av brukerens passord"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Hash av brukerens passord"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Fullt navn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Navn som normalt vises"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Navn som normalt vises"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Personlig ID hos organisasjonen"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faksnummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Fornavn"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Fornavn"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Fornavn"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Fornavn"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Fornavn"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Hjemmetelefon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Sted"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI med valgfri tilleggskommentar"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI med valgfri tilleggskommentar"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-post"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-post"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-post"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-post"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-post"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiltelefon"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Navn på organisasjon"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postnummer"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Foretrukket språk"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Foretrukket språk"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Foretrukket språk"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Foretrukket språk"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Foretrukket språk"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Etternavn"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Etternavn"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Etternavn"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Etternavn"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Etternavn"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefon"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Tittel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Tittel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Bruker-ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Bruker-ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Bruker-ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Bruker-ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Bruker-ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/messages.po
index aaa30d7309..26479a688d 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/nb/LC_MESSAGES/messages.po
@@ -50,12 +50,6 @@ msgstr "Feil ved lasting av metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Metadata parser"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Rettighet"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG-foto"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Ingen feil funnet"
 
@@ -131,9 +125,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Gå tilbake til SimpleSAMLphp installasjonen sin startside."
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation identitetsleverandør (ekstern)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp-feil"
 
@@ -152,18 +143,12 @@ msgstr ""
 " administrator for tjenesten, bør du kontrollere at metadata er satt opp "
 "riktig."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Entydig navn (DN) for brukerens vertsorganisasjon"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Feil forespørsel motatt"
 
 msgid "{status:sessionsize}"
 msgstr "Sesjons størrelse: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Postadresse"
-
 msgid "{logout:title}"
 msgstr "Utlogget"
 
@@ -185,30 +170,15 @@ msgstr "På vent"
 msgid "{admin:cfg_check_header}"
 msgstr "Sjekker konfigurasjonen"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Gruppetilhørighet"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Etternavn"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Send melding"
 
 msgid "{status:logout}"
 msgstr "Logg ut"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Navn på organisasjon"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefon"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Parametere sendt til discovery-tjenesten var ikke i korrekt format."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-post"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "En feil oppstod da SAML-forespørselen skulle lages."
 
@@ -218,9 +188,6 @@ msgstr "Valgbart felt"
 msgid "{logout:return}"
 msgstr "Tilbake til tjenesten"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Navn som normalt vises"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Du kan nå <a href=\"%METAURL%\">metadata i XML-format på en dedikert "
@@ -234,9 +201,6 @@ msgstr ""
 "Do kan skru av debug modus i den globale SimpleSAMLphp konfigurasjonsfila"
 " <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Postadresse hjemme"
-
 msgid "{disco:select}"
 msgstr "Velg"
 
@@ -263,9 +227,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Vil du logge ut fra alle tjenestene ovenfor?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Tittel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ingen tilgang"
 
@@ -278,9 +239,6 @@ msgstr "Spesifikasjon av RelayState mangler"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Tilstandsinformasjon tapt, det er ikke mulig å gjenoppta forespørselen"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Fødselsnummer"
-
 msgid "{login:password}"
 msgstr "Passord"
 
@@ -307,24 +265,15 @@ msgstr "Feil i behandling av logout-forespørselen"
 msgid "{admin:metaover_errorentry}"
 msgstr "Feil i metadataoppføringen"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Tilhørighet"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Ingen metadata funnet"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Fornavn"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktinformasjon:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Uhåndtert feil"
 
-msgid "{status:validfor}"
-msgstr "Din sesjon er gyldig i %SECONDS% sekunder fra nå."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo Eksempel"
 
@@ -358,30 +307,18 @@ msgstr "Velg hvilken konfigurasjonfil som skal sjekkes"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Authentisering feilet: sertifikatet nettleseren din sendte er ukjent"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisasjonens hjemmeside"
-
 msgid "{logout:logging_out_from}"
 msgstr "Logger ut fra følgende tjenester:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Du er nå logget ut fra %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation tjenesteleverandør (intern)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Feilrapport er sent til administrator."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Fødselsdato"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "En feil oppsto i behandlingen av logout-forespørselen."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistent anonym ID"
-
 msgid "{logout:success}"
 msgstr "Du har n&aring; logget ut fra alle tjenestene listet ovenfor."
 
@@ -391,12 +328,6 @@ msgstr "Notiser"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Godkjenningen ble avbrutt av brukeren"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primær tilknytning til organisasjon"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postnummer"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Feil i kommunikasjonen med CAS-tjeneren."
 
@@ -409,9 +340,6 @@ msgstr "SAML 2.0 SP metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Konvertert metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Fullt navn"
-
 msgid "{logout:completed}"
 msgstr "Fullført"
 
@@ -420,18 +348,9 @@ msgstr ""
 "Admin passordet i konfigurasjonen (auth.adminpassword) er ikke satt til "
 "noe annet enn default verdien. Bytt passord i config.php."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisasjonsenhet"
-
 msgid "{general:service_provider}"
 msgstr "Tjenesteleverandør"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Hjemmetelefon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Navneledd (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "En feil oppsto i forespørselen til denne siden. Grunnen var: %REASON%"
 
@@ -450,23 +369,14 @@ msgstr "Skriv inn brukernavn og passord"
 msgid "{errors:report_explain}"
 msgstr "Forklar hva du gjorde da feilen oppsto..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Overordnet"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Ingen SAML-respons angitt"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Kallenavn"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Du brukte SingleLogoutService-grensesnittet uten å angi enten en SAML "
 "LogoutRequest eller en LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Gate"
-
 msgid "{login:organization}"
 msgstr "Organisasjon"
 
@@ -506,9 +416,6 @@ msgstr "Velg vertsorganisasjon"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Overføldig element i konfigurasjonsfilen"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI med valgfri tilleggskommentar"
-
 msgid "{errors:report_email}"
 msgstr "E-postadresse:"
 
@@ -523,9 +430,6 @@ msgstr ""
 "Kilden til denne forespørselen har ikke angitt noen RelayState-parameter "
 "som angir hvor vi skal fortsette etterpå."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Folkeregistrert navn"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostikk"
 
@@ -535,9 +439,6 @@ msgstr ""
 "din er timet ut, hvor lenge det er til den timer ut og attributter som er"
 " knyttet til din sesjon."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Unik ID for organisasjon"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Kan ikke finne siden"
 
@@ -558,30 +459,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ugyldig sertifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Entydig navn (DN) for brukerens organisasjonsenhet"
-
 msgid "{general:remember}"
 msgstr "Godta også for fremtiden"
 
 msgid "{disco:selectidp}"
 msgstr "Velg din identitetsleverandør"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postboks"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Personlig ID hos organisasjonen"
-
 msgid "{login:help_desk_email}"
 msgstr "Send e-post til brukerstøtte"
 
 msgid "{login:help_desk_link}"
 msgstr "Hjemmesiden til brukerstøtte"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Bruker-ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS-feil"
 
@@ -602,12 +491,6 @@ msgstr "Husk mitt valg"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 tjenesteleverandør (intern)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Sted"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Tillitsnivå for autentisering"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "I SimpleSAMLphp format - bruk denne dersom du benytter SimpleSAMLphp i "
@@ -652,9 +535,6 @@ msgstr "Melding"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Ukjent sertifikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faksnummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP-feil"
 
@@ -673,15 +553,9 @@ msgstr ""
 "eller den er en følge av en uforutsett hendelse. Kontakt administratoren "
 "av denne tjenesten og rapporter så mye som mulig angående feilen."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiltelefon"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identitetsleverandør (ekstern)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Foretrukket språk"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Du presenterte ikke et gyldig sertifikat"
 
@@ -696,15 +570,6 @@ msgstr "Følgende valgbare felt ble ikke funnet"
 msgid "{logout:logout_only}"
 msgstr "Nei, bare %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Navn på organisasjon"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Entydig navn for organisasjonsenheten som brukeren primært er tilknyttet"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokalt ID-nummer"
-
 msgid "{login:next}"
 msgstr "Fortsett"
 
@@ -722,9 +587,6 @@ msgstr "Den angitte siden finnes ikke. Grunnen er: %REASON%. URLen var: %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Ikke noe sertifikat mottatt"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Hash av brukerens passord"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informasjon om utlogging er tapt"
 
@@ -739,12 +601,6 @@ msgstr ""
 "Her er metadata som SimpleSAMLphp har generert for deg. Du må utveksle "
 "metadata med de partene du stoler på for å sette opp en føderasjon."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Private informasjonselement"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo Eksempel"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikater"
 
@@ -753,18 +609,12 @@ msgstr ""
 "Autentisering feilet: sertifikatet nettleseren din sendte er ugyldig, og "
 "kan ikke leses"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Foretaksnavn"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth Demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Pars"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisasjonsnummer"
-
 msgid "Hello, Untranslated World!"
 msgstr "Hallo, oversatte verden!"
 
@@ -1106,8 +956,8 @@ msgstr ""
 "av denne tjenesten og rapporter så mye som mulig angående feilen."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Din sesjon er gyldig i %SECONDS% sekunder fra nå."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Din sesjon er gyldig i %remaining% sekunder fra nå."
 
 msgid "Domain component (DC)"
 msgstr "Navneledd (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..73e3a7612d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Algemene naam"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Algemene naam"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Algemene naam"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domeincomponent"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domeincomponent"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domeincomponent"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Weergavenaam"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisatie homepage"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisatie homepage"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisatie homepage"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organisatie naam"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organisatie naam"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organisatie naam"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Affiliatie"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Affiliatie"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Affiliatie"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Identiteitsverzekeringsprofiel"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identiteitsverzekeringsprofiel"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identiteitsverzekeringsprofiel"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Recht"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Recht"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Recht"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Bijnaam"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Bijnaam"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Bijnaam"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) van de organisatie van de persoon"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) van de organisatie van de persoon"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) van de organisatie van de persoon"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) van de afdeling van de persoon"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) van de afdeling van de persoon"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) van de afdeling van de persoon"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primaire relatie"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primaire relatie"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primaire relatie"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) van de organisatie hoofdafdeling waartoe de persoon behoort"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Distinguished name (DN) van de organisatie hoofdafdeling waartoe de persoon behoort"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Distinguished name (DN) van de organisatie hoofdafdeling waartoe de persoon behoort"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Groep"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Groep"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Groep"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Persistente anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistente anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistente anonieme ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faxnummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Voornaam"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Thuistelefoon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Thuistelefoon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Thuistelefoon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Werkadres"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Werkadres"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Werkadres"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG-foto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG-foto"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Plaats"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Plaats"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Plaats"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiel"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiel"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiel"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisatie nummer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisatie nummer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisatie nummer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Geboortedatum"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Geboortedatum"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Geboortedatum"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Identiteitsnummer"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Identiteitsnummer"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Identiteitsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Burgerservicenummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Burgerservicenummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Burgerservicenummer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organisatie naam"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organisatie naam"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organisatie naam"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Afdeling"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Afdeling"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Afdeling"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postbus"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postbus"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postbus"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adres"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adres"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adres"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postcode"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postcode"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postcode"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Voorkeurstaal"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Voorkeurstaal"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Voorkeurstaal"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Unieke Organisatie ID"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Unieke Organisatie ID"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Unieke Organisatie ID"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Unieke Organisatie ID"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Privé informatie-elementen"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Privé informatie-elementen"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Privé informatie-elementen"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Privé informatie-elementen"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Achternaam"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Achternaam"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Achternaam"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Straat"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Straat"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Straat"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefoonnummer"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefoonnummer"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefoonnummer"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Gebruikers ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Password hash"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Password hash"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Password hash"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Algemene naam"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Weergavenaam"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Weergavenaam"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Persoons ID bij organisatie"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Persistente anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Persistente anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Persistente anonieme ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Persistente anonieme ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faxnummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Voornaam"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Voornaam"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Thuistelefoon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Plaats"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiel"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organisatie naam"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postcode"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postcode"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Voorkeurstaal"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Voorkeurstaal"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Voorkeurstaal"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Voorkeurstaal"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Voorkeurstaal"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Achternaam"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Achternaam"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Achternaam"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Achternaam"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Achternaam"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefoonnummer"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefoonnummer"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Gebruikers ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Gebruikers ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/messages.po
index 5704f1458f..9eed3f830f 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/nl/LC_MESSAGES/messages.po
@@ -53,12 +53,6 @@ msgstr "Fout bij het laden van metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Metadata parser"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Recht"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG-foto"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Geen fouten gevonden."
 
@@ -137,9 +131,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Ga terug naar de SimpleSAMLphp installatiepagina"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (Remote)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp-fout"
 
@@ -154,21 +145,15 @@ msgstr ""
 
 msgid "{errors:descr_METADATA}"
 msgstr ""
-"SimplSAMLphp is niet goed geconfigureerd. De beheerder van deze dienst "
+"SimpleSAMLphp is niet goed geconfigureerd. De beheerder van deze dienst "
 "dient de metadata configuratie te controleren."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) van de organisatie van de persoon"
-
 msgid "{errors:title_BADREQUEST}"
-msgstr "Incorrect request ontvangen"
+msgstr "Incorrecte request ontvangen"
 
 msgid "{status:sessionsize}"
 msgstr "Sessiegrootte: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adres"
-
 msgid "{logout:title}"
 msgstr "Uitgelogd"
 
@@ -196,32 +181,17 @@ msgstr "Vastgehouden"
 msgid "{admin:cfg_check_header}"
 msgstr "Configuratie-validatie"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Groep"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Achternaam"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Verstuur bericht"
 
 msgid "{status:logout}"
 msgstr "Logout"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organisatienaam"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefoonnummer"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "De parameters die naar de discovery service zijn gestuurd, zijn niet "
 "correct volgens de specificatie."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Er is een fout opgetreden bij het aanmaken van een SAML request."
 
@@ -231,9 +201,6 @@ msgstr "Optionele velden"
 msgid "{logout:return}"
 msgstr "Terug naar service"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Weergavenaam"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "U kunt <a href=\"%METAURL%\">deze directe URL gebruiken</a> om de "
@@ -247,9 +214,6 @@ msgstr ""
 "U kunt debug mode uitschakelen in de globale SimpleSAMLphp configuratie "
 "file <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Werkadres"
-
 msgid "{disco:select}"
 msgstr "Kies"
 
@@ -279,9 +243,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Wil je uitloggen van alle bovenvermelde diensten?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Geen toegang"
 
@@ -298,9 +259,6 @@ msgstr ""
 "Informatie over de toestand is verloren, en het verzoek kan niet herstart"
 " worden"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Burgerservicenummer"
-
 msgid "{login:password}"
 msgstr "Wachtwoord"
 
@@ -327,24 +285,15 @@ msgstr "Fout bij het verwerken van een Logout Request"
 msgid "{admin:metaover_errorentry}"
 msgstr "Fout in metadata"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Affiliatie"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata niet gevonden"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Voornaam"
-
 msgid "{login:contact_info}"
 msgstr "Contactinformatie"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Onverwachte foutmelding"
 
-msgid "{status:validfor}"
-msgstr "Uw sessie is nog %SECONDS% seconden geldig vanaf dit moment."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo"
 
@@ -383,33 +332,21 @@ msgstr ""
 "Authenticatie niet gelukt: het certificaat dat uw browser stuurde is "
 "onbekend"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisatie homepage"
-
 msgid "{logout:logging_out_from}"
 msgstr "Uitloggen van de volgende diensten:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Je bent nu succesvol uitgelogd van %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Hosted)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Het foutmeldingsrapport is verstuurd naar de beheerders"
 
 msgid "{status:subject_header}"
 msgstr "SAML Subject"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Geboortedatum"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Er is een fout opgetreden tijdens het verwerken van een Logout Request."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistente anonieme ID"
-
 msgid "{logout:success}"
 msgstr "Je bent succesvol uitgelogd van de bovenvermelde services."
 
@@ -419,12 +356,6 @@ msgstr "Opmerkingen"
 msgid "{errors:descr_USERABORTED}"
 msgstr "De authenticatie is afgebroken door de gebruiker"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primaire relatie"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postcode"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Fout tijdens communicatie met de CAS server."
 
@@ -437,9 +368,6 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Geconverteerde metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Algemene naam"
-
 msgid "{logout:completed}"
 msgstr "Voltooid"
 
@@ -448,18 +376,9 @@ msgstr ""
 "Het default wachtwoord in de configuratie (auth.adminpassword) is niet "
 "aangepast; pas de configuratie aan aub."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Afdeling"
-
 msgid "{general:service_provider}"
 msgstr "Service Provider"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Thuistelefoon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domeincomponent"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr ""
 "Er is een fout opgetreden in het verzoek voor deze pagina. De oorzaak is:"
@@ -480,23 +399,14 @@ msgstr "Geef je gebruikersnaam en wachtwoord"
 msgid "{errors:report_explain}"
 msgstr "Leg uit wat je deed toen deze foutmelding optrad..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Geen SAML response gevonden"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Bijnaam"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Je hebt de SingleLogoutService interface aangeroepen, maar hebt geen SAML"
 " LogoutRequest of LogoutResponse meegestuurd."
 
-msgid "{attributes:attribute_street}"
-msgstr "Straat"
-
 msgid "{login:organization}"
 msgstr "Organisatie"
 
@@ -536,9 +446,6 @@ msgstr "Kies je organisatie"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Teveel opties in de config file"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI"
-
 msgid "{errors:report_email}"
 msgstr "E-mailadres:"
 
@@ -553,9 +460,6 @@ msgstr ""
 "De afzender van deze request heeft geen RelayState parameter meegestuurd "
 "om aan te geven wat de volgende bestemming is."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Officiële naam"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp controle"
 
@@ -565,9 +469,6 @@ msgstr ""
 "sessie nog geldig is, hoe lang het nog duurt voordat deze verloopt, en u "
 "kunt alle attributen bekijken die aanwezig zijn in deze sessie."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Unieke Organisatie ID"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Pagina niet gevonden"
 
@@ -586,33 +487,18 @@ msgstr "Klik op een SAML-entiteit om de details voor die entiteit te bekijken."
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ongeldig certificaat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) van de afdeling van de persoon"
-
 msgid "{general:remember}"
 msgstr "Bewaar toestemming"
 
 msgid "{disco:selectidp}"
 msgstr "Kies je Identity Provider"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postbus"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Persoons ID bij organisatie"
-
 msgid "{login:help_desk_email}"
 msgstr "Stuur een e-mail naar de helpdesk"
 
 msgid "{login:help_desk_link}"
 msgstr "Helpdesk homepage"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Groepslidmaatschap"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Gebruikers ID"
-
 msgid "{login:remember_me}"
 msgstr "Onthoud mij"
 
@@ -636,12 +522,6 @@ msgstr "Onthoud mijn keuze"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Hosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Plaats"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identiteitsverzekeringsprofiel"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "In SimpleSAMLphp flat file formaat - gebruik dit wanneer uw "
@@ -692,9 +572,6 @@ msgstr "ADFS Identity Provider (Hosted)"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Onbekend certificaat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faxnummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP Fout"
 
@@ -713,18 +590,12 @@ msgstr ""
 "door verkeerde configuratie van SimpleSAMLphp. Meld dit bij de beheerder "
 "van deze authenticatiedienst, en geef bovenstaande melding door."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiel"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "ADFS IdP Metadata"
 
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Hosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Voorkeurstaal"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Je hebt geen geldig certificaat meegegeven"
 
@@ -739,17 +610,6 @@ msgstr "De volgende optionele velden konden niet worden gevonden"
 msgid "{logout:logout_only}"
 msgstr "Nee, alleen %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organisatie naam"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr ""
-"Distinguished name (DN) van de organisatie hoofdafdeling waartoe de "
-"persoon behoort"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Identiteitsnummer"
-
 msgid "{login:next}"
 msgstr "Volgende"
 
@@ -769,9 +629,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Geen certificaat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Password hash"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Logout informatie is verloren gegaan"
 
@@ -786,12 +643,6 @@ msgstr ""
 "Dit is de metadata die automatisch is gegenereerd door SimpleSAMLphp. U "
 "kunt deze metadata uitwisselen met uw federatiepartners."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Privé informatie-elementen"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certificaten"
 
@@ -800,18 +651,12 @@ msgstr ""
 "Authenticatie niet gelukt: uw browser stuurde een certificaat dat "
 "ongeldig is of niet gelezen kon worden"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organisatie naam"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parse"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisatie nummer"
-
 msgid "Person's principal name at home organization"
 msgstr "Persoons ID bij organisatie"
 
@@ -1159,8 +1004,8 @@ msgstr ""
 "van deze authenticatiedienst, en geef bovenstaande melding door."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Uw sessie is nog %SECONDS% seconden geldig vanaf dit moment."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Uw sessie is nog %remaining% seconden geldig vanaf dit moment."
 
 msgid "Domain component (DC)"
 msgstr "Domeincomponent"
@@ -1540,7 +1385,7 @@ msgid ""
 " are the administrator of this service, you should make sure your "
 "metadata configuration is correctly setup."
 msgstr ""
-"SimplSAMLphp is niet goed geconfigureerd. De beheerder van deze dienst "
+"SimpleSAMLphp is niet goed geconfigureerd. De beheerder van deze dienst "
 "dient de metadata configuratie te controleren."
 
 msgid "Incorrect username or password"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..5d759c4ab5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Fullt namn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Fullt namn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Fullt namn"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Namneledd (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Namneledd (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Namneledd (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Namn slik det normalt blir vist fram"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisasjonen si heimeside (URL)"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisasjonen si heimeside (URL)"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisasjonen si heimeside (URL)"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Formelt namn på organisasjonen"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Formelt namn på organisasjonen"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Formelt namn på organisasjonen"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Rolle ved organisasjonen"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Rolle ved organisasjonen"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Rolle ved organisasjonen"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Tillitsnivå for autentisering"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Tillitsnivå for autentisering"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Tillitsnivå for autentisering"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "URI som viser til eit sett av rettar til spesifikke ressursar"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "URI som viser til eit sett av rettar til spesifikke ressursar"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "URI som viser til eit sett av rettar til spesifikke ressursar"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Kallenamn"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Kallenamn"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Kallenamn"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Eintydig namn (DN) til heimeorganisasjon for brukaren"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Eintydig namn (DN) til heimeorganisasjon for brukaren"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Eintydig namn (DN) til heimeorganisasjon for brukaren"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Eintydig namn (DN) til organisasjonseining for brukaren"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Eintydig namn (DN) til organisasjonseining for brukaren"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Eintydig namn (DN) til organisasjonseining for brukaren"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primærtilknyting til organisasjonen"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primærtilknyting til organisasjonen"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primærtilknyting til organisasjonen"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Eintydig namn (DN) til primær organisasjonseining for personen"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Eintydig namn (DN) til primær organisasjonseining for personen"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Eintydig namn (DN) til primær organisasjonseining for personen"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Rolle hos organisasjonen "
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Rolle hos organisasjonen "
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Rolle hos organisasjonen "
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Persistent anonym ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faksnummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faksnummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faksnummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Fornamn"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Fornamn"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Fornamn"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Heimetelefon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Heimetelefon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Heimetelefon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Postadresse heime"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Postadresse heime"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Postadresse heime"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto på JPEG-format"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto på JPEG-format"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto på JPEG-format"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Stad"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Stad"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Stad"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI med valfri tilleggskommentar"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI med valfri tilleggskommentar"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI med valfri tilleggskommentar"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Epostadresse"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Epostadresse"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Epostadresse"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Overordna"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Overordna"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Overordna"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiltelefon"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisasjonsnummer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisasjonsnummer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisasjonsnummer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Fødselsdato"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Fødselsdato"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Fødselsdato"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokalt brukarnummer (ansattnummer, studentnummer, elevnummer osb)"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokalt brukarnummer (ansattnummer, studentnummer, elevnummer osb)"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokalt brukarnummer (ansattnummer, studentnummer, elevnummer osb)"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Fødselsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Fødselsnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Fødselsnummer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Namn på organisasjon"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Namn på organisasjon"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Namn på organisasjon"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisasjonseining"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisasjonseining"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisasjonseining"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Postboks"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Postboks"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Postboks"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Postadresse"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Postadresse"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Postadresse"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postnummer"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Førsteval for språk eller målform"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Unik ID for organisasjon"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Unik ID for organisasjon"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Unik ID for organisasjon"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Unik ID for organisasjon"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Private informasjonselement"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informasjonselement"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Private informasjonselement"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Private informasjonselement"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Etternamn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Etternamn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Etternamn"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Gateadresse"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Gateadresse"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Gateadresse"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefon"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Tittel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Tittel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Tittel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Lokalt brukarnamn"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Lokalt brukarnamn"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Lokalt brukarnamn"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Passord for brukaren (lagra som hash-verdi)"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Passord for brukaren (lagra som hash-verdi)"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Passord for brukaren (lagra som hash-verdi)"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Fullt namn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Namn slik det normalt blir vist fram"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Brukarnamn hos din organisasjon"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Persistent anonym ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faksnummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Fornamn"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Fornamn"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Fornamn"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Fornamn"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Fornamn"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Heimetelefon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Stad"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI med valfri tilleggskommentar"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI med valfri tilleggskommentar"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Epostadresse"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Epostadresse"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Epostadresse"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Epostadresse"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Epostadresse"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiltelefon"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Namn på organisasjon"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postnummer"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postnummer"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Førsteval for språk eller målform"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Etternamn"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Etternamn"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Etternamn"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Etternamn"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Etternamn"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefon"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefon"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Tittel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Tittel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Lokalt brukarnamn"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Lokalt brukarnamn"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Lokalt brukarnamn"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Lokalt brukarnamn"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Lokalt brukarnamn"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/messages.po
index 9e623c9a7f..c22f8b668b 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/nn/LC_MESSAGES/messages.po
@@ -50,12 +50,6 @@ msgstr "Feil under lasting av metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Parser for metadata"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "URI som viser til eit sett av rettar til spesifikke ressursar"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Foto på JPEG-format"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Fann ingen feil"
 
@@ -133,9 +127,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Gå tilbake til SimpleSAMLphp installasjonssida"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (Remote)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp feil"
 
@@ -153,18 +144,12 @@ msgstr ""
 "administrator må du sjekka metadata-konfigurasjonen.  Dersom du ikkje er "
 "administrator, ta kontakt med henne."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Eintydig namn (DN) til heimeorganisasjon for brukaren"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Feil spørsmål mottatt"
 
 msgid "{status:sessionsize}"
 msgstr "Sesjonsstorleik: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Postadresse"
-
 msgid "{logout:title}"
 msgstr "Utlogga"
 
@@ -186,32 +171,17 @@ msgstr "Venter"
 msgid "{admin:cfg_check_header}"
 msgstr "Konfigurasjonssjekk"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Rolle hos organisasjonen "
-
-msgid "{attributes:attribute_sn}"
-msgstr "Etternamn"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Send melding"
 
 msgid "{status:logout}"
 msgstr "Logg ut"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Namn på organisasjon"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefon"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Parameter sendt til Discovery Service er ikkje i samsvar med "
 "spesifikasjon."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Epostadresse"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Ein feil oppsto i prosessen med laging av SAML-spørsmålet"
 
@@ -221,9 +191,6 @@ msgstr "Valfrie felt"
 msgid "{logout:return}"
 msgstr "Gå tilbake til tenesta"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Namn slik det normalt blir vist fram"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Du kan <a href=\"%METAURL%\">få metadata i XML på ein URL</a>:"
 
@@ -235,9 +202,6 @@ msgstr ""
 "Du kan skru av feilsøkingsmodus i den globale konfigurasjonsfila for "
 "SimpleSAMLphp <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Postadresse heime"
-
 msgid "{disco:select}"
 msgstr "Vel"
 
@@ -265,9 +229,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Vil du logga ut frå alle tenestene?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Tittel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ingen tilgang"
 
@@ -280,9 +241,6 @@ msgstr "Ingen RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Mista tilstandsinformasjon, og klarer ikkje å gjera omstart"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Fødselsnummer"
-
 msgid "{login:password}"
 msgstr "Passord"
 
@@ -309,24 +267,15 @@ msgstr "Feil under prosessering av utloggingsspørsmål"
 msgid "{admin:metaover_errorentry}"
 msgstr "Feil i dette metadatainnslaget"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Rolle ved organisasjonen"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Finn ikkje metadata"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Fornamn"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktinformasjon:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Feilsituasjon som ikkje er riktig handtert"
 
-msgid "{status:validfor}"
-msgstr "Din sesjon er gyldig i %SECONDS% sekund frå no."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Demonstrasjon av SAML 2.0 SP"
 
@@ -360,30 +309,18 @@ msgstr "Vel konfigurasjonsfil som skal sjekkast"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Feil autentisering: ukjent sertifikat mottatt frå din browser"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisasjonen si heimeside (URL)"
-
 msgid "{logout:logging_out_from}"
 msgstr "Logger ut frå følgende tenester:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Du er ferdig utlogga frå %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Hosted)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Feilrapport har blitt sendt til administrator"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Fødselsdato"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Handteringa av spørsmål om utlogging er ikkje ferdig, det oppsto ein feil."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Persistent anonym ID"
-
 msgid "{logout:success}"
 msgstr "Du er ferdig utlogga frå alle tenestene"
 
@@ -393,12 +330,6 @@ msgstr "Legg merke til"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Innlogging blei avbroten av sluttbrukaren"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primærtilknyting til organisasjonen"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postnummer"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Feil under kommunikasjon med CAS-tenaren"
 
@@ -411,9 +342,6 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Konverterte metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Fullt namn"
-
 msgid "{logout:completed}"
 msgstr "Ferdig"
 
@@ -423,18 +351,9 @@ msgstr ""
 "opprinneleg verdi, dette er usikkert.  Gå inn i konfigurasjonen og bytt "
 "passord."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisasjonseining"
-
 msgid "{general:service_provider}"
 msgstr "Tenesteleverandør"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Heimetelefon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Namneledd (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr ""
 "Det er ein feil i spørringa etter denne sida.  Grunnen til dette er "
@@ -455,24 +374,15 @@ msgstr "Skriv inn brukarnamn og passord"
 msgid "{errors:report_explain}"
 msgstr "Forklar kva du gjorde og korleis feilen oppsto..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Overordna"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Fann ikkje SAML-svar"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Kallenamn"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Du har bruk utloggingstenesta (SingleLogoutService), men har ikkje sendt "
 "utloggingsmelding (SAML LogoutRequest) eller utloggingssvar (SAML "
 "LogoutResponse)"
 
-msgid "{attributes:attribute_street}"
-msgstr "Gateadresse"
-
 msgid "{login:organization}"
 msgstr "Organisasjon"
 
@@ -513,9 +423,6 @@ msgstr "Vel vertsorganisasjon"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Overflødig informasjon i konfigurasjonsfila"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI med valfri tilleggskommentar"
-
 msgid "{errors:report_email}"
 msgstr "E-postadresse:"
 
@@ -530,9 +437,6 @@ msgstr ""
 "Opphavsmann til denne meldinga har ikkje sendt med RelayState-parameter. "
 "Då veit vi ikke kvar vi skal, og det blir feil."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Namn registrert i Folkeregisteret"
-
 msgid "{status:header_diagnostics}"
 msgstr "Feilsøking av SimpleSAMLphp"
 
@@ -542,9 +446,6 @@ msgstr ""
 "din er gyldig, kor lenge han varer og du kan sjå alle attributt som blir "
 "brukte i sesjonen din."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Unik ID for organisasjon"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Fann ikkje sida"
 
@@ -563,30 +464,18 @@ msgstr "For å sjå på detaljane for ein SAML entitet, klikk på SAML entitet"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Ugyldig sertifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Eintydig namn (DN) til organisasjonseining for brukaren"
-
 msgid "{general:remember}"
 msgstr "Godta også for framtida"
 
 msgid "{disco:selectidp}"
 msgstr "Vel innloggingsteneste"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Postboks"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Brukarnamn hos din organisasjon"
-
 msgid "{login:help_desk_email}"
 msgstr "Send epost til brukarstøtte"
 
 msgid "{login:help_desk_link}"
 msgstr "Heimeside for brukarstøtte"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Lokalt brukarnamn"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS-feil"
 
@@ -607,12 +496,6 @@ msgstr "Hugs mitt val"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Hosted)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Stad"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Tillitsnivå for autentisering"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "På flat fil for SimpleSAMLphp.  Bruk denne dersom du bruker SimpleSAMLphp"
@@ -657,9 +540,6 @@ msgstr "Melding"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Ukjent sertifikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faksnummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP-feil"
 
@@ -677,15 +557,9 @@ msgstr ""
 "eller ein ukjent feil. Kontakt administrator av tenesta og rapporter "
 "detaljar om feilen."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiltelefon"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Hosted)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Førsteval for språk eller målform"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Du har ikkje brukt eit gyldig sertifikat i kommunikasjonen din"
 
@@ -700,15 +574,6 @@ msgstr "Fann ikkje følgjande valfrie felt"
 msgid "{logout:logout_only}"
 msgstr "Nei, logg berre ut frå %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Namn på organisasjon"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Eintydig namn (DN) til primær organisasjonseining for personen"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokalt brukarnummer (ansattnummer, studentnummer, elevnummer osb)"
-
 msgid "{login:next}"
 msgstr "Neste"
 
@@ -726,9 +591,6 @@ msgstr "Fann ikkje den aktuelle sida på grunn av %REASON%.  URLen var %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Manglar sertifikat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Passord for brukaren (lagra som hash-verdi)"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Mista utloggingsinformasjon"
 
@@ -744,12 +606,6 @@ msgstr ""
 "metadata-dokumentet til dine partnarar, slik at de kan setja opp ein "
 "tillitsføderasjon."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Private informasjonselement"
-
-msgid "{status:header_wsfed}"
-msgstr "Demonstrasjon av WS-Federation SP"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikat"
 
@@ -758,18 +614,12 @@ msgstr ""
 "Feil autentisering: sertifikatet frå browsaren din er ugyldig eller "
 "uleseleg"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Formelt namn på organisasjonen"
-
 msgid "{status:header_shib}"
 msgstr "Demonstrasjon av Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parser"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisasjonsnummer"
-
 msgid "Hello, Untranslated World!"
 msgstr "Hallo, oversette verd!"
 
@@ -1112,8 +962,8 @@ msgstr ""
 "detaljar om feilen."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Din sesjon er gyldig i %SECONDS% sekund frå no."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Din sesjon er gyldig i %remaining% sekund frå no."
 
 msgid "Domain component (DC)"
 msgstr "Namneledd (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..6a9ff83314
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nazwa (Common name)"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nazwa (Common name)"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nazwa (Common name)"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Składnik nazwy domenowej (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Składnik nazwy domenowej (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Składnik nazwy domenowej (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nazwa wyświetlana (Display name)"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Strona domowa organizacji"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Strona domowa organizacji"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Strona domowa organizacji"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Zarejestrowana nazwa organizacji"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Zarejestrowana nazwa organizacji"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Zarejestrowana nazwa organizacji"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Przynależność (Affiliation)"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Przynależność (Affiliation)"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Przynależność (Affiliation)"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Uprawnienie dotyczące serwisu"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Uprawnienie dotyczące serwisu"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Uprawnienie dotyczące serwisu"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Ksywka (Nickname)"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Ksywka (Nickname)"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Ksywka (Nickname)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Distinguished name (DN) macierzystej organizacji osoby"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Distinguished name (DN) macierzystej organizacji osoby"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Distinguished name (DN) macierzystej organizacji osoby"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) macierzystej jednostki organizacyjnej osoby"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Distinguished name (DN) macierzystej jednostki organizacyjnej osoby"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Distinguished name (DN) macierzystej jednostki organizacyjnej osoby"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Główna przynależność (Primary affiliation)"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Główna przynależność (Primary affiliation)"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Główna przynależność (Primary affiliation)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Nazwa osoby w jednostce organizacyjnej"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Nazwa osoby w jednostce organizacyjnej"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Nazwa osoby w jednostce organizacyjnej"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Przynależność w macierzystej organizacji"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Przynależność w macierzystej organizacji"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Przynależność w macierzystej organizacji"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Numer Faksu (Fax number)"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Numer Faksu (Fax number)"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Numer Faksu (Fax number)"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Imię (Given name)"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Imię (Given name)"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Imię (Given name)"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefon domowy (Home telephone)"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefon domowy (Home telephone)"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefon domowy (Home telephone)"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Domowy address pocztowy"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Domowy address pocztowy"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Domowy address pocztowy"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Fotografia JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Fotografia JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Fotografia JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Locality"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Locality"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Locality"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Labeled URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Labeled URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Labeled URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Menadżer (Manager)"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Menadżer (Manager)"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Menadżer (Manager)"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Telefon komórkowy (Mobile)"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Telefon komórkowy (Mobile)"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Telefon komórkowy (Mobile)"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Numer organizacji"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Numer organizacji"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Numer organizacji"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Data urodzenia (Date of birth)"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Data urodzenia (Date of birth)"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Data urodzenia (Date of birth)"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Local identity number"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Local identity number"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Local identity number"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Numer tożsamości wydany przez administrację publiczną"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Numer tożsamości wydany przez administrację publiczną"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Numer tożsamości wydany przez administrację publiczną"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nazwa organizacji (Organization name)"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nazwa organizacji (Organization name)"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nazwa organizacji (Organization name)"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Jednostka organizacyjna (Organizational unit)"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Jednostka organizacyjna (Organizational unit)"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Jednostka organizacyjna (Organizational unit)"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Skrzynka pocztowa (Post office box)"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Skrzynka pocztowa (Post office box)"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Skrzynka pocztowa (Post office box)"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adres pocztowy (Postal address)"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adres pocztowy (Postal address)"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adres pocztowy (Postal address)"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Kod pocztowy"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Kod pocztowy"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Kod pocztowy"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Preferowany język (Preferred language)"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Nazwa organizacji macierzystej"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Nazwa organizacji macierzystej"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Nazwa organizacji macierzystej"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Nazwa organizacji macierzystej"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Poufne atrybuty"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Poufne atrybuty"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Poufne atrybuty"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Poufne atrybuty"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Nazwisko (Surname)"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Nazwisko (Surname)"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Nazwisko (Surname)"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Ulica (Street)"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Ulica (Street)"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Ulica (Street)"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Numer telefonu (Telephone number)"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Numer telefonu (Telephone number)"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Numer telefonu (Telephone number)"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Tytuł (Title)"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Tytuł (Title)"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Tytuł (Title)"
+
+# English string: User ID
+msgid "uid"
+msgstr "ID użytkownika (User ID)"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "ID użytkownika (User ID)"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "ID użytkownika (User ID)"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Zakodowane hasło użytkownika"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Zakodowane hasło użytkownika"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Zakodowane hasło użytkownika"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nazwa (Common name)"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nazwa wyświetlana (Display name)"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Główna nazwa użytkownika w instytucji macierzystej"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Trwały anonimowy identyfikator"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Numer Faksu (Fax number)"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Imię (Given name)"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Imię (Given name)"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Imię (Given name)"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Imię (Given name)"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Imię (Given name)"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefon domowy (Home telephone)"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Locality"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Labeled URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Labeled URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Telefon komórkowy (Mobile)"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nazwa organizacji (Organization name)"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Kod pocztowy"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Kod pocztowy"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Preferowany język (Preferred language)"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Nazwisko (Surname)"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Nazwisko (Surname)"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Nazwisko (Surname)"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Nazwisko (Surname)"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Nazwisko (Surname)"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Numer telefonu (Telephone number)"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Numer telefonu (Telephone number)"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Tytuł (Title)"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Tytuł (Title)"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "ID użytkownika (User ID)"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "ID użytkownika (User ID)"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "ID użytkownika (User ID)"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "ID użytkownika (User ID)"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "ID użytkownika (User ID)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/messages.po
index f507fd6000..2a4dbb8678 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/pl/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "Błąd ładowania metadanych"
 msgid "{admin:metaconv_title}"
 msgstr "Parser metadanych"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Uprawnienie dotyczące serwisu"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Fotografia JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nie znaleziono błędów."
 
@@ -130,9 +124,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Wróc do strony \"instalacja SimpleSAMLphp\""
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Dostawca Tożsamości (Zdalny)"
-
 msgid "{errors:error_header}"
 msgstr "błąd SimpleSAMLphp"
 
@@ -150,18 +141,12 @@ msgstr ""
 "Wykryto błąd w konfiguracji SimpleSAMLphp. Jeśli jesteś administratorem "
 "tej usługi, to sprawdź, czy prawidłowo zostały skonfigurowane metadane."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) macierzystej organizacji osoby"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Otrzymano nieprawidłowe żadanie"
 
 msgid "{status:sessionsize}"
 msgstr "Rozmiar sesji: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adres pocztowy (Postal address)"
-
 msgid "{logout:title}"
 msgstr "Wylogowano"
 
@@ -183,30 +168,15 @@ msgstr "W zawieszeniu"
 msgid "{admin:cfg_check_header}"
 msgstr "Sprawdzenie konfiguracji"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Przynależność w macierzystej organizacji"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Nazwisko (Surname)"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Wyślij wiadomość"
 
 msgid "{status:logout}"
 msgstr "Wyloguj"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Nazwa organizacji (Organization name)"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Numer telefonu (Telephone number)"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Parametry wysłane do usługi wyszukiwania nie są zgodne ze specyfikacją"
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Wystąpił błąd podczas próby budowania żądania SAML"
 
@@ -216,9 +186,6 @@ msgstr "Pola opcjonalne"
 msgid "{logout:return}"
 msgstr "Powrót do serwisu"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nazwa wyświetlana (Display name)"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Możesz <a href=\"%METAURL%\">pobrać metadane w formacie xml</a>:"
 
@@ -230,9 +197,6 @@ msgstr ""
 "Możesz wyłaczyć globalnie tryb debugowania w pliku  "
 "<tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Domowy address pocztowy"
-
 msgid "{disco:select}"
 msgstr "Wybierz"
 
@@ -259,9 +223,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Czy chcesz zostać wylogowany z powyższych serwisów?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Tytuł (Title)"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Brak dostępu"
 
@@ -276,9 +237,6 @@ msgstr "Brak RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Utracono informacje o stanie i nie ma możliwości ponowienia zlecenia"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Numer tożsamości wydany przez administrację publiczną"
-
 msgid "{login:password}"
 msgstr "Hasło"
 
@@ -305,24 +263,15 @@ msgstr "Błąd przetwarzania żądania wylogowania"
 msgid "{admin:metaover_errorentry}"
 msgstr "Błąd w metadanych"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Przynależność (Affiliation)"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Nie znaleziono metadanych"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Imię (Given name)"
-
 msgid "{login:contact_info}"
 msgstr "Informacje kontaktowe:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Nieobsługiwany błąd"
 
-msgid "{status:validfor}"
-msgstr "Twoja sesja jest jeszcze ważna przez %SECONDS% sekund"
-
 msgid "{status:header_saml20_sp}"
 msgstr "Przykładowe Demo SAML 2.0 SP"
 
@@ -358,30 +307,18 @@ msgstr ""
 "Nie powiodło się uwierzytelnienie: certyfikat przesłany przez "
 "przeglądarkę jest nieznany"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Strona domowa organizacji"
-
 msgid "{logout:logging_out_from}"
 msgstr "Wylogowanie z następujących serwisów:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Zostałeś pomyślnie wylogowany z %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Dostawca Serwisu (Lokalny)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Raport o błędzie został wysłany do administratorów."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Data urodzenia (Date of birth)"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Wystąpił bład podczas próby wylogowania."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Trwały anonimowy identyfikator"
-
 msgid "{logout:success}"
 msgstr "Zostałeś pomyślnie wylogowany ze wszystkich powyższych serwisów."
 
@@ -391,12 +328,6 @@ msgstr "Uwagi"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Uwierzytelnienie zostało przerwane przez użytkownika"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Główna przynależność (Primary affiliation)"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Kod pocztowy"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Błąd podczas komunikacji z serwerem CAS"
 
@@ -409,9 +340,6 @@ msgstr "SAML 2.0 SP - Metadane"
 msgid "{admin:metaconv_converted}"
 msgstr "Skonwertowane metadane"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nazwa (Common name)"
-
 msgid "{logout:completed}"
 msgstr "Zakończono"
 
@@ -420,18 +348,9 @@ msgstr ""
 "Hasło w konfiguracji (auth.adminpassword) ma domyślną wartość. Proszę "
 "poprawić konfigurację."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Jednostka organizacyjna (Organizational unit)"
-
 msgid "{general:service_provider}"
 msgstr "Dostawca serwisu"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefon domowy (Home telephone)"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Składnik nazwy domenowej (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Wystąpił następujący błąd w zleceniu: %REASON%"
 
@@ -450,23 +369,14 @@ msgstr "Wprowadź nazwę uzytkownika i hasło"
 msgid "{errors:report_explain}"
 msgstr "Opisz, co zrobiłeś kiedy wystąpił błąd..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Menadżer (Manager)"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nie dostarczo odpowiedzi SAML"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Ksywka (Nickname)"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Została wywołana usługa SingleLogoutService, ale nie dostarczono "
 "komunikatu SAML LogoutRequest lub LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Ulica (Street)"
-
 msgid "{login:organization}"
 msgstr "Organizacja"
 
@@ -499,9 +409,6 @@ msgstr "Wybierz domową organizację"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Zbędne opcje w pliku konfiguracyjnym"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Labeled URI"
-
 msgid "{errors:report_email}"
 msgstr "Adres e-mail"
 
@@ -516,9 +423,6 @@ msgstr ""
 "Inicjator zlecenia nie dostarczył parametru RelayState, wskazującego, "
 "gdzie przekazać zlecenie."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Formalna nazwa użytkownika"
-
 msgid "{status:header_diagnostics}"
 msgstr "Diagnostyka SimpleSAMLphp"
 
@@ -528,9 +432,6 @@ msgstr ""
 "Twoja sesja jest nadal aktywna, jak długo pozostało czasu do zakończenia "
 "sesji i wszystkie atrybuty, które zostały załączone do sesji."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Nazwa organizacji macierzystej"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Nie znaleziono strony"
 
@@ -549,30 +450,18 @@ msgstr "Kliknij na nagłówek końcówki aby wyświetlić szczegóły SAML."
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Nieprawidłowy certyfikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) macierzystej jednostki organizacyjnej osoby"
-
 msgid "{general:remember}"
 msgstr "Pamiętaj moją zgodę"
 
 msgid "{disco:selectidp}"
 msgstr "wybierz swojego Dostawcę Tożsamości."
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Skrzynka pocztowa (Post office box)"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Główna nazwa użytkownika w instytucji macierzystej"
-
 msgid "{login:help_desk_email}"
 msgstr "wyślij e-mail do helpdesku"
 
 msgid "{login:help_desk_link}"
 msgstr "Strona domowa pomocy technicznej (Helpdesk)"
 
-msgid "{attributes:attribute_uid}"
-msgstr "ID użytkownika (User ID)"
-
 msgid "{errors:title_CASERROR}"
 msgstr "Błąd CAS"
 
@@ -593,9 +482,6 @@ msgstr "Zapamiętaj mój wybór"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Dostawca Serwisu (Lokalny)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Locality"
-
 msgid "{disco:login_at}"
 msgstr "Zaloguj w"
 
@@ -632,9 +518,6 @@ msgstr "Wiadomość"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Nieznany certyfikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Numer Faksu (Fax number)"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Bład LDAP'a"
 
@@ -647,15 +530,9 @@ msgstr ""
 "konfigurację SimpleSAMLphp. Skontaktuj się z administratorem tego serwisu"
 " i wyślij mu powyższy błąd."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Telefon komórkowy (Mobile)"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Dostawca Tożsamości (Lokalny)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Preferowany język (Preferred language)"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Nie przedstawiłeś prawidłowego certyfikaty"
 
@@ -665,15 +542,6 @@ msgstr "Nastepujące pola opcjonalne nie zostały znalezione"
 msgid "{logout:logout_only}"
 msgstr "Nie, tylko %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Nazwa organizacji (Organization name)"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Nazwa osoby w jednostce organizacyjnej"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Local identity number"
-
 msgid "{login:next}"
 msgstr "Następny"
 
@@ -695,9 +563,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Brak certyfikatu"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Zakodowane hasło użytkownika"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Utracono informację o wylogowaniu"
 
@@ -712,29 +577,17 @@ msgstr ""
 "Tutaj sa metadane, które SimpleSAMLphp wygenerował dla Ciebie. Możesz je "
 "wysłać zaufanym partnerom w celu stworzenia zaufanej federacji."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Poufne atrybuty"
-
-msgid "{status:header_wsfed}"
-msgstr "Przykładowe Demo WS-Fed SP"
-
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
 "Nie powiodło się uwierzytelnienie: certyfikat przesłany przez "
 "przeglądarkę jest niepoprawny lub nie może zostać przeczytany"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Zarejestrowana nazwa organizacji"
-
 msgid "{status:header_shib}"
 msgstr "Demo Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Przetwórz"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Numer organizacji"
-
 msgid "Person's principal name at home organization"
 msgstr "Główna nazwa użytkownika w instytucji macierzystej"
 
@@ -1058,8 +911,8 @@ msgstr ""
 " i wyślij mu powyższy błąd."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Twoja sesja jest jeszcze ważna przez %SECONDS% sekund"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Twoja sesja jest jeszcze ważna przez %remaining% sekund"
 
 msgid "Domain component (DC)"
 msgstr "Składnik nazwy domenowej (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..172249039a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt-br\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nome Comum (CN)"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nome Comum (CN)"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nome Comum (CN)"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Componente do Domínio (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Componente do Domínio (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Componente do Domínio (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nome a ser mostrado"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Site da organização"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Site da organização"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Site da organização"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nome legal da Organização"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nome legal da Organização"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nome legal da Organização"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Filiação"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Filiação"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Filiação"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Titularidade sobre o serviço"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Titularidade sobre o serviço"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Titularidade sobre o serviço"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Apelido"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Apelido"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Apelido"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Nome distinto (DN) da sua organização principal"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Nome distinto (DN) da sua organização principal"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Nome distinto (DN) da sua organização principal"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Nome distinto (DN) da sua unidade organizacional principal"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Nome distinto (DN) da sua unidade organizacional principal"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Nome distinto (DN) da sua unidade organizacional principal"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Filiação Primária"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Filiação Primária"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Filiação Primária"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Diretor da organização principal"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Diretor da organização principal"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Diretor da organização principal"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Filiação na organização principal"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Filiação na organização principal"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Filiação na organização principal"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Apelido persistente ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Apelido persistente ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Apelido persistente ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Número do Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Número do Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Número do Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Nome"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Nome"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Nome"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefone fixo"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefone fixo"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefone fixo"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Endereço residencial"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Endereço residencial"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Endereço residencial"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Localidade"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Localidade"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Localidade"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI rotulado"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI rotulado"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI rotulado"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Administrador"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Administrador"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Administrador"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Celular"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Celular"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Celular"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Número Organizacional"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Número Organizacional"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Número Organizacional"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Data de Nascimento"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Data de Nascimento"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Data de Nascimento"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Número de Identificação Local"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Número de Identificação Local"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Número de Identificação Local"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Número de identificação atribuído pelas autoridades públicas"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Número de identificação atribuído pelas autoridades públicas"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Número de identificação atribuído pelas autoridades públicas"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nome da Organização (O)"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nome da Organização (O)"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nome da Organização (O)"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Unidade Organizacional (OU)"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Unidade Organizacional (OU)"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Unidade Organizacional (OU)"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Caixa Postal"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Caixa Postal"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Caixa Postal"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Endereço"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Endereço"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Endereço"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "CEP"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "CEP"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "CEP"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Linguagem preferida"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Linguagem preferida"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Linguagem preferida"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Nome de domínio da organização principal"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Nome de domínio da organização principal"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Nome de domínio da organização principal"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Nome de domínio da organização principal"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:schac:attribute-def:schacUserPrivateAttribute"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Sobrenome"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Sobrenome"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Sobrenome"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Rua"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Rua"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Rua"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Número de Telefone"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Número de Telefone"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Número de Telefone"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Título"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Título"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Título"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identificação (UID)"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identificação (UID)"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identificação (UID)"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Hash da Senha do Usuário"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Hash da Senha do Usuário"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Hash da Senha do Usuário"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nome Comum (CN)"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nome a ser mostrado"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nome a ser mostrado"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Diretor da organização principal"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Diretor da organização principal"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Diretor da organização principal"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Diretor da organização principal"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Diretor da organização principal"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Apelido persistente ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Apelido persistente ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Apelido persistente ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Apelido persistente ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Número do Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Nome"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Nome"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Nome"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Nome"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Nome"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefone fixo"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Localidade"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI rotulado"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI rotulado"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Celular"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nome da Organização (O)"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "CEP"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "CEP"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Linguagem preferida"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Linguagem preferida"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Linguagem preferida"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Linguagem preferida"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Linguagem preferida"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Sobrenome"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Sobrenome"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Sobrenome"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Sobrenome"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Sobrenome"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Número de Telefone"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Número de Telefone"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Título"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Título"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identificação (UID)"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identificação (UID)"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identificação (UID)"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identificação (UID)"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identificação (UID)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/messages.po
index f511dd7bdc..351ea05251 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/pt-br/LC_MESSAGES/messages.po
@@ -53,12 +53,6 @@ msgstr "Erro ao carregar a metadata."
 msgid "{admin:metaconv_title}"
 msgstr "Parser Metadata"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Titularidade sobre o serviço"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Foto JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Não foram encontrados erros."
 
@@ -138,9 +132,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Voltar a instalação do SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Identity Provider (Remoto)"
-
 msgid "{errors:error_header}"
 msgstr "Erro do SimpleSAMLphp"
 
@@ -159,18 +150,12 @@ msgstr ""
 "deste seriço, você deve certificar-se que a sua configuração de metadata "
 "está definida corretamente."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Nome distinto (DN) da sua organização principal"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "A solicitação recebida é inválida"
 
 msgid "{status:sessionsize}"
 msgstr "Tamanho da sessão: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Endereço"
-
 msgid "{logout:title}"
 msgstr "Desconectado"
 
@@ -192,32 +177,17 @@ msgstr "Aguardando"
 msgid "{admin:cfg_check_header}"
 msgstr "Verificar configuração"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Filiação na organização principal"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Sobrenome"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Enviar mensagem"
 
 msgid "{status:logout}"
 msgstr "Desconectar"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Nome da Organização"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Número de Telefone"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Os parâmetros enviados para o serviço de descoberta não estão de acordo "
 "com as especificações."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Um erro ocorreu ao tentar criar o pedido do SAML."
 
@@ -227,9 +197,6 @@ msgstr "Campos opcionais"
 msgid "{logout:return}"
 msgstr "Retornar ao serviço"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nome a ser mostrado"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Você pode obter as metadatas xml <a href=\"%METAURL%\"> em uma URL "
@@ -243,9 +210,6 @@ msgstr ""
 "Você pode desligar o modo de debug no arquivo de configuração global do "
 "SimpleSAMLphp <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Endereço residencial"
-
 msgid "{disco:select}"
 msgstr "Selecione"
 
@@ -275,9 +239,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Você quer sair de todos os serviços acima?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Título"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Acesso negado."
 
@@ -292,9 +253,6 @@ msgstr "Sem RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Informações de estado perdidas, e não é possível reiniciar a requisição"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Número de identificação atribuído pelas autoridades públicas"
-
 msgid "{login:password}"
 msgstr "Senha"
 
@@ -321,24 +279,15 @@ msgstr "Erro ao processar a resposta da desconexão"
 msgid "{admin:metaover_errorentry}"
 msgstr "Erro na entrada desta metadata"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Filiação"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadado não encontrado"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Nome"
-
 msgid "{login:contact_info}"
 msgstr "Informações de Contato"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Exceção não tratada"
 
-msgid "{status:validfor}"
-msgstr "Sua sessão é válida por %SECONDS% segundos a partir de agora."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Exemplo"
 
@@ -374,30 +323,18 @@ msgstr ""
 "Falha na Autenticação: O certificado que seu navegador (browser) enviou é"
 " desconhecido"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Site da organização"
-
 msgid "{logout:logging_out_from}"
 msgstr "Saindo dos seguintes serviços:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Você está saiu com sucesso de %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Local)"
-
 msgid "{errors:errorreport_text}"
 msgstr "O relatório de erro foi enviado com sucesso para os administradores."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Data de Nascimento"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Um erro ocorreu ao tentar processar a resposta da desconexão."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Apelido persistente ID"
-
 msgid "{logout:success}"
 msgstr "Você saiu com sucesso de todos os serviços listados acima."
 
@@ -407,12 +344,6 @@ msgstr "Avisos"
 msgid "{errors:descr_USERABORTED}"
 msgstr "A autenticação foi abortada pelo usuário"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Filiação Primária"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "CEP"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Erro ao comunicar-se com o servidor CAS"
 
@@ -425,9 +356,6 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Metadata convetida"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nome Comum (CN)"
-
 msgid "{logout:completed}"
 msgstr "Completado"
 
@@ -436,18 +364,9 @@ msgstr ""
 "A senha na configuração (auth.adminpassword) não foi alterada. Edite o "
 "arquivo de configuração."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Unidade Organizacional (OU)"
-
 msgid "{general:service_provider}"
 msgstr "Provedor de Serviços"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefone fixo"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Componente do Domínio (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Há um erro no pedido para esta página. O motivo foi: %REASON%"
 
@@ -466,23 +385,14 @@ msgstr "Digite seu usuário e senha"
 msgid "{errors:report_explain}"
 msgstr "Explique o que você estava fazendo quando aconteceu o erro..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Administrador"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Não fornecida a resposta SAML"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Apelido"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Você acessou a interface do SingleLogoutService, mas não forneceu a SAML "
 "LogoutRequest ou LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Rua"
-
 msgid "{login:organization}"
 msgstr "Organização"
 
@@ -522,9 +432,6 @@ msgstr "Escolher uma organização principal"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Opções supérfluas no arquivo de configuração"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI rotulado"
-
 msgid "{errors:report_email}"
 msgstr "Endereço de e-mail:"
 
@@ -548,9 +455,6 @@ msgstr ""
 "sua sessão expirou, o tempo que dura até ele expirar e todos os atributos"
 " que estão anexados à sua sessão."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Nome de domínio da organização principal"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Página não encontrada"
 
@@ -569,30 +473,18 @@ msgstr "Para ver os detalhes da entidade SAML, clique "
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certificado inválido"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Nome distinto (DN) da sua unidade organizacional principal"
-
 msgid "{general:remember}"
 msgstr "Lembrar Consentimento"
 
 msgid "{disco:selectidp}"
 msgstr "Selecione seu provedor de identidade"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Caixa Postal"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Diretor da organização principal"
-
 msgid "{login:help_desk_email}"
 msgstr "Envie um e-mail para a Central de Ajuda."
 
 msgid "{login:help_desk_link}"
 msgstr "Central de Ajuda"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Identificação (UID)"
-
 msgid "{login:remember_me}"
 msgstr "Lembre-me"
 
@@ -616,9 +508,6 @@ msgstr "Lembrar minha escolha"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Local)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Localidade"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Em formato de arquivo plano SimpleSAMLphp - use isso se você estiver "
@@ -660,9 +549,6 @@ msgstr "Mensagem"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Certificado Desconhecido"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Número do Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Erro no LDAP"
 
@@ -680,15 +566,9 @@ msgstr ""
 "SimpleSAMLphp. Contate o administrador deste serviço de login e envie-lhe"
 " a mensagem de erro acima."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Celular"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Local)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Linguagem preferida"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Você não possui um certificado válido"
 
@@ -703,12 +583,6 @@ msgstr "Os seguintes campos opcionais não foram encontrados"
 msgid "{logout:logout_only}"
 msgstr "Não, apenas de %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Nome da Organização (O)"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Número de Identificação Local"
-
 msgid "{login:next}"
 msgstr "Próximo"
 
@@ -728,9 +602,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Sem Certificado"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Hash da Senha do Usuário"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informações de desconexão perdidas"
 
@@ -746,26 +617,17 @@ msgstr ""
 "enviar este documento metadata para parceiros confiáveis para a "
 "configuração de uma federação confiável."
 
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Exemplo"
-
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
 "Falha na Autenticação: O certificado que seu navegador (browser) enviou é"
 " inválido ou não pode ser lido"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nome legal da Organização"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth Demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Parse"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Número Organizacional"
-
 msgid "Person's principal name at home organization"
 msgstr "Diretor da organização principal"
 
@@ -1092,8 +954,8 @@ msgstr ""
 " a mensagem de erro acima."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Sua sessão é válida por %SECONDS% segundos a partir de agora."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Sua sessão é válida por %remaining% segundos a partir de agora."
 
 msgid "Domain component (DC)"
 msgstr "Componente do Domínio (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..b296bb6038
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nome completo"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nome completo"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nome completo"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Componente de domínio"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Componente de domínio"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Componente de domínio"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nome de apresentação"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Página web da organização de origem"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Página web da organização de origem"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Página web da organização de origem"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Nome legal da organização de origem"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Nome legal da organização de origem"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Nome legal da organização de origem"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Afiliação com a organização de origem"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Afiliação com a organização de origem"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Afiliação com a organização de origem"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Direitos oferecidos pela organização de origem"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Direitos oferecidos pela organização de origem"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Direitos oferecidos pela organização de origem"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Alcunha"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Alcunha"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Alcunha"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "DN da organização de origem"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "DN da organização de origem"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "DN da organização de origem"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "DN da unidade orgânica na organização de origem"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "DN da unidade orgânica na organização de origem"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "DN da unidade orgânica na organização de origem"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Afiliação principal com a organização de origem"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Afiliação principal com a organização de origem"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Afiliação principal com a organização de origem"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "DN da unidade orgânica"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "DN da unidade orgânica"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "DN da unidade orgânica"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Afiliação com a organização de origem (com contexto)"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Afiliação com a organização de origem (com contexto)"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Afiliação com a organização de origem (com contexto)"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Número de Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Número de Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Número de Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Nome Próprio"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Nome Próprio"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Nome Próprio"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefone de residência"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefone de residência"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefone de residência"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Morada de redidência"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Morada de redidência"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Morada de redidência"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Foto JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Foto JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Localidade"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Localidade"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Localidade"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Página web"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Página web"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Página web"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Responsável hierárquico"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Responsável hierárquico"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Responsável hierárquico"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Telemóvel"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Telemóvel"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Telemóvel"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Número de Organização"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Número de Organização"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Número de Organização"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Data de nascimento"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Data de nascimento"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Data de nascimento"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Número de Identificação local"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Número de Identificação local"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Número de Identificação local"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Número de Identificação atribuído por autoridades públicas"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Número de Identificação atribuído por autoridades públicas"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Número de Identificação atribuído por autoridades públicas"
+
+# English string: Organization name
+msgid "o"
+msgstr "Nome da organização"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Nome da organização"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Nome da organização"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Unidade organizacional"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Unidade organizacional"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Unidade organizacional"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Apartado"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Apartado"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Apartado"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Morada"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Morada"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Morada"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Código Postal"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Código Postal"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Código Postal"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Idioma"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Idioma"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Idioma"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Nome de domínio da Organização de origem"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Nome de domínio da Organização de origem"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Nome de domínio da Organização de origem"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Nome de domínio da Organização de origem"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Elementos privados de informação"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Elementos privados de informação"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Elementos privados de informação"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Elementos privados de informação"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Nome de família"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Nome de família"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Nome de família"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Rua"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Rua"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Rua"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefone"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefone"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefone"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Título"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Título"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Título"
+
+# English string: User ID
+msgid "uid"
+msgstr "Identificação de utilizador"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Identificação de utilizador"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Identificação de utilizador"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Senha do utilizador"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Senha do utilizador"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Senha do utilizador"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nome completo"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nome de apresentação"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nome de apresentação"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Nome de utilizador na organização de origem"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Identificação persistente tipo pseudónimo"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Número de Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Nome Próprio"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Nome Próprio"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Nome Próprio"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Nome Próprio"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Nome Próprio"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefone de residência"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Localidade"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Página web"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Página web"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Telemóvel"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Nome da organização"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Código Postal"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Código Postal"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Idioma"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Idioma"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Idioma"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Idioma"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Idioma"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Nome de família"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Nome de família"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Nome de família"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Nome de família"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Nome de família"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefone"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefone"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Título"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Título"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Identificação de utilizador"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Identificação de utilizador"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Identificação de utilizador"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Identificação de utilizador"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Identificação de utilizador"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/messages.po
index c14ea158ca..48cdd4f953 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/pt/LC_MESSAGES/messages.po
@@ -42,12 +42,6 @@ msgstr "Erro na leitura dos metadados"
 msgid "{admin:metaconv_title}"
 msgstr "Conversor de Metadados"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Direitos oferecidos pela organização de origem"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Foto JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Não foram encontrados erros."
 
@@ -122,9 +116,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Voltar à página de instalação do SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Fornecedor de identidade (IdP) WS-Federation (Remoto)"
-
 msgid "{errors:error_header}"
 msgstr "Erro no SimpleSAMLphp"
 
@@ -140,18 +131,12 @@ msgstr ""
 "administrador deste serviço, verifique que a configuração dos metadados "
 "está correcta."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "DN da organização de origem"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Pedido inválido recebido"
 
 msgid "{status:sessionsize}"
 msgstr "Tamanho da sessão: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Morada"
-
 msgid "{logout:title}"
 msgstr "Saída efectuada com sucesso"
 
@@ -170,32 +155,17 @@ msgstr "Em espera"
 msgid "{admin:cfg_check_header}"
 msgstr "Verificação da configuração"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Afiliação com a organização de origem (com contexto)"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Nome de família"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Enviar mensagem"
 
 msgid "{status:logout}"
 msgstr "Sair"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Nome da Organização"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefone"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "O pedido efectuado ao serviço de descoberta de IdP não está de acordo com"
 " as especificações."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Ocorreu um erro ao tentar criar o pedido SAML"
 
@@ -205,9 +175,6 @@ msgstr "Campos opcionais"
 msgid "{logout:return}"
 msgstr "Regressar ao serviço"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nome de apresentação"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Pode <a href=\"%METAURL%\">obter os metadados em XML num URL dedicado</a>:"
 
@@ -219,9 +186,6 @@ msgstr ""
 "Pode desligar o modo debug no ficheiro global de configuração "
 "<tt>config/config.php</tt> do SimpleSAMLphp."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Morada de redidência"
-
 msgid "{disco:select}"
 msgstr "Escolher"
 
@@ -248,9 +212,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Deseja sair de todos os serviços listados em cima?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Título"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Acesso negado"
 
@@ -260,9 +221,6 @@ msgstr "A senha não foi enviada no seu pedido. Por favor tente de novo."
 msgid "{errors:title_NORELAYSTATE}"
 msgstr "RelayState não definido"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Número de Identificação atribuído por autoridades públicas"
-
 msgid "{login:password}"
 msgstr "Senha"
 
@@ -289,21 +247,12 @@ msgstr "Erro ao processar o pedido de logout"
 msgid "{admin:metaover_errorentry}"
 msgstr "Erro nesta entrada de metadados"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Afiliação com a organização de origem"
-
-msgid "{attributes:attribute_givenname}"
-msgstr "Nome Próprio"
-
 msgid "{login:contact_info}"
 msgstr "Contactos:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Excepção não tratada"
 
-msgid "{status:validfor}"
-msgstr "A sua sessão é válida por %SECONDS% segundos."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Exemplo de demonstração do SP SAML 2.0"
 
@@ -331,42 +280,24 @@ msgstr "Campos obrigatórios"
 msgid "{admin:cfg_check_select_file}"
 msgstr "Escolha o ficheiro de configuração a verificar:"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Página web da organização de origem"
-
 msgid "{logout:logging_out_from}"
 msgstr "A sair dos serviços seguintes:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Saiu com sucesso de %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Fornecedor de serviço (SP) WS-Federation (Local)"
-
 msgid "{errors:errorreport_text}"
 msgstr "O relatório de erro foi enviado aos administradores"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Data de nascimento"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Ocorreu um erro ao processar o pedido de logout."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Identificação persistente tipo pseudónimo"
-
 msgid "{logout:success}"
 msgstr "Saiu com sucesso de todos os serviços listados em cima."
 
 msgid "{admin:cfg_check_notices}"
 msgstr "Observações"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Afiliação principal com a organização de origem"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Código Postal"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Ocorreu um erro ao comunicar com o servidor CAS."
 
@@ -379,9 +310,6 @@ msgstr "Metadados SAML 2.0 SP"
 msgid "{admin:metaconv_converted}"
 msgstr "Resultado da conversão de Metadados"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nome completo"
-
 msgid "{logout:completed}"
 msgstr "Completa"
 
@@ -390,18 +318,9 @@ msgstr ""
 "A password presente na configuração (auth.adminpassword) tem o valor de "
 "omissão. Por favor altere esta password no ficheiro de configuração."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Unidade organizacional"
-
 msgid "{general:service_provider}"
 msgstr "Fornecedor de Serviço (SP)"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefone de residência"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Componente de domínio"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Ocorreu um erro com o pedido a esta página. A razão foi: %REASON%"
 
@@ -420,23 +339,14 @@ msgstr "Introduza o seu nome de utilizador e senha"
 msgid "{errors:report_explain}"
 msgstr "Introduza uma breve explicação do sucedido..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Responsável hierárquico"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Mensagem SAML não fornecida"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Alcunha"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Na interface SingleLogoutService deve fornecer uma mensagem SAML do tipo "
 "LogoutRequest ou LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Rua"
-
 msgid "{login:organization}"
 msgstr "Organização"
 
@@ -471,9 +381,6 @@ msgstr "Escolha a sua organização de origem"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Opções supérfluas do ficheiro de configuração"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Página web"
-
 msgid "{errors:report_email}"
 msgstr "Endereço de email:"
 
@@ -496,9 +403,6 @@ msgstr ""
 "Está na página de status do SimpleSAMLphp. Aqui poderá consultar "
 "informações sobre a sua sessão: o tempo de expiração e os seus atributos."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Nome de domínio da Organização de origem"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Página não encontrada"
 
@@ -517,30 +421,18 @@ msgstr "Para obter detalhes sobre uma entidade SAML, clique no título da entida
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certificado inválido"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "DN da unidade orgânica na organização de origem"
-
 msgid "{general:remember}"
 msgstr "Lembrar a minha escolha"
 
 msgid "{disco:selectidp}"
 msgstr "Escolha o seu fornecedor de identidade (IdP)"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Apartado"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Nome de utilizador na organização de origem"
-
 msgid "{login:help_desk_email}"
 msgstr "Enviar um e-mail para o serviço de apoio ao utilizador"
 
 msgid "{login:help_desk_link}"
 msgstr "Página do serviço de apoio ao utilizador"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Identificação de utilizador"
-
 msgid "{errors:title_CASERROR}"
 msgstr "Erro de CAS"
 
@@ -561,9 +453,6 @@ msgstr "Lembrar esta escolha"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Fornecedor de serviço (SP) SAML 2.0 (Local)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Localidade"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Metadados no formato ficheiro de configuração do SimpleSAMLphp. Use esta "
@@ -599,9 +488,6 @@ msgstr "Fornecedor de serviço (SP) Shib 1.3 (Local)"
 msgid "{admin:debug_sending_message_msg_title}"
 msgstr "Mensagem"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Número de Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Erro de LDAP"
 
@@ -619,15 +505,9 @@ msgstr ""
 "uma má configuração do SimpleSAMLphp. Contacte o administrador deste "
 "serviço de login, e comunique a mensagem de erro."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Telemóvel"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Fornecedor de identidade (IdP) Shib 1.3 (Local)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Idioma"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Não foi apresentado um certificado válido."
 
@@ -640,15 +520,6 @@ msgstr "Os seguintes campos opcionais não foram encontrados"
 msgid "{logout:logout_only}"
 msgstr "Não, apenas %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Nome da organização"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "DN da unidade orgânica"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Número de Identificação local"
-
 msgid "{login:next}"
 msgstr "Seguinte"
 
@@ -667,9 +538,6 @@ msgstr ""
 "A página não foi encontrada. A razão foi: %REASON% O URL fornecido foi: "
 "%URL%"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Senha do utilizador"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informação de logout perdida"
 
@@ -685,24 +553,12 @@ msgstr ""
 "enviar este documento de metadados aos seus parceiros para configurar uma"
 " federação."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Elementos privados de informação"
-
-msgid "{status:header_wsfed}"
-msgstr "Exemplo de demonstração do SP WS-Fed"
-
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Nome legal da organização de origem"
-
 msgid "{status:header_shib}"
 msgstr "Exemplo de demonstração do SP Shibboleth 1.3"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Converter"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Número de Organização"
-
 msgid "Person's principal name at home organization"
 msgstr "Nome de utilizador na organização de origem"
 
@@ -1005,8 +861,8 @@ msgstr ""
 "serviço de login, e comunique a mensagem de erro."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "A sua sessão é válida por %SECONDS% segundos."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "A sua sessão é válida por %remaining% segundos."
 
 msgid "Domain component (DC)"
 msgstr "Componente de domínio"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..95041a7f41
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Nume comun"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Nume comun"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Nume comun"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Componenta de domeniu (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Componenta de domeniu (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Componenta de domeniu (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Nume afișat"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Pagina web a institutuției"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Pagina web a institutuției"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Pagina web a institutuției"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Denumirea legală a instituției"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Denumirea legală a instituției"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Denumirea legală a instituției"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Afiliere"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Afiliere"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Afiliere"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Profilul de asigurare a identității"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Profilul de asigurare a identității"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Profilul de asigurare a identității"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Drepturi relativ la acest serviciu"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Drepturi relativ la acest serviciu"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Drepturi relativ la acest serviciu"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Poreclă"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Poreclă"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Poreclă"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Nume distincitv (DN) al instituție de origine a persoanei"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Nume distincitv (DN) al instituție de origine a persoanei"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Nume distincitv (DN) al instituție de origine a persoanei"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Nume distincitv (DN) al unității organizaționale de origine a persoanei"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Nume distincitv (DN) al unității organizaționale de origine a persoanei"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Nume distincitv (DN) al unității organizaționale de origine a persoanei"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Afiliere primară"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Afiliere primară"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Afiliere primară"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Nume distincitv (DN) al unității organizaționale primare a persoanei"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Nume distincitv (DN) al unității organizaționale primare a persoanei"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Nume distincitv (DN) al unității organizaționale primare a persoanei"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Afiliere în cadrul instituției de origine"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Afiliere în cadrul instituției de origine"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Afiliere în cadrul instituției de origine"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "ID pseudonim persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "ID pseudonim persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "ID pseudonim persistent"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Număr de fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Număr de fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Număr de fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Prenume"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Prenume"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Prenume"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Telefon acasă"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Telefon acasă"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Telefon acasă"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Adresa poștală de acasă"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Adresa poștală de acasă"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Adresa poștală de acasă"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Fotografie JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Fotografie JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Fotografie JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Localitate"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Localitate"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Localitate"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI etichetat"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI etichetat"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI etichetat"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Mail"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Director/Manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Director/Manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Director/Manager"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobil"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobil"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobil"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Număr organizațional"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Număr organizațional"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Număr organizațional"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Data nașterii"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Data nașterii"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Data nașterii"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Număr de identificare local"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Număr de identificare local"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Număr de identificare local"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Număr de identitate atribuit de autorități publice"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Număr de identitate atribuit de autorități publice"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Număr de identitate atribuit de autorități publice"
+
+# English string: Organization name
+msgid "o"
+msgstr "Denumirea instituției"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Denumirea instituției"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Denumirea instituției"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Unitate organizațională"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Unitate organizațională"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Unitate organizațională"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Cutie poștală"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Cutie poștală"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Cutie poștală"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Adresa poștală"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Adresa poștală"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Adresa poștală"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Cod poștal"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Cod poștal"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Cod poștal"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Limba preferată"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Limba preferată"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Limba preferată"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Njumele de domeniu pentru instituția de origine"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Njumele de domeniu pentru instituția de origine"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Njumele de domeniu pentru instituția de origine"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Njumele de domeniu pentru instituția de origine"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Informații private"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Informații private"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Informații private"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Informații private"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Nume de familie"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Nume de familie"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Nume de familie"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Strada"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Strada"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Strada"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Număr de telefon"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Număr de telefon"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Număr de telefon"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titlu/titulatură"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titlu/titulatură"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titlu/titulatură"
+
+# English string: User ID
+msgid "uid"
+msgstr "ID utilizator"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "ID utilizator"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "ID utilizator"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Parola utilizatorului în format <i>hash</i>"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Parola utilizatorului în format <i>hash</i>"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Parola utilizatorului în format <i>hash</i>"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Nume comun"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Nume afișat"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Nume afișat"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Numele de identificare a persoanei la instituția de origine (de forma nume_utilizator@domeniu.ro)"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "ID pseudonim persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "ID pseudonim persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "ID pseudonim persistent"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "ID pseudonim persistent"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Număr de fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Prenume"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Prenume"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Prenume"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Prenume"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Prenume"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Telefon acasă"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Localitate"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI etichetat"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI etichetat"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Mail"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobil"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Denumirea instituției"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Cod poștal"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Cod poștal"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Limba preferată"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Limba preferată"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Limba preferată"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Limba preferată"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Limba preferată"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Nume de familie"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Nume de familie"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Nume de familie"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Nume de familie"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Nume de familie"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Număr de telefon"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Număr de telefon"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titlu/titulatură"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titlu/titulatură"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "ID utilizator"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "ID utilizator"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "ID utilizator"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "ID utilizator"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "ID utilizator"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/messages.po
index c012e57d8c..864bffb1d6 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ro/LC_MESSAGES/messages.po
@@ -53,12 +53,6 @@ msgstr "Eroare la încărcarea metadatelor"
 msgid "{admin:metaconv_title}"
 msgstr "Analizor de metadate"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Drepturi relativ la acest serviciu"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Fotografie JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nu au fost depistate erori."
 
@@ -140,9 +134,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Mergeți înapoi la pagina de instalare a SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Furnizor de servicii federație WS (distant)"
-
 msgid "{errors:error_header}"
 msgstr "Eroare SimpleSAMLphp"
 
@@ -160,18 +151,12 @@ msgstr ""
 "Există o eroare în configurarea SimpleSAMLphp. Dacă sunteți "
 "administratorul acestui serviciu, verificați configurarea metadatelor."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Nume distincitv (DN) al instituție de origine a persoanei"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "S-a primit o cerere incorectă"
 
 msgid "{status:sessionsize}"
 msgstr "Dimensiunea sesiunii: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Adresa poștală"
-
 msgid "{logout:title}"
 msgstr "Ieșire din sistem (deautentificare)"
 
@@ -193,32 +178,17 @@ msgstr "În așteptare"
 msgid "{admin:cfg_check_header}"
 msgstr "Verificarea configurației"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Afiliere în cadrul instituției de origine"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Nume de familie"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Trimite mesajul"
 
 msgid "{status:logout}"
 msgstr "Deautentificare"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Denumirea instituției"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Număr de telefon"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Parametrii trimiși către serviciul de căutare nu sunt în conformitate cu "
 "specificațiile."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Mail"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "A apărut o eroare la crearea cererii SAML."
 
@@ -228,9 +198,6 @@ msgstr "Câmpuri opționale"
 msgid "{logout:return}"
 msgstr "Întoarcere la serviciu"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Nume afișat"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Puteți accesa <a href=\"%METAURL%\">metadatele xml de la un URL "
@@ -244,9 +211,6 @@ msgstr ""
 "Se poate opri modul de depanare în fișierul de configurare SimpleSAMLphp "
 "<tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Adresa poștală de acasă"
-
 msgid "{disco:select}"
 msgstr "Selectați"
 
@@ -273,9 +237,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Doriți să vă deautentificați de la toate serviciile de mai sus ?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titlu/titulatură"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Accesul este interzis"
 
@@ -290,9 +251,6 @@ msgstr "Nu există <i>RelayState</i>"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Informația de stare a fost pierdută, cererea nu poate fi reluată"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Număr de identitate atribuit de autorități publice"
-
 msgid "{login:password}"
 msgstr "Parola"
 
@@ -319,24 +277,15 @@ msgstr "Eroare la procesarea cererii de deautentificare"
 msgid "{admin:metaover_errorentry}"
 msgstr "Eroare în această metadată"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Afiliere"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadatele nu au fost găsite"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Prenume"
-
 msgid "{login:contact_info}"
 msgstr "Informații de contact:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Excepție netratată"
 
-msgid "{status:validfor}"
-msgstr "Sesiunea dumneavoastră mai este validă încă %SECONDS%."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Exemplu demonstrativ de furnizor de servicii SAML 2.0"
 
@@ -372,30 +321,18 @@ msgstr ""
 "Autentificare eșuată: certificatul trimis de browser-ul dumneavoastră nu "
 "este recunoscut"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Pagina web a institutuției"
-
 msgid "{logout:logging_out_from}"
 msgstr "Deautentificare din următoarele servicii:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Ați fost deautentificat din %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Furnizor de servicii federație WS (găzduit)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Raportul cu erori a fost trimis către administratori."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Data nașterii"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "A apărut o eroare la procesarea cererii de deautentificare."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "ID pseudonim persistent"
-
 msgid "{logout:success}"
 msgstr "Ați fost deautentificat de la toate serviciile enumerate mai sus."
 
@@ -405,12 +342,6 @@ msgstr "Note/Observații"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Autentificarea a fost întreruptă de utilizator"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Afiliere primară"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Cod poștal"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Eroare de comunicare cu serverul CAS."
 
@@ -423,9 +354,6 @@ msgstr "Metadate furnizor de servicii (SP) SAML 2.0"
 msgid "{admin:metaconv_converted}"
 msgstr "Metadate convertite"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Nume comun"
-
 msgid "{logout:completed}"
 msgstr "Terminat"
 
@@ -434,18 +362,9 @@ msgstr ""
 "Parola din configurare (<i>auth.adminpassword</i>) este cea implicită, vă"
 " rugăm să o modificați."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Unitate organizațională"
-
 msgid "{general:service_provider}"
 msgstr "Furnizor de servicii"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Telefon acasă"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Componenta de domeniu (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Există o eroare în cererea către această pagină. Motivul este: %REASON%"
 
@@ -464,23 +383,14 @@ msgstr "Vă rugăm să completați numele de utilizator și parola"
 msgid "{errors:report_explain}"
 msgstr "Descrieți ce operațiuini executați când a apărut această eroare  ..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Director/Manager"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nu a fost furnizat răspunsul SAML"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Poreclă"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Ați accesat interfața <i>SingleLogoutService</i>, dar nu ați furnizat o "
 "cerere de deautentificare sau un răspuns de deautentificare SAML."
 
-msgid "{attributes:attribute_street}"
-msgstr "Strada"
-
 msgid "{login:organization}"
 msgstr "Instituție"
 
@@ -520,9 +430,6 @@ msgstr "Alegeți instituția de origine"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Opțiuni inutile în fișierul de configurare"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI etichetat"
-
 msgid "{errors:report_email}"
 msgstr "Adresa e-mail:"
 
@@ -537,9 +444,6 @@ msgstr ""
 "Inițiatorul acestei cereri nu a furnizat parametrul <i>RelayState</i> "
 "care indică următorul pas."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Nume legal"
-
 msgid "{status:header_diagnostics}"
 msgstr "Diagnostic SimpleSAMLphp"
 
@@ -550,9 +454,6 @@ msgstr ""
 "expirarea sesiunii precum și toate atributele atașate sesiunii "
 "dumneavoastră."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Njumele de domeniu pentru instituția de origine"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Pagina nu a fost găsită"
 
@@ -573,32 +474,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Certificat nevalid"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Nume distincitv (DN) al unității organizaționale de origine a persoanei"
-
 msgid "{general:remember}"
 msgstr "Ține minte"
 
 msgid "{disco:selectidp}"
 msgstr "Alegeți furnizorul de identitate"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Cutie poștală"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr ""
-"Numele de identificare a persoanei la instituția de origine (de forma "
-"nume_utilizator@domeniu.ro)"
-
 msgid "{login:help_desk_email}"
 msgstr "Trimiteți un mesaj la echipa de suport tehnic"
 
 msgid "{login:help_desk_link}"
 msgstr "Pagina echipei de suport tehnic"
 
-msgid "{attributes:attribute_uid}"
-msgstr "ID utilizator"
-
 msgid "{errors:title_CASERROR}"
 msgstr "Eroare CAS"
 
@@ -619,12 +506,6 @@ msgstr "Memorează alegerea făcută"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Furnizor de servicii SAML 2.0 (găzduit)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Localitate"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Profilul de asigurare a identității"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "În format fișier simplu SimpleSAMLphp - utilizați această variantă dacă "
@@ -669,9 +550,6 @@ msgstr "Mesaj"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Certificat necunoscut"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Număr de fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Eroare LDAP"
 
@@ -691,15 +569,9 @@ msgstr ""
 "administratorul acestui serviciu și să-i furnizați mesajul de eroare de "
 "mai sus."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobil"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Furnizor de identitate Shib 1.3 (găzduit)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Limba preferată"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Nu ați oferit un certificat valid."
 
@@ -714,15 +586,6 @@ msgstr "Următoarele câmpuri opționale nu au fost găsite"
 msgid "{logout:logout_only}"
 msgstr "Nu, doar %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Denumirea instituției"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Nume distincitv (DN) al unității organizaționale primare a persoanei"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Număr de identificare local"
-
 msgid "{login:next}"
 msgstr "Următorul pas"
 
@@ -744,9 +607,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Lipsește certificatul"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Parola utilizatorului în format <i>hash</i>"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informația de deautentificare a fost pierdută"
 
@@ -762,12 +622,6 @@ msgstr ""
 "trimise către parteneri de încredere pentru a configura o federație de "
 "încredere."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Informații private"
-
-msgid "{status:header_wsfed}"
-msgstr "Exemplu demonstrativ de WS-Fed"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certificate"
 
@@ -776,18 +630,12 @@ msgstr ""
 "Autentificare eșuată: certificatul trimis de browser-ul dumneavoastră nu "
 "este valid sau nu poate fi citit"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Denumirea legală a instituției"
-
 msgid "{status:header_shib}"
 msgstr "Demo Shibboleth"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analizează"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Număr organizațional"
-
 msgid "Person's principal name at home organization"
 msgstr ""
 "Numele de identificare a persoanei la instituția de origine (de forma "
@@ -1132,8 +980,8 @@ msgstr ""
 "mai sus."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Sesiunea dumneavoastră mai este validă încă %SECONDS%."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Sesiunea dumneavoastră mai este validă încă %remaining%."
 
 msgid "Domain component (DC)"
 msgstr "Componenta de domeniu (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..08dae63d5f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Полное имя"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Полное имя"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Полное имя"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Компонент домена (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Компонент домена (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Компонент домена (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Отображаемое имя"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Домашняя страница организации"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Домашняя страница организации"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Домашняя страница организации"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Юридическое название организации"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Юридическое название организации"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Юридическое название организации"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Членство"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Членство"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Членство"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Идентификатор гарантированного профайла"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Идентификатор гарантированного профайла"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Идентификатор гарантированного профайла"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Право на предоставление услуг"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Право на предоставление услуг"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Право на предоставление услуг"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Псевдоним"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Псевдоним"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Псевдоним"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Отличительное имя (DN) человека домашней организации"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Отличительное имя (DN) человека домашней организации"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Отличительное имя (DN) человека домашней организации"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Отличительное имя (DN) человека подразделения домашней организации"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Отличительное имя (DN) человека подразделения домашней организации"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Отличительное имя (DN) человека подразделения домашней организации"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Главное членство"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Главное членство"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Главное членство"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Отличительное имя (DN) человека основного подразделения организации"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Отличительное имя (DN) человека основного подразделения организации"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Отличительное имя (DN) человека основного подразделения организации"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Членство в главной организации"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Членство в главной организации"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Членство в главной организации"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "ID постоянного псевдонима"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "ID постоянного псевдонима"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "ID постоянного псевдонима"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Номер факса"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Номер факса"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Номер факса"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Имя"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Имя"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Имя"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Домашний телефон"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Домашний телефон"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Домашний телефон"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Домашний почтовый адрес"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Домашний почтовый адрес"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Домашний почтовый адрес"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Фотография в формате JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Фотография в формате JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Фотография в формате JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Район"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Район"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Район"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Маркированный URI (LabeledURI)"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Маркированный URI (LabeledURI)"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Маркированный URI (LabeledURI)"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Почта"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Почта"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Почта"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Управляющий"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Управляющий"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Управляющий"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Мобильный"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Мобильный"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Мобильный"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Номер организации"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Номер организации"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Номер организации"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Дата рождения"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Дата рождения"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Дата рождения"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Местный идентификационный номер"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Местный идентификационный номер"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Местный идентификационный номер"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Идентификационный номер, присваиваемый органами государственной власти"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Идентификационный номер, присваиваемый органами государственной власти"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Идентификационный номер, присваиваемый органами государственной власти"
+
+# English string: Organization name
+msgid "o"
+msgstr "Название организации"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Название организации"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Название организации"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Подразделение организации"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Подразделение организации"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Подразделение организации"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Абонементный почтовый ящик"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Абонементный почтовый ящик"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Абонементный почтовый ящик"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Почтовый адрес"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Почтовый адрес"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Почтовый адрес"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Почтовый индекс"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Почтовый индекс"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Почтовый индекс"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Предпочитаемый язык"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Предпочитаемый язык"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Предпочитаемый язык"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Доменное имя главной организации"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Доменное имя главной организации"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Доменное имя главной организации"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Доменное имя главной организации"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Элементы личной информации"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Элементы личной информации"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Элементы личной информации"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Элементы личной информации"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Фамилия"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Фамилия"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Фамилия"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Улица"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Улица"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Улица"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Номер телефона"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Номер телефона"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Номер телефона"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Заглавие"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Заглавие"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Заглавие"
+
+# English string: User ID
+msgid "uid"
+msgstr "ID пользователя"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "ID пользователя"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "ID пользователя"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Хэш пароля пользователя"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Хэш пароля пользователя"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Хэш пароля пользователя"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Полное имя"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Отображаемое имя"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Отображаемое имя"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Имя руководителя в главной организации"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "ID постоянного псевдонима"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "ID постоянного псевдонима"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "ID постоянного псевдонима"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "ID постоянного псевдонима"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Номер факса"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Имя"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Имя"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Имя"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Имя"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Имя"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Домашний телефон"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Район"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Маркированный URI (LabeledURI)"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Маркированный URI (LabeledURI)"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Почта"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Почта"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Почта"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Почта"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Почта"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Мобильный"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Название организации"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Почтовый индекс"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Почтовый индекс"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Предпочитаемый язык"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Предпочитаемый язык"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Предпочитаемый язык"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Предпочитаемый язык"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Предпочитаемый язык"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Фамилия"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Фамилия"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Фамилия"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Фамилия"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Фамилия"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Номер телефона"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Номер телефона"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Заглавие"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Заглавие"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "ID пользователя"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "ID пользователя"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "ID пользователя"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "ID пользователя"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "ID пользователя"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/messages.po
index 4148ad38fb..f71ee414fb 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ru/LC_MESSAGES/messages.po
@@ -51,12 +51,6 @@ msgstr "Ошибка загрузки метаданных"
 msgid "{admin:metaconv_title}"
 msgstr "Средство синтаксического анализа метаданных"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Право на предоставление услуг"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Фотография в формате JPEG"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Ошибок не обнаружено."
 
@@ -137,9 +131,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Вернуться на страницу установки SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "Провайдер идентификации WS-Federation (удаленное размещение)"
-
 msgid "{errors:error_header}"
 msgstr "Ошибка SimpleSAMLphp"
 
@@ -157,18 +148,12 @@ msgstr ""
 "Ваш SimpleSAMLphp содержит неправильные конфигурационные данные. Если вы "
 "являетесь администратором системы, проверьте конфигурацию метаданных."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Отличительное имя (DN) человека домашней организации"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Получен неправильный отклик"
 
 msgid "{status:sessionsize}"
 msgstr "Размер сессии: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Почтовый адрес"
-
 msgid "{logout:title}"
 msgstr "Успешный выход"
 
@@ -196,32 +181,17 @@ msgstr "В состоянии ожидания"
 msgid "{admin:cfg_check_header}"
 msgstr "Проверка конфигурации"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Членство в главной организации"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Фамилия"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Отправить сообщение"
 
 msgid "{status:logout}"
 msgstr "Выйти"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Название организации"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Номер телефона"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Параметры, отправленные в службу обнаружения, не соответствуют "
 "спецификации."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Почта"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Произошла ошибка при попытке создать SAML запрос."
 
@@ -231,9 +201,6 @@ msgstr "Необязательные поля"
 msgid "{logout:return}"
 msgstr "Вернуться к службе"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Отображаемое имя"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Вы можете<a href=\"%METAURL%\"> получить xml файл с метаданными по "
@@ -247,9 +214,6 @@ msgstr ""
 "Вы можете отключить режим отладки в файле конфигурации global "
 "SimpleSAMLphp -<tt>config/config.php</tt>. "
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Домашний почтовый адрес"
-
 msgid "{disco:select}"
 msgstr "Выбрать"
 
@@ -279,9 +243,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Вы хотите выйти из всех служб, перечисленных выше?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Заглавие"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Отказ в доступе"
 
@@ -296,9 +257,6 @@ msgstr "Отсутствует параметр RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Информация о состоянии утеряна, нет способа инициировать запрос заново"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Идентификационный номер, присваиваемый органами государственной власти"
-
 msgid "{login:password}"
 msgstr "Пароль"
 
@@ -323,24 +281,15 @@ msgstr "Ошибка при обработке запроса на выход и
 msgid "{admin:metaover_errorentry}"
 msgstr "Ошибка при вводе данной записи метаданных"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Членство"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Метаданные не найдены"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Имя"
-
 msgid "{login:contact_info}"
 msgstr "Контактная информация"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Необрабатываемое исключение"
 
-msgid "{status:validfor}"
-msgstr "Ваша сессия действительна в течение следующих %SECONDS% секунд."
-
 msgid "{status:header_saml20_sp}"
 msgstr "Демо пример сервис провайдера SAML 2.0 SP"
 
@@ -377,33 +326,21 @@ msgstr "Выберите файл конфигурации для проверк
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Ошибка при аутентификации: ваш браузер выслал неизвестный сертификат"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Домашняя страница организации"
-
 msgid "{logout:logging_out_from}"
 msgstr "Выход из следующих служб:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Вы успешно вышли из службы %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "Сервис провайдер WS-Federation (локальное размещение)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Сообщение об ошибке было отправлено администраторам."
 
 msgid "{status:subject_header}"
 msgstr "Тема SAML"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Дата рождения"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Ошибка произошла при попытке обработки запроса на выход из системы"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "ID постоянного псевдонима"
-
 msgid "{logout:success}"
 msgstr "Вы успешно вышли из всех служб перечисленных выше."
 
@@ -413,12 +350,6 @@ msgstr "Уведомления"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Аутентификация прервана пользователем"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Главное членство"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Почтовый индекс"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Произошла ошибка при обмене данными с сервером CAS."
 
@@ -431,9 +362,6 @@ msgstr "Метаданные сервис провайдера SAML 2.0 SP"
 msgid "{admin:metaconv_converted}"
 msgstr "Преобразованные метаданные"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Полное имя"
-
 msgid "{logout:completed}"
 msgstr "Выполнено"
 
@@ -442,18 +370,9 @@ msgstr ""
 "Пароль в файле конфигурации (auth.adminpassword) не изменен от значения "
 "по умолчанию. Пожалуйста, отредактируйте файл конфигурации."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Подразделение организации"
-
 msgid "{general:service_provider}"
 msgstr "Поставщик услуг"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Домашний телефон"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Компонент домена (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Ошибка в запросе к этой странице. Причина: %REASON%"
 
@@ -472,23 +391,14 @@ msgstr "Введите имя пользователя и пароль"
 msgid "{errors:report_explain}"
 msgstr "Уточните ваши действия перед появлением ошибки... "
 
-msgid "{attributes:attribute_manager}"
-msgstr "Управляющий"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Отсутствует SAML отклик"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Псевдоним"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Вы получили доступ к интерфейсу SingleLogoutService, но не предоставили "
 "SAML LogoutRequest или LogoutResponse утверждения."
 
-msgid "{attributes:attribute_street}"
-msgstr "Улица"
-
 msgid "{login:organization}"
 msgstr "Организация"
 
@@ -528,9 +438,6 @@ msgstr "Выберите домашнюю организацию"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Избыточные параметры в файле конфигурации"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Маркированный URI (LabeledURI)"
-
 msgid "{errors:report_email}"
 msgstr "Адрес вашей электронной почты:"
 
@@ -545,9 +452,6 @@ msgstr ""
 "Инициатор данного запроса не предоставил параметр RelayState с указанием "
 "следующей точки перехода."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Официальное название"
-
 msgid "{status:header_diagnostics}"
 msgstr "Диагностика SimpleSAMLphp"
 
@@ -557,9 +461,6 @@ msgstr ""
 " сессии, продолжительность сессии до истечения срока действия и все "
 "атрибуты в данной сессии."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Доменное имя главной организации"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Страница не найдена"
 
@@ -578,33 +479,18 @@ msgstr "Для просмотра подробностей записи SAML, к
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Недействительный сертификат"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Отличительное имя (DN) человека подразделения домашней организации"
-
 msgid "{general:remember}"
 msgstr "Запомнить"
 
 msgid "{disco:selectidp}"
 msgstr "Выберите вашего identity provider"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Абонементный почтовый ящик"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Имя руководителя в главной организации"
-
 msgid "{login:help_desk_email}"
 msgstr "Послать email в службу поддержки"
 
 msgid "{login:help_desk_link}"
 msgstr "Домашняя страница службы поддержки"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Членство в группе"
-
-msgid "{attributes:attribute_uid}"
-msgstr "ID пользователя"
-
 msgid "{login:remember_me}"
 msgstr "Запомнить меня"
 
@@ -628,12 +514,6 @@ msgstr "Запомнить мой выбор"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "Сервис провайдер SAML 2.0 (локальное размещение)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Район"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Идентификатор гарантированного профайла"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr "Формат простого SimpleSAMLphp файла"
 
@@ -682,9 +562,6 @@ msgstr "Провайдер идентификации ADFS (локальное 
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Неизвестный сертификат"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Номер факса"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Ошибка LDAP"
 
@@ -702,18 +579,12 @@ msgstr ""
 "неправильной конфигурации SimpleSAMLphp. Свяжитесь с администратором "
 "этого сервиса и отправьте ему вышеуказанное сообщение об ошибке."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Мобильный"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "Метаданные провайдера идентификации ADFS"
 
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Провайдер идентификации Shib 1.3 (локальное размещение)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Предпочитаемый язык"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Вы не предоставили действительный сертификат."
 
@@ -728,15 +599,6 @@ msgstr "Следующие необязательные поля не найде
 msgid "{logout:logout_only}"
 msgstr "Нет, только для службы %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Название организации"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Отличительное имя (DN) человека основного подразделения организации"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Местный идентификационный номер"
-
 msgid "{login:next}"
 msgstr "Далее"
 
@@ -756,9 +618,6 @@ msgstr "Запрашиваемая страница не найдена. При
 msgid "{errors:title_NOCERT}"
 msgstr "Сертификат отсутствует"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Хэш пароля пользователя"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Потеряна информация о выходе."
 
@@ -774,12 +633,6 @@ msgstr ""
 "отправить данный документ с метаданными доверенным партнерам для создания"
 " федерации."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Элементы личной информации"
-
-msgid "{status:header_wsfed}"
-msgstr "Демо пример сервис провайдера WS-Fed SP"
-
 msgid "{admin:metadata_cert}"
 msgstr "Сертификаты"
 
@@ -788,18 +641,12 @@ msgstr ""
 "Ошибка при аутентификации: ваш браузер выслал недействительный или "
 "нечитаемый сертификат"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Юридическое название организации"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth демо"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Выполнить синтаксический анализ"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Номер организации"
-
 msgid "Person's principal name at home organization"
 msgstr "Имя руководителя в главной организации"
 
@@ -1141,8 +988,8 @@ msgstr ""
 "этого сервиса и отправьте ему вышеуказанное сообщение об ошибке."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Ваша сессия действительна в течение следующих %SECONDS% секунд."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Ваша сессия действительна в течение следующих %remaining% секунд."
 
 msgid "Domain component (DC)"
 msgstr "Компонент домена (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..869a18cdde
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: se\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 2) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Olles namma"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Olles namma"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Olles namma"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "dc"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "urn:mace:dir:attribute-def:dc"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "urn:oid:0.9.2342.19200300.100.1.25"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "displayName"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "urn:mace:dir:attribute-def:displayName"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "urn:oid:2.16.840.1.113730.3.1.241"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "urn:mace:dir:attribute-def:eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Du doaibma organisašuvnnas"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Du doaibma organisašuvnnas"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Du doaibma organisašuvnnas"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "URI mii čilge dihto vuoigatvuođa dihto ressurssaide"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "URI mii čilge dihto vuoigatvuođa dihto ressurssaide"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "URI mii čilge dihto vuoigatvuođa dihto ressurssaide"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "urn:mace:dir:attribute-def:eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Feide-namma"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Feide-namma"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Feide-namma"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Rolla diehto organisašuvnnas, dehe dihto domenas."
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Rolla diehto organisašuvnnas, dehe dihto domenas."
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Rolla diehto organisašuvnnas, dehe dihto domenas."
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "urn:mace:dir:attribute-def:eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "urn:oid:2.5.4.23"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Ovdanamma"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Ovdanamma"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Ovdanamma"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "homePhone"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "urn:mace:dir:attribute-def:homePhone"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "urn:oid:0.9.2342.19200300.100.1.20"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "urn:mace:dir:attribute-def:homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "urn:oid:0.9.2342.19200300.100.1.39"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "urn:mace:dir:attribute-def:jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "urn:oid:0.9.2342.19200300.100.1.60"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "l"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "urn:mace:dir:attribute-def:l"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "urn:oid:2.5.4.7"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "labeledURI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "urn:mace:dir:attribute-def:labeledURI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "urn:oid:1.3.6.1.4.1.250.1.57"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "urn:mace:dir:attribute-def:manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "urn:oid:0.9.2342.19200300.100.1.10"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mátketelefovdna"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mátketelefovdna"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mátketelefovdna"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "urn:mace:dir:attribute-def:norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Riegadannummir"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Riegadannummir"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Riegadannummir"
+
+# English string: Organization name
+msgid "o"
+msgstr "o"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "urn:mace:dir:attribute-def:o"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "urn:oid:2.5.4.10"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "urn:oid:2.5.4.11"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "ou"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "urn:mace:dir:attribute-def:ou"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "postOfficeBox"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "urn:mace:dir:attribute-def:postOfficeBox"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "urn:oid:2.5.4.18"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "postalAddress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "urn:mace:dir:attribute-def:postalAddress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "urn:oid:2.5.4.16"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "postalCode"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "urn:mace:dir:attribute-def:postalCode"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "urn:oid:2.5.4.17"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "urn:schac:attribute-def:schacHomeOrganization"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:schac:attribute-def:schacUserPrivateAttribute"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Goargu"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Goargu"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Goargu"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "street"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "urn:mace:dir:attribute-def:street"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "urn:oid:2.5.4.9"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "urn:mace:dir:attribute-def:telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "urn:oid:2.5.4.20"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "title"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "urn:mace:dir:attribute-def:title"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "urn:oid:2.5.4.12"
+
+# English string: User ID
+msgid "uid"
+msgstr "Namahus"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Namahus"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Namahus"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "userPassword"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "urn:mace:dir:attribute-def:userPassword"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "urn:oid:2.5.4.35"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Olles namma"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "facebook.name"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "http://axschema.org/namePerson/friendly"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "openid.sreg.nickname"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "http://axschema.org/namePerson"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "openid.sreg.fullname"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "twitter.name"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "windowslive.displayName"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Feide-namma"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Feide-namma"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Feide-namma"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Feide-namma"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Feide-namma"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "facebook_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "linkedin_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "twitter_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "windowslive_targetedID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "http://axschema.org/contact/phone/fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Ovdanamma"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Ovdanamma"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Ovdanamma"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Ovdanamma"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Ovdanamma"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "http://axschema.org/contact/phone/home"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "windowslive.Location"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "facebook.profile_url"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "twitter.url"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Elektrovnnalaš poastačijuhus"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mátketelefovdna"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "http://axschema.org/company/name"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "http://axschema.org/contact/postalCode/home"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "openid.sreg.postcode"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Goargu"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Goargu"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Goargu"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Goargu"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Goargu"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "http://axschema.org/contact/phone/default"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "http://axschema.org/contact/phone/business"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "linkedin.headline"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "http://axschema.org/company/title"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Namahus"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Namahus"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Namahus"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Namahus"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Namahus"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/messages.po
index acf566e821..f1c5ed9cd9 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/se/LC_MESSAGES/messages.po
@@ -18,60 +18,21 @@ msgstr ""
 msgid "{login:username}"
 msgstr "Geavahusnamma"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "URI mii čilge dihto vuoigatvuođa dihto ressurssaide"
-
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Rolla diehto organisašuvnnas, dehe dihto domenas."
-
-msgid "{attributes:attribute_sn}"
-msgstr "Goargu"
-
-msgid "{attributes:attribute_organisationname}"
-msgstr "Organisašuvdna"
-
-msgid "{attributes:attribute_mail}"
-msgstr "Elektrovnnalaš poastačijuhus"
-
 msgid "{login:login_button}"
 msgstr "Mana sis"
 
 msgid "{login:error_wrongpassword}"
 msgstr "Boastu geavahusnamma, beassansátni dehe organisašuvdna."
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Riegadannummir"
-
 msgid "{login:password}"
 msgstr "Beassansátni"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Du doaibma organisašuvnnas"
-
-msgid "{attributes:attribute_givenname}"
-msgstr "Ovdanamma"
-
-msgid "{attributes:attribute_cn}"
-msgstr "Olles namma"
-
 msgid "{login:organization}"
 msgstr "Organisašuvdna"
 
 msgid "{errors:report_email}"
 msgstr "Elektrovnnalaš poastačijuhus"
 
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Feide-namma"
-
-msgid "{attributes:attribute_uid}"
-msgstr "Namahus"
-
-msgid "{attributes:attribute_mobile}"
-msgstr "Mátketelefovdna"
-
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Vuosttašválljejuvvon giella dehe giellahápmi"
-
 msgid "Person's principal name at home organization"
 msgstr "Feide-namma"
 
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..4a46bc0d9a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Ime in priimek"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Ime in priimek"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Ime in priimek"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domenska komponenta (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domenska komponenta (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domenska komponenta (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Prikazno ime"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Spletna stran organizacije"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Spletna stran organizacije"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Spletna stran organizacije"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Naziv organizacije"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Naziv organizacije"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Naziv organizacije"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Vloga uporabnika"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Vloga uporabnika"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Vloga uporabnika"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Stopnja zanesljivosti"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Stopnja zanesljivosti"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Stopnja zanesljivosti"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Upravičenost do storitve"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Upravičenost do storitve"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Upravičenost do storitve"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Vzdevek"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Vzdevek"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Vzdevek"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Ime domače organizacije (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Ime domače organizacije (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Ime domače organizacije (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Ime oddelka domače organizacije (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Ime oddelka domače organizacije (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Ime oddelka domače organizacije (DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primarna vloga"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primarna vloga"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primarna vloga"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Ime (DN) oddelka v domači organizaciji"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Ime (DN) oddelka v domači organizaciji"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Ime (DN) oddelka v domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Vloga v organizaciji"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Vloga v organizaciji"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Vloga v organizaciji"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Trajni anonimni ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Trajni anonimni ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Trajni anonimni ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Ime"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Domača telefonska številka"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Domača telefonska številka"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Domača telefonska številka"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Domači naslov"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Domači naslov"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Domači naslov"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG Slika"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG Slika"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG Slika"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Kraj"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Kraj"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Kraj"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Označen URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Označen URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Označen URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Elektronski naslov"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Elektronski naslov"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Elektronski naslov"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Menedžer"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Menedžer"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Menedžer"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobilni telefon"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobilni telefon"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobilni telefon"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organizacijska številka"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organizacijska številka"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organizacijska številka"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Datum rojstva"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Datum rojstva"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Datum rojstva"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Vpisna številka"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Vpisna številka"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Vpisna številka"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Matična številka"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Matična številka"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Matična številka"
+
+# English string: Organization name
+msgid "o"
+msgstr "Ime organizacije"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Ime organizacije"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Ime organizacije"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Oddelek"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Oddelek"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Oddelek"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Poštni predal"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Poštni predal"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Poštni predal"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Poštni naslov"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Poštni naslov"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Poštni naslov"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Poštna številka"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Poštna številka"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Poštna številka"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Želen jezik"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Želen jezik"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Želen jezik"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "ID domače organizacije"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "ID domače organizacije"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "ID domače organizacije"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "ID domače organizacije"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Zasebni informacijski elementi"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Zasebni informacijski elementi"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Zasebni informacijski elementi"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Zasebni informacijski elementi"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Priimek"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Priimek"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Priimek"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Ulica"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Ulica"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Ulica"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonska številka"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonska številka"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonska številka"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Naziv"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Naziv"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Naziv"
+
+# English string: User ID
+msgid "uid"
+msgstr "Uporabniško ime"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Uporabniško ime"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Uporabniško ime"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Uporabnikovo zgoščeno geslo"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Uporabnikovo zgoščeno geslo"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Uporabnikovo zgoščeno geslo"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Ime in priimek"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Prikazno ime"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Prikazno ime"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "ID uporabnika na domači organizaciji"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Trajni anonimni ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Trajni anonimni ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Trajni anonimni ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Trajni anonimni ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Ime"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Ime"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Ime"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Domača telefonska številka"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Kraj"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Označen URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Označen URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Elektronski naslov"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Elektronski naslov"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Elektronski naslov"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Elektronski naslov"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Elektronski naslov"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobilni telefon"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Ime organizacije"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Poštna številka"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Poštna številka"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Želen jezik"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Želen jezik"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Želen jezik"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Želen jezik"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Želen jezik"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Priimek"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Priimek"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Priimek"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Priimek"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Priimek"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonska številka"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonska številka"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Naziv"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Naziv"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Uporabniško ime"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Uporabniško ime"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Uporabniško ime"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Uporabniško ime"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Uporabniško ime"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/messages.po
index 55607c6d71..130a275626 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sl/LC_MESSAGES/messages.po
@@ -54,12 +54,6 @@ msgstr "Napaka pri nalaganju metapodatkov"
 msgid "{admin:metaconv_title}"
 msgstr "Metapodatkovna sintaktična analiza (parser)"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Upravičenost do storitve"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG Slika"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Ni napak"
 
@@ -129,9 +123,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Nazaj na namestitveno stran SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Idp (Oddaljni)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp napaka"
 
@@ -148,18 +139,12 @@ msgstr ""
 "V konfiguraciji SimpleSAMLphp-ja je napaka. Če ste skrbnik te storitve, "
 "preverite, da je konfiguracija metapodatkov pravilna."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Ime domače organizacije (DN)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Napaka v prejetem zahtevku."
 
 msgid "{status:sessionsize}"
 msgstr "Velikost seje: %SIZE% bajtov"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Poštni naslov"
-
 msgid "{logout:title}"
 msgstr "Odjavljen"
 
@@ -181,32 +166,17 @@ msgstr "V teku"
 msgid "{admin:cfg_check_header}"
 msgstr "Preverjanje konfiguracije"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Vloga v organizaciji"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Priimek"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Pošlji sporočilo"
 
 msgid "{status:logout}"
 msgstr "Odjava"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Ime organizacije"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonska številka"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Parametri, ki so bili poslani \"Discovery service-u\", ne ustrezajo "
 "specifikaciji."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Elektronski naslov"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Pri ustvarjanju SAML zahteve je prišlo do napake."
 
@@ -216,9 +186,6 @@ msgstr "Neobvezna polja"
 msgid "{logout:return}"
 msgstr "Vrni se nazaj na storitev."
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Prikazno ime"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "XML metapodatki se nahajajo na <a href=\"%METAURL%\">tem naslovu</a>:"
 
@@ -230,9 +197,6 @@ msgstr ""
 "Debug način lahko izklopite v globalni SimpleSAMLphp konfiguracijski "
 "datoteki <tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Domači naslov"
-
 msgid "{disco:select}"
 msgstr "Izberite"
 
@@ -259,9 +223,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Ali se želite odjaviti z vseh naštetih storitev?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Naziv"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ni dostopa"
 
@@ -276,9 +237,6 @@ msgstr ""
 "Podatki o stanju so izgubljeni, zato zahteve ni mogoče obnoviti/ponovno "
 "zagnati."
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Matična številka"
-
 msgid "{login:password}"
 msgstr "Geslo"
 
@@ -303,24 +261,15 @@ msgstr "Napaka pri obdelavi zahteve za odjavo"
 msgid "{admin:metaover_errorentry}"
 msgstr "Napaka pri vnosu metapodatkov"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Vloga uporabnika"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metapodatkov ni bilo moč najti"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Ime"
-
 msgid "{login:contact_info}"
 msgstr "Kontakt"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Nedefinirana izjema."
 
-msgid "{status:validfor}"
-msgstr "Vaša trenutna seja je veljavna še %SECONDS% sekund."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo primer"
 
@@ -356,30 +305,18 @@ msgstr ""
 "Avtentikacija je spodletela: vaš spletni brskalnik je posredoval "
 "nepoznano digitalno potrdilo"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Spletna stran organizacije"
-
 msgid "{logout:logging_out_from}"
 msgstr "Odjava iz naslednjih storitev:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Uspešno ste se odjavili s ponudnika storitev: %SP%"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Fedration SP (Lokalni)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Poročilo o napaki je bilo poslano skrbnikom sistema."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Datum rojstva"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Pri obdelavi zahteve za odjavo je prišlo do napake."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Trajni anonimni ID"
-
 msgid "{logout:success}"
 msgstr "Uspešno ste se odjavili z vseh naštetih storitev."
 
@@ -389,12 +326,6 @@ msgstr "Obvestila"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Avtentikacija prekinjena na zahtevo uporabnika"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primarna vloga"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Poštna številka"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Napaka pri komunikaciji s CAS strežnikom."
 
@@ -407,9 +338,6 @@ msgstr "SAML 2.0 SP Metapodatki"
 msgid "{admin:metaconv_converted}"
 msgstr "Pretvorjeni metapodatki"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Ime in priimek"
-
 msgid "{logout:completed}"
 msgstr "Dokončano"
 
@@ -418,18 +346,9 @@ msgstr ""
 "V nastavitvah je geslo skrbnika (auth.adminpassword) še vedno nastavljeno"
 " na začetno vrednost. Spremenite ga!"
 
-msgid "{attributes:attribute_ou}"
-msgstr "Oddelek"
-
 msgid "{general:service_provider}"
 msgstr "Ponudnik storitev"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Domača telefonska številka"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domenska komponenta (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Prišlo je do napake pri prejetem zahtevku. Razlog: %REASON%"
 
@@ -448,23 +367,14 @@ msgstr "Vnesite svoje uporabniško ime in geslo"
 msgid "{errors:report_explain}"
 msgstr "Opišite, kako je prišlo do napake..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Menedžer"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nobenega odgovora za SAML ni na voljo"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Vzdevek"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Dostopili ste do SingleLogoutService vmesnika, ampak niste zagotovili "
 "SAML LogoutRequest ali LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Ulica"
-
 msgid "{login:organization}"
 msgstr "Organizacija"
 
@@ -502,9 +412,6 @@ msgstr "Izberite domačo organizacijo."
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Odvečne nastavitve v konfiguracijski datoteki"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Označen URI"
-
 msgid "{errors:report_email}"
 msgstr "Elektronski naslov:"
 
@@ -517,9 +424,6 @@ msgstr "Geslo ni nastavljeno"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "Pobudnik te zahteve ni posredoval RelayState parametra."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Uradno ime"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostika"
 
@@ -528,9 +432,6 @@ msgstr ""
 "Živjo! To je statusna stran SimpleSAMLphp, ki omogoča pregled nad "
 "trajanjem vaše trenutne seje in atributi, ki so povezani z njo."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "ID domače organizacije"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Strani ni bilo mogoče najti."
 
@@ -549,30 +450,18 @@ msgstr "Za pregled podrobnosti SAML entitete, kliknite na glavo te entitete"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Napačen certifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Ime oddelka domače organizacije (DN)"
-
 msgid "{general:remember}"
 msgstr "Zapomni si privolitev."
 
 msgid "{disco:selectidp}"
 msgstr "Izberite IdP domače organizacije"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Poštni predal"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "ID uporabnika na domači organizaciji"
-
 msgid "{login:help_desk_email}"
 msgstr "Pošlji sporočilo tehnični podpori."
 
 msgid "{login:help_desk_link}"
 msgstr "Spletna stran tehnične podpore uporabnikom."
 
-msgid "{attributes:attribute_uid}"
-msgstr "Uporabniško ime"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS napaka"
 
@@ -593,12 +482,6 @@ msgstr "Shrani kot privzeto izbiro"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 SP (Lokalni)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Kraj"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Stopnja zanesljivosti"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "V SimpleSAMLphp \"flat file\" formatu - ta format uporabite, če "
@@ -643,9 +526,6 @@ msgstr "Sporočilo"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Nepoznano digitalno potrdilo"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "Napaka LDAP-a"
 
@@ -662,15 +542,9 @@ msgstr ""
 "Ta napaka je verjetno posledica nepravilne konfiguracije SimpleSAMLphp-"
 "ja. Obrnite se na skrbnika in mu posredujte to napako."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobilni telefon"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 SP (Lokalni)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Želen jezik"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Posredovan certifikat je neveljaven"
 
@@ -683,15 +557,6 @@ msgstr "Naslednjih neobveznih polj ni bilo mogoče najti"
 msgid "{logout:logout_only}"
 msgstr "Ne, odjavi me samo z naslednjega %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Ime organizacije"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Ime (DN) oddelka v domači organizaciji"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Vpisna številka"
-
 msgid "{login:next}"
 msgstr "Naprej"
 
@@ -709,9 +574,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Ni digitalnega potrdila"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Uporabnikovo zgoščeno geslo"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Odjavni (Logout) parametri niso na voljo."
 
@@ -727,12 +589,6 @@ msgstr ""
 "pošljete zaupanja vrednim partnerjem, s katerimi boste ustvarili "
 "federacijo."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Zasebni informacijski elementi"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP demo primer"
-
 msgid "{admin:metadata_cert}"
 msgstr "Digitalna potrdila"
 
@@ -741,18 +597,12 @@ msgstr ""
 "Avtentikacija je spodletela: vaš spletni brskalnik je posredoval "
 "neveljavno digitalno potrdilo ali pa ga ni moč prebrati!"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Naziv organizacije"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demo primer"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Sintaktična analiza (parse)"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organizacijska številka"
-
 msgid "Person's principal name at home organization"
 msgstr "ID uporabnika na domači organizaciji"
 
@@ -1076,8 +926,8 @@ msgstr ""
 "ja. Obrnite se na skrbnika in mu posredujte to napako."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Vaša trenutna seja je veljavna še %SECONDS% sekund."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Vaša trenutna seja je veljavna še %remaining% sekund."
 
 msgid "Domain component (DC)"
 msgstr "Domenska komponenta (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sma/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/sma/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..8b9d97c2be
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sma/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sma\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 2) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "cn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "urn:mace:dir:attribute-def:cn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "urn:oid:2.5.4.3"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "dc"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "urn:mace:dir:attribute-def:dc"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "urn:oid:0.9.2342.19200300.100.1.25"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "displayName"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "urn:mace:dir:attribute-def:displayName"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "urn:oid:2.16.840.1.113730.3.1.241"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "urn:mace:dir:attribute-def:eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "eduPersonAffiliation"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonAffiliation"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "eduPersonEntitlement"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "urn:mace:dir:attribute-def:eduPersonEntitlement"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "urn:mace:dir:attribute-def:eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "eduPersonPrincipalName"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "eduPersonScopedAffiliation"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "urn:mace:dir:attribute-def:eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "urn:oid:2.5.4.23"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "givenName"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "urn:mace:dir:attribute-def:givenName"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "urn:oid:2.5.4.42"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "homePhone"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "urn:mace:dir:attribute-def:homePhone"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "urn:oid:0.9.2342.19200300.100.1.20"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "urn:mace:dir:attribute-def:homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "urn:oid:0.9.2342.19200300.100.1.39"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "urn:mace:dir:attribute-def:jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "urn:oid:0.9.2342.19200300.100.1.60"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "l"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "urn:mace:dir:attribute-def:l"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "urn:oid:2.5.4.7"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "labeledURI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "urn:mace:dir:attribute-def:labeledURI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "urn:oid:1.3.6.1.4.1.250.1.57"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "urn:mace:dir:attribute-def:mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "urn:oid:0.9.2342.19200300.100.1.3"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "urn:mace:dir:attribute-def:manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "urn:oid:0.9.2342.19200300.100.1.10"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "mobile"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "urn:mace:dir:attribute-def:mobile"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "urn:oid:0.9.2342.19200300.100.1.41"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "urn:mace:dir:attribute-def:norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "norEduPersonNIN"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonNIN"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+
+# English string: Organization name
+msgid "o"
+msgstr "o"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "urn:mace:dir:attribute-def:o"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "urn:oid:2.5.4.10"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "urn:oid:2.5.4.11"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "ou"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "urn:mace:dir:attribute-def:ou"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "postOfficeBox"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "urn:mace:dir:attribute-def:postOfficeBox"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "urn:oid:2.5.4.18"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "postalAddress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "urn:mace:dir:attribute-def:postalAddress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "urn:oid:2.5.4.16"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "postalCode"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "urn:mace:dir:attribute-def:postalCode"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "urn:oid:2.5.4.17"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "preferredLanguage"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "urn:mace:dir:attribute-def:preferredLanguage"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "urn:oid:2.16.840.1.113730.3.1.39"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "urn:schac:attribute-def:schacHomeOrganization"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:schac:attribute-def:schacUserPrivateAttribute"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "sn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "urn:mace:dir:attribute-def:sn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "urn:oid:2.5.4.4"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "street"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "urn:mace:dir:attribute-def:street"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "urn:oid:2.5.4.9"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "urn:mace:dir:attribute-def:telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "urn:oid:2.5.4.20"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "title"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "urn:mace:dir:attribute-def:title"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "urn:oid:2.5.4.12"
+
+# English string: User ID
+msgid "uid"
+msgstr "uid"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "urn:mace:dir:attribute-def:uid"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "urn:oid:0.9.2342.19200300.100.1.1"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "userPassword"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "urn:mace:dir:attribute-def:userPassword"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "urn:oid:2.5.4.35"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "facebook_cn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "facebook.name"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "http://axschema.org/namePerson/friendly"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "openid.sreg.nickname"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "http://axschema.org/namePerson"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "openid.sreg.fullname"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "twitter.name"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "windowslive.displayName"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "facebook_user"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "linkedin_user"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "twitter_screen_n_realm"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "windowslive_user"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "windowslive.userPrincipalName"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "facebook_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "linkedin_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "twitter_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "windowslive_targetedID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "http://axschema.org/contact/phone/fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "facebook.first_name"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "linkedin.firstName"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "http://axschema.org/namePerson/first"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "windowslive.FirstName"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "windowslive.givenName"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "http://axschema.org/contact/phone/home"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "windowslive.Location"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "facebook.profile_url"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "twitter.url"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "facebook.email"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "http://axschema.org/contact/email"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "openid.sreg.email"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "windowslive_mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "windowslive.mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "http://axschema.org/contact/phone/cell"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "http://axschema.org/company/name"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "http://axschema.org/contact/postalCode/home"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "openid.sreg.postcode"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "facebook.locale"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "http://axschema.org/pref/language"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "openid.sreg.language"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "twitter.lang"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "windowslive.preferredLanguage"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "facebook.last_name"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "linkedin.lastName"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "http://axschema.org/namePerson/last"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "windowslive.LastName"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "windowslive.surname"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "http://axschema.org/contact/phone/default"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "http://axschema.org/contact/phone/business"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "linkedin.headline"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "http://axschema.org/company/title"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "facebook.username"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "linkedin.id"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "twitter.screen_name"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "windowslive_uid"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "windowslive.id"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..4463a04e07
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Ime i Prezime"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Ime i Prezime"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Ime i Prezime"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domenska komponenta (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domenska komponenta (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domenska komponenta (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Ime za prikaz"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "URL adresa institucije"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "URL adresa institucije"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "URL adresa institucije"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Zvanični naziv institucije"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Zvanični naziv institucije"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Zvanični naziv institucije"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Povezanost sa institucijom"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Povezanost sa institucijom"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Povezanost sa institucijom"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Visina pouzdanosti davaoca digitalnih identiteta"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Visina pouzdanosti davaoca digitalnih identiteta"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Visina pouzdanosti davaoca digitalnih identiteta"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Prava i privilegije korisnika na sistemu"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Prava i privilegije korisnika na sistemu"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Prava i privilegije korisnika na sistemu"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Nadimak"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Nadimak"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Nadimak"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Jedinstveni naziv (DN) korisnikove matične institucije"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Jedinstveni naziv (DN) korisnikove matične institucije"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Jedinstveni naziv (DN) korisnikove matične institucije"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove organizacione jedinice"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove organizacione jedinice"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Jedinstveni naziv (DN) korisnikove organizacione jedinice"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primarna povezanost sa institucijom"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primarna povezanost sa institucijom"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primarna povezanost sa institucijom"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacione jedinice"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacione jedinice"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacione jedinice"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Povezanost sa institucijom sa domenom"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Povezanost sa institucijom sa domenom"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Povezanost sa institucijom sa domenom"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Fax broj"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Fax broj"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Fax broj"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Ime"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Kućni telefonski broj"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Kućni telefonski broj"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Kućni telefonski broj"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Kućna poštanska adresa"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Kućna poštanska adresa"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Kućna poštanska adresa"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Slika osobe"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Slika osobe"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Slika osobe"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Lokacija(Mesto)"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Lokacija(Mesto)"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Lokacija(Mesto)"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "URI adresa"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "URI adresa"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "URI adresa"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Elektronska adresa"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Elektronska adresa"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Elektronska adresa"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Rukovodilac"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Rukovodilac"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Rukovodilac"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Broj mobilnog telefona"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Broj mobilnog telefona"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Broj mobilnog telefona"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Jedinstveni brojni identifikator institucije"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Jedinstveni brojni identifikator institucije"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Jedinstveni brojni identifikator institucije"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Datum rođenja"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Datum rođenja"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Datum rođenja"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokalni brojni identifikator osobe"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokalni brojni identifikator osobe"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokalni brojni identifikator osobe"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Jedinstveni brojni identifikator osobe"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Jedinstveni brojni identifikator osobe"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Jedinstveni brojni identifikator osobe"
+
+# English string: Organization name
+msgid "o"
+msgstr "Naziv matične institucije"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Naziv matične institucije"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Naziv matične institucije"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizaciona jedinica"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizaciona jedinica"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizaciona jedinica"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Broj poštanskog sandučeta"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Broj poštanskog sandučeta"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Broj poštanskog sandučeta"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Poštanska adresa"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Poštanska adresa"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Poštanska adresa"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Poštanski broj"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Poštanski broj"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Poštanski broj"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Preferirani jezik"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Preferirani jezik"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Preferirani jezik"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Domen matične institucije"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Domen matične institucije"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Domen matične institucije"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Domen matične institucije"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Privatni atribut"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Privatni atribut"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Privatni atribut"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Privatni atribut"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Prezime"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Ulica i broj"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Ulica i broj"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Ulica i broj"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonski broj"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonski broj"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonski broj"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Zvanje"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Zvanje"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Zvanje"
+
+# English string: User ID
+msgid "uid"
+msgstr "Korisničko ime"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Korisničko ime"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Korisničko ime"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Heš vrednost korisnikove lozinke"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Heš vrednost korisnikove lozinke"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Heš vrednost korisnikove lozinke"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Ime i Prezime"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Ime za prikaz"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Ime za prikaz"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Jedinstveni identifikator osobe"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Trajni anonimni identifikator"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Fax broj"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Ime"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Ime"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Ime"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Ime"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Kućni telefonski broj"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Lokacija(Mesto)"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "URI adresa"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "URI adresa"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Elektronska adresa"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Elektronska adresa"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Elektronska adresa"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Elektronska adresa"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Elektronska adresa"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Broj mobilnog telefona"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Naziv matične institucije"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Poštanski broj"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Poštanski broj"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Preferirani jezik"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Preferirani jezik"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Preferirani jezik"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Preferirani jezik"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Preferirani jezik"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Prezime"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Prezime"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonski broj"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonski broj"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Zvanje"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Zvanje"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Korisničko ime"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Korisničko ime"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Korisničko ime"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Korisničko ime"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Korisničko ime"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/messages.po
index dc6e00551f..eec871b972 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sr/LC_MESSAGES/messages.po
@@ -54,12 +54,6 @@ msgstr "Greška prilikom učitavanja metapodataka"
 msgid "{admin:metaconv_title}"
 msgstr "Metadata analizator"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Prava i privilegije korisnika na sistemu"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Slika osobe"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Nije pronađena nijedna greška."
 
@@ -140,9 +134,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Natrag na početnu stranicu SimpleSAMLphp instalacije"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Davalac Servisa (udaljeni)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp greška"
 
@@ -161,18 +152,12 @@ msgstr ""
 " ovog servisa, trebalo bi da proverite da li su metapodaci ispravno "
 "podešeni."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Jedinstveni naziv (DN) korisnikove matične institucije"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Dobijeni zahtev nije ispravan"
 
 msgid "{status:sessionsize}"
 msgstr "Veličina sesije: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Poštanska adresa"
-
 msgid "{logout:title}"
 msgstr "Odjavljeni ste"
 
@@ -194,30 +179,15 @@ msgstr "Na čekanju"
 msgid "{admin:cfg_check_header}"
 msgstr "Provera podešavanja"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Povezanost sa institucijom sa domenom"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Prezime"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Pošalji poruku"
 
 msgid "{status:logout}"
 msgstr "Odjava"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Naziv matične institucije"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonski broj"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Parametri poslati servisu za lociranje nisu u ispravnom formatu."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Elektronska adresa"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Desila se greška prilikom pokušaja kreiranja SAML zahteva."
 
@@ -227,9 +197,6 @@ msgstr "Opciona polja"
 msgid "{logout:return}"
 msgstr "Povratak u aplikaciju"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Ime za prikaz"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "Metapodaci su dostupni na <a href=\"%METAURL%\">ovoj adresi</a>:"
 
@@ -241,9 +208,6 @@ msgstr ""
 "Debug mod možete isključiti u glavnom SimpleSAMLphp konfiguracionom fajlu"
 " <tt>config/config.php</tt>. "
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Kućna poštanska adresa"
-
 msgid "{disco:select}"
 msgstr "Odaberi"
 
@@ -270,9 +234,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Želite li se odjaviti iz svih gore navedenih servisa?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Zvanje"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Pristup nije dozvoljen"
 
@@ -287,9 +248,6 @@ msgstr "Parametar RelayState nije zadan"
 msgid "{errors:descr_NOSTATE}"
 msgstr "Podaci o stanju su izgubljeni i zahtev se ne može reprodukovati"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Jedinstveni brojni identifikator osobe"
-
 msgid "{login:password}"
 msgstr "Lozinka"
 
@@ -316,24 +274,15 @@ msgstr "Greška pri obradi zahteva za odjavu"
 msgid "{admin:metaover_errorentry}"
 msgstr "Ovaj zapis metapodataka sadrži grešku"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Povezanost sa institucijom"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metapodaci nisu pronađeni"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Ime"
-
 msgid "{login:contact_info}"
 msgstr "Kontakt podaci:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Neobrađena greška"
 
-msgid "{status:validfor}"
-msgstr "Vaša sesija će biti validna još %SECONDS% sekundi."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo Primer"
 
@@ -369,30 +318,18 @@ msgstr ""
 "Neuspešna autentifikacija: digitalni sertifikat koji je poslao vaš web "
 "pretraživač je nepoznat"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "URL adresa institucije"
-
 msgid "{logout:logging_out_from}"
 msgstr "Odjavljujete se iz sledećih servisa"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Uspešno ste odjavljeni iz %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Davalac Servisa (lokalni)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Prijava greške poslata je administratorima."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Datum rođenja"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Došlo je do greške prilikom pokušaja obrade zahteva za odjavom."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Trajni anonimni identifikator"
-
 msgid "{logout:success}"
 msgstr "Uspešno ste se odjavili iz svih gore navedenih servisa."
 
@@ -402,12 +339,6 @@ msgstr "Napomene"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Korisnik je prekinuo proces autentifikacie"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primarna povezanost sa institucijom"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Poštanski broj"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Greška prilikom komunikacije sa CAS serverom."
 
@@ -420,9 +351,6 @@ msgstr "SAML 2.0 SP metapodaci"
 msgid "{admin:metaconv_converted}"
 msgstr "Konvertovani metapodaci"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Ime i Prezime"
-
 msgid "{logout:completed}"
 msgstr "Završeno"
 
@@ -432,18 +360,9 @@ msgstr ""
 "<i>auth.adminpassword</i>) i dalje ima izvornu vrednost. Molimo Vas "
 "izmenite konfiguracioni fajl."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizaciona jedinica"
-
 msgid "{general:service_provider}"
 msgstr "Davalac Servisa"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Kućni telefonski broj"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domenska komponenta (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Dogodila se greška prilikom dohvatanja ove stranice. Razlog: %REASON%"
 
@@ -462,23 +381,14 @@ msgstr "Unesite vaše korisničko ime i lozinku"
 msgid "{errors:report_explain}"
 msgstr "Opišite šta ste radili kada se ova greška desila..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Rukovodilac"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Nije dostavljen SAML odgovor"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Nadimak"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Pristupili ste interfejsu za jedinstvenu odjavu sa sistema, ali niste "
 "poslali SAML <i>LogoutRequest</i> ili <i>LogoutResponse</i> poruku."
 
-msgid "{attributes:attribute_street}"
-msgstr "Ulica i broj"
-
 msgid "{login:organization}"
 msgstr "Institucija"
 
@@ -518,9 +428,6 @@ msgstr "Izaberite matičnu instituciju"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Suvišni parametri u konfiguracionom fajlu"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "URI adresa"
-
 msgid "{errors:report_email}"
 msgstr "e-mail adresa:"
 
@@ -536,9 +443,6 @@ msgstr ""
 "koji sadrži adresu na koju treba preusmeriti korisnikov web pretraživač "
 "nakon uspešne autentifikacije."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Pravno ime"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp Dijagnostika"
 
@@ -548,9 +452,6 @@ msgstr ""
 " možete videti je li vam je istekla sesija, koliko će još dugo vaša "
 "sesija trajati i sve atribute koji su vezani uz vašu sesiju."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Domen matične institucije"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Stranica nije pronađena"
 
@@ -569,30 +470,18 @@ msgstr "Da biste videli detalje o SAML entitetu, kliknite na njegovo zaglavlje."
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Neispravan sertifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Jedinstveni naziv (DN) korisnikove organizacione jedinice"
-
 msgid "{general:remember}"
 msgstr "Zapamti moj izbor"
 
 msgid "{disco:selectidp}"
 msgstr "Odaberite vašeg davaoca identiteta"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Broj poštanskog sandučeta"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Jedinstveni identifikator osobe"
-
 msgid "{login:help_desk_email}"
 msgstr "Pošalji e-mail službi za podršku korisnicima"
 
 msgid "{login:help_desk_link}"
 msgstr "Stranice službe za podršku korisnicima"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Korisničko ime"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS greška"
 
@@ -613,12 +502,6 @@ msgstr "Zapamti moj izbor"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Davalac Servisa (lokalni)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Lokacija(Mesto)"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Visina pouzdanosti davaoca digitalnih identiteta"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "U SimpleSAMLphp formatu - koristite ovu opciju ako se na drugoj strani "
@@ -663,9 +546,6 @@ msgstr "Poruka"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Nepoznat digitalni sertifikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Fax broj"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP greška"
 
@@ -684,15 +564,9 @@ msgstr ""
 " podešavanja SimpleSAMLphp-a. Kontaktirajte administratora ovog servisa i"
 " pošaljite mu poruku o grešci prikazanu iznad."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Broj mobilnog telefona"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Davalac Identiteta(lokalni)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Preferirani jezik"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Niste dostavili validan setifikat."
 
@@ -705,15 +579,6 @@ msgstr "Nisu pronađena sledeća opciona polja"
 msgid "{logout:logout_only}"
 msgstr "Ne, samo iz %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Naziv matične institucije"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Jedinstveni naziv (DN) korisnikove primarne organizacione jedinice"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokalni brojni identifikator osobe"
-
 msgid "{login:next}"
 msgstr "Dalje"
 
@@ -735,9 +600,6 @@ msgstr ""
 msgid "{errors:title_NOCERT}"
 msgstr "Nema digitalnog sertifikata"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Heš vrednost korisnikove lozinke"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Informacija o odjavljivanju je izgubljena"
 
@@ -753,12 +615,6 @@ msgstr ""
 "metapodatke možete poslati davaocima servisa ili davaocima identiteta u "
 "koje imate poverenja i sa kojima želite uspostaviti federaciju."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Privatni atribut"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo Primer"
-
 msgid "{admin:metadata_cert}"
 msgstr "Sertifikati"
 
@@ -767,18 +623,12 @@ msgstr ""
 "Neuspešna autentifikacija: digitalni sertifikat koji je poslao vaš web "
 "pretraživač nije ispravan ili se ne može pročitati"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Zvanični naziv institucije"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth Demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analiziraj"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Jedinstveni brojni identifikator institucije"
-
 msgid "Person's principal name at home organization"
 msgstr "Jedinstveni identifikator osobe"
 
@@ -1115,8 +965,8 @@ msgstr ""
 " pošaljite mu poruku o grešci prikazanu iznad."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Vaša sesija će biti validna još %SECONDS% sekundi."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Vaša sesija će biti validna još %remaining% sekundi."
 
 msgid "Domain component (DC)"
 msgstr "Domenska komponenta (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..f1e5a0c5ed
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Fullständigt namn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Fullständigt namn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Fullständigt namn"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Domännamnskomponent"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Domännamnskomponent"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Domännamnskomponent"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Visningsnamn"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Organisationens hemsida"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Organisationens hemsida"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Organisationens hemsida"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organisationens legala namn"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organisationens legala namn"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organisationens legala namn"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Anknytning"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Anknytning"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Anknytning"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Identitetens tillförlitlighetsprofil"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Identitetens tillförlitlighetsprofil"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Identitetens tillförlitlighetsprofil"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Roll(er) i aktuell tjänst"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Roll(er) i aktuell tjänst"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Roll(er) i aktuell tjänst"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Smeknamn"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Smeknamn"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Smeknamn"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "LDAP-pekare (DN) till personens organisation"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "LDAP-pekare (DN) till personens organisation"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "LDAP-pekare (DN) till personens organisation"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "LDAP-pekare (DN) till personens organisationsenhet"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "LDAP-pekare (DN) till personens organisationsenhet"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "LDAP-pekare (DN) till personens organisationsenhet"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Primär anknytning"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Primär anknytning"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Primär anknytning"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "LDAP-pekare (DN) till personens pimära organisationsenhet"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "LDAP-pekare (DN) till personens pimära organisationsenhet"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "LDAP-pekare (DN) till personens pimära organisationsenhet"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Grupptillhörighet"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Grupptillhörighet"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Grupptillhörighet"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faxnummer"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faxnummer"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Förnamn"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Förnamn"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Förnamn"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Hemtelefon"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Hemtelefon"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Hemtelefon"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Hemadress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Hemadress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Hemadress"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG-bild"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG-bild"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG-bild"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Plats"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Plats"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Plats"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Hemsida"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Hemsida"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Hemsida"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "E-postadress"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "E-postadress"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "E-postadress"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Chef"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Chef"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Chef"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Mobiltelefon"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Mobiltelefon"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Organisationsnummer"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Organisationsnummer"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Organisationsnummer"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Födelsedata"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Födelsedata"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Födelsedata"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Lokal identifierare"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Lokal identifierare"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Lokal identifierare"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Officiellt personnummer eller intermimspersonnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Officiellt personnummer eller intermimspersonnummer"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Officiellt personnummer eller intermimspersonnummer"
+
+# English string: Organization name
+msgid "o"
+msgstr "Namn på organisationen"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Namn på organisationen"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Namn på organisationen"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organisationsenhet"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organisationsenhet"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organisationsenhet"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Box"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Box"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Box"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Postadress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Postadress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Postadress"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Postkod"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Postkod"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Postkod"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Önskvärt språk"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Önskvärt språk"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Önskvärt språk"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Domännamn för organisationen"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Domännamn för organisationen"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Domännamn för organisationen"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Domännamn för organisationen"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Information om vilka attribut som har skyddsbehov"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Information om vilka attribut som har skyddsbehov"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Information om vilka attribut som har skyddsbehov"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Information om vilka attribut som har skyddsbehov"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Efternamn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Efternamn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Efternamn"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Gata"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Gata"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Gata"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefonnummer"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Titel"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Titel"
+
+# English string: User ID
+msgid "uid"
+msgstr "Användaridentitet"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Användaridentitet"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Användaridentitet"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Användarens lösenordshash"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Användarens lösenordshash"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Användarens lösenordshash"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Fullständigt namn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Visningsnamn"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Visningsnamn"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Användaridentitet vid din organisationen"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Varaktig anonym identitet i aktuell tjänst"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faxnummer"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Förnamn"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Förnamn"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Förnamn"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Förnamn"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Förnamn"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Hemtelefon"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Plats"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Hemsida"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Hemsida"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "E-postadress"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "E-postadress"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "E-postadress"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "E-postadress"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "E-postadress"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Mobiltelefon"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Namn på organisationen"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Postkod"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Postkod"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Önskvärt språk"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Önskvärt språk"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Önskvärt språk"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Önskvärt språk"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Önskvärt språk"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Efternamn"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Efternamn"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Efternamn"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Efternamn"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Efternamn"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefonnummer"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefonnummer"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Titel"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Titel"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Användaridentitet"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Användaridentitet"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Användaridentitet"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Användaridentitet"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Användaridentitet"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/messages.po
index e9cd592c9f..c090e00df8 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/sv/LC_MESSAGES/messages.po
@@ -50,12 +50,6 @@ msgstr "Fel vi laddandet av metadata"
 msgid "{admin:metaconv_title}"
 msgstr "Metadataanalyserare"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Roll(er) i aktuell tjänst"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG-bild"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Inga fel funna."
 
@@ -135,9 +129,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "Åter till installationssidan för SimpleSAMLphp"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation Service Provider (Fjärr)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp fel"
 
@@ -156,18 +147,12 @@ msgstr ""
 " du är adminstratör av tjänsten ska du kontrollera om konfigurationen av "
 "metadata är rätt konfigurerad."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "LDAP-pekare (DN) till personens organisation"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Felaktigt anrop"
 
 msgid "{status:sessionsize}"
 msgstr "Sessionsstorlek: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Postadress"
-
 msgid "{logout:title}"
 msgstr "Utloggad"
 
@@ -189,32 +174,17 @@ msgstr "Vilande"
 msgid "{admin:cfg_check_header}"
 msgstr "Konfigurationskontroll"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Grupptillhörighet"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Efternamn"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Skicka meddelande"
 
 msgid "{status:logout}"
 msgstr "Logga ut"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Namn på organisationen"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefonnummer"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr ""
 "Parametrarna som skickades till lokaliseringstjänsten följde inte "
 "specifikationen."
 
-msgid "{attributes:attribute_mail}"
-msgstr "E-postadress"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "Ett fel har inträffat vid försöket att skapa en SAML-förfrågan."
 
@@ -224,9 +194,6 @@ msgstr "Frivilliga alternativ"
 msgid "{logout:return}"
 msgstr "Åter till tjänsten"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Visningsnamn"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr ""
 "Du kan <a href=\"%METAURL%\">hämta metadata i XML-format på dedicerad "
@@ -240,9 +207,6 @@ msgstr ""
 "Du kan stänga av debugläget i SimpleSAMLphps globala konfigurationsfil "
 "<tt>config/config.php</tt>."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Hemadress"
-
 msgid "{disco:select}"
 msgstr "Välj"
 
@@ -270,9 +234,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Vill du logga ut från alla ovanstående tjänster?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Titel"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Ingen åtkomst"
 
@@ -289,9 +250,6 @@ msgstr ""
 "Sessionsinformationen är borttappad och det är inte möjligt att "
 "återstarta förfrågan"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Officiellt personnummer eller intermimspersonnummer"
-
 msgid "{login:password}"
 msgstr "Lösenord"
 
@@ -318,24 +276,15 @@ msgstr "Fel vid utloggningsförfrågan"
 msgid "{admin:metaover_errorentry}"
 msgstr "Fel i dessa metadat"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Anknytning"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "Metadata saknas"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Förnamn"
-
 msgid "{login:contact_info}"
 msgstr "Kontaktinformation:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Ohanterat undantag"
 
-msgid "{status:validfor}"
-msgstr "Din session är giltig för %SECONDS% sekunder från nu."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP demoexempel"
 
@@ -369,30 +318,18 @@ msgstr "Välj vilken konfigurationfil som ska kontrolleras:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Inloggning mislyckades: Certifikatet som din webbläsare skickade är okänt"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Organisationens hemsida"
-
 msgid "{logout:logging_out_from}"
 msgstr "Loggar ut från följande tjänster:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "Du har nu loggat ut från %SP%."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation Service Provider (Värd)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Felrapporten är skickad till den som sköter systemet."
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Födelsedata"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Ett fel uppstod när utloggningsförfrågan skulle bearbetas."
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Varaktig anonym identitet i aktuell tjänst"
-
 msgid "{logout:success}"
 msgstr "Du har loggat ut från alla nedanstående tjänster."
 
@@ -402,12 +339,6 @@ msgstr "Meddelanden"
 msgid "{errors:descr_USERABORTED}"
 msgstr "Inloggning avbröts av användaren"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Primär anknytning"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Postkod"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Ett fel uppstod vid kommunikation med CAS-servern."
 
@@ -420,9 +351,6 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "Omformat metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Fullständigt namn"
-
 msgid "{logout:completed}"
 msgstr "Klar"
 
@@ -431,18 +359,9 @@ msgstr ""
 "Konfigurationslösenordet (auth.adminpassword) är inte ändrat från "
 "standardvärdet. Uppdatera kongiruationen med ett nytt lösenord!"
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organisationsenhet"
-
 msgid "{general:service_provider}"
 msgstr "Tjänsteleverantör"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Hemtelefon"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domännamnskomponent"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Det är ett fel i anropet till denna sida. Orsak: %REASON%"
 
@@ -461,23 +380,14 @@ msgstr "Ange ditt användarnamn och lösenord"
 msgid "{errors:report_explain}"
 msgstr "Förklara hur felet uppstod..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Chef"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "Inget SAML-svar tillhandahölls"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Smeknamn"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "Du har anroppat tjänsten för Single Sing-Out utan att skicka med någon "
 "SAML LogoutRequest eller LogoutResponse."
 
-msgid "{attributes:attribute_street}"
-msgstr "Gata"
-
 msgid "{login:organization}"
 msgstr "Organisation"
 
@@ -517,9 +427,6 @@ msgstr "Ändra organisation"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Överflödiga alternativ i konfigurationsfilen"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Hemsida"
-
 msgid "{errors:report_email}"
 msgstr "E-postadress"
 
@@ -534,9 +441,6 @@ msgstr ""
 "Avsändaren av denna förfrågan hade ingen parameter för RelayState vilket "
 "medför att nästa plats inte är definierad."
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Officiellt (legalt) namn"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp diagnostik "
 
@@ -546,9 +450,6 @@ msgstr ""
 "har gått ut, hur länge det dröjer innan den går ut samt alla attribut som"
 " tillhör sessionen."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Domännamn för organisationen"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Sidan finns inte"
 
@@ -569,30 +470,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Felaktigt certifikat"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "LDAP-pekare (DN) till personens organisationsenhet"
-
 msgid "{general:remember}"
 msgstr "Spara samtycke"
 
 msgid "{disco:selectidp}"
 msgstr "Välj din identitetsleverantör"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Box"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Användaridentitet vid din organisationen"
-
 msgid "{login:help_desk_email}"
 msgstr "Skicka e-post till helpdesk"
 
 msgid "{login:help_desk_link}"
 msgstr "Hemsida för helpdesk"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Användaridentitet"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS-error"
 
@@ -613,12 +502,6 @@ msgstr "Kom ihåg mitt val"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Service Provider (Värd)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Plats"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Identitetens tillförlitlighetsprofil"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "I filformatet för simpleSAML, använd detta detta format om SimpleSAMLphp "
@@ -663,9 +546,6 @@ msgstr "Meddelande"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Okänt certfikat"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faxnummer"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP-fel"
 
@@ -684,15 +564,9 @@ msgstr ""
 " av SimpleSAMLphp. Kontakta den som sköter inloggningtjänsten för att "
 "meddela dem ovanstående felmeddelande."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Mobiltelefon"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Identity Provider (Värd)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Önskvärt språk"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Du tillhandahöll inget godkänt certifikat"
 
@@ -707,15 +581,6 @@ msgstr "Följande frivilliga alternativ hittades inte"
 msgid "{logout:logout_only}"
 msgstr "Nej, endast %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Namn på organisationen"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "LDAP-pekare (DN) till personens pimära organisationsenhet"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Lokal identifierare"
-
 msgid "{login:next}"
 msgstr "Nästa"
 
@@ -733,9 +598,6 @@ msgstr "Den angivna sidan finns inte. Orsak: %REASON% URL: %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "Inget certfikat"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Användarens lösenordshash"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Utloggningsinformation är borta"
 
@@ -751,12 +613,6 @@ msgstr ""
 "betrodd federation kan du skicka metadata till de parter du har "
 "förtroende för."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Information om vilka attribut som har skyddsbehov"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP demoexempel"
-
 msgid "{admin:metadata_cert}"
 msgstr "Certifikat"
 
@@ -765,18 +621,12 @@ msgstr ""
 "Inloggning mislyckades: Certfikatet som din webbläsare skickade var "
 "felaktigt eller kunde inte läsas"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organisationens legala namn"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demoexempel"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Analysera"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Organisationsnummer"
-
 msgid "Person's principal name at home organization"
 msgstr "Användaridentitet vid din organisationen"
 
@@ -1112,8 +962,8 @@ msgstr ""
 "meddela dem ovanstående felmeddelande."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Din session är giltig för %SECONDS% sekunder från nu."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Din session är giltig för %remaining% sekunder från nu."
 
 msgid "Domain component (DC)"
 msgstr "Domännamnskomponent"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..e700e070a4
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Ortak ad"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Ortak ad"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Ortak ad"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Alan bileşeni"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Alan bileşeni"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Alan bileşeni"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Görüntülenen isim"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Kurumsal websayfası"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Kurumsal websayfası"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Kurumsal websayfası"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Organizasyonu'un resmi adı"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Organizasyonu'un resmi adı"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Organizasyonu'un resmi adı"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Bağlantı"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Bağlantı"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Bağlantı"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Servise göre yetki"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Servise göre yetki"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Servise göre yetki"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Takma ad"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Takma ad"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Takma ad"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Kişinin bağlı olduğu kuruluşun belirgin adı"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Kişinin bağlı olduğu kuruluşun belirgin adı"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Kişinin bağlı olduğu kuruluşun belirgin adı"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Kişinin bağlı olduğu birimin belirgin adı"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Kişinin bağlı olduğu birimin belirgin adı"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Kişinin bağlı olduğu birimin belirgin adı"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Öncelikli bağlantı"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Öncelikli bağlantı"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Öncelikli bağlantı"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Kişinin öncelikli Kurumsal Birimi'nin belirgin adı"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Kişinin öncelikli Kurumsal Birimi'nin belirgin adı"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Kişinin öncelikli Kurumsal Birimi'nin belirgin adı"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Bağlı olunan kuruluşla bağlantı"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Bağlı olunan kuruluşla bağlantı"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Bağlı olunan kuruluşla bağlantı"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Faks numarası"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Faks numarası"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Faks numarası"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Verilen isim"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Verilen isim"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Verilen isim"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Ev telefonu"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Ev telefonu"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Ev telefonu"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Ev posta adresi"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Ev posta adresi"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Ev posta adresi"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG fotoğraf"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG fotoğraf"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG fotoğraf"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Bölge"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Bölge"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Bölge"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "Etiketlenen URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "Etiketlenen URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "Etiketlenen URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Posta"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Posta"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Posta"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Yönetici"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Yönetici"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Yönetici"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Cep telefonu numarası"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Cep telefonu numarası"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Cep telefonu numarası"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Kurumsal numara"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Kurumsal numara"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Kurumsal numara"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Doğum tarihi"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Doğum tarihi"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Doğum tarihi"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Yerel kimlik numarası"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Yerel kimlik numarası"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Yerel kimlik numarası"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Kamu yetkilileri tarafından belirlenmiş kimlik numarası"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Kamu yetkilileri tarafından belirlenmiş kimlik numarası"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Kamu yetkilileri tarafından belirlenmiş kimlik numarası"
+
+# English string: Organization name
+msgid "o"
+msgstr "Organizasyon adı"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Organizasyon adı"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Organizasyon adı"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Organizasyonel birim"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Organizasyonel birim"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Organizasyonel birim"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Posta kutusu"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Posta kutusu"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Posta kutusu"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Posta adresi"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Posta adresi"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Posta adresi"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Posta kodu"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Posta kodu"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Posta kodu"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Tercih edilen dil"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Tercih edilen dil"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Tercih edilen dil"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Ana kuruluş alan adı"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Ana kuruluş alan adı"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Ana kuruluş alan adı"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Ana kuruluş alan adı"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Özel bilgi elemanları"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Özel bilgi elemanları"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Özel bilgi elemanları"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Özel bilgi elemanları"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Soyadı"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Soyadı"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Soyadı"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Sokak"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Sokak"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Sokak"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Telefon numarası"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Telefon numarası"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Telefon numarası"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Başlık"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Başlık"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Başlık"
+
+# English string: User ID
+msgid "uid"
+msgstr "Kullanıcı ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "Kullanıcı ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "Kullanıcı ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Kullanıcının şifre karması"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Kullanıcının şifre karması"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Kullanıcının şifre karması"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Ortak ad"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Görüntülenen isim"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Görüntülenen isim"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Kalıcı takma adı ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Faks numarası"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Verilen isim"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Verilen isim"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Verilen isim"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Verilen isim"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Verilen isim"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Ev telefonu"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Bölge"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "Etiketlenen URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "Etiketlenen URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Posta"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Posta"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Posta"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Posta"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Posta"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Cep telefonu numarası"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Organizasyon adı"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Posta kodu"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Posta kodu"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Tercih edilen dil"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Tercih edilen dil"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Tercih edilen dil"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Tercih edilen dil"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Tercih edilen dil"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Soyadı"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Soyadı"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Soyadı"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Soyadı"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Soyadı"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Telefon numarası"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Telefon numarası"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Başlık"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Başlık"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "Kullanıcı ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "Kullanıcı ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "Kullanıcı ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "Kullanıcı ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "Kullanıcı ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/messages.po
index b2f9d463de..b882653da5 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/tr/LC_MESSAGES/messages.po
@@ -44,12 +44,6 @@ msgstr "Üstveri (metadata) yüklenmesinde hata"
 msgid "{admin:metaconv_title}"
 msgstr "Üstveri (metadata) çözümleyici"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Servise göre yetki"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG fotoğraf"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "Hata bulunmadı."
 
@@ -123,9 +117,6 @@ msgstr ""
 msgid "{logout:default_link_text}"
 msgstr "SimpleSAMLphp kurulum sayfasına geri dön"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federasyon Kimlik Sağlayıcı (Uzak sistemde sunulan)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp hatası"
 
@@ -144,18 +135,12 @@ msgstr ""
 "servisin yöneticisi sizseniz, üstveri (metadata) ayarlarınızın düzgün bir"
 " şekilde yapıldığından emin olun."
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Kişinin bağlı olduğu kuruluşun belirgin adı"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Hatalı istek alındı"
 
 msgid "{status:sessionsize}"
 msgstr "Oturum büyüklüğü: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Posta adresi"
-
 msgid "{logout:title}"
 msgstr "Çıktınız"
 
@@ -174,30 +159,15 @@ msgstr "Beklemede"
 msgid "{admin:cfg_check_header}"
 msgstr "Konfigürasyon kontrolü"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Bağlı olunan kuruluşla bağlantı"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Soyadı"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "Mesaj gönder"
 
 msgid "{status:logout}"
 msgstr "Çıkış"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Kuruluş adı"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Telefon numarası"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Tanıma servisine gönderilen parametreler tanımlananlara göre değildi."
 
-msgid "{attributes:attribute_mail}"
-msgstr "Posta"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "SAML isteği oluşturmaya çalışırken bir hata meydana geldi"
 
@@ -207,9 +177,6 @@ msgstr "İsteğe bağlı alanlar"
 msgid "{logout:return}"
 msgstr "Servise geri dön"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Görüntülenen isim"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "<a href=\"%METAURL%\">Üstveri xml'ini bu bağlantıdan alabilirsiniz</a>:"
 
@@ -221,9 +188,6 @@ msgstr ""
 "\"Debug\" modunu global SimpleSAMLphp konfigürasyon dosyasında "
 "<tt>config/config.php</tt> kapatabilirsiniz."
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Ev posta adresi"
-
 msgid "{disco:select}"
 msgstr "Seç"
 
@@ -250,9 +214,6 @@ msgstr ""
 msgid "{logout:logout_all_question}"
 msgstr "Yukarıdaki tüm servislerden çıkmak istiyor musunuz?"
 
-msgid "{attributes:attribute_title}"
-msgstr "Başlık"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "Giriş yok"
 
@@ -264,9 +225,6 @@ msgstr ""
 msgid "{errors:title_NORELAYSTATE}"
 msgstr "RelayState verilmemiş."
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Kamu yetkilileri tarafından belirlenmiş kimlik numarası"
-
 msgid "{login:password}"
 msgstr "Şifre"
 
@@ -293,21 +251,12 @@ msgstr "Çıkış İsteğini işlerken hata oluştu"
 msgid "{admin:metaover_errorentry}"
 msgstr "Üstveri (metadata) bilgisinde hata var"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Bağlantı"
-
-msgid "{attributes:attribute_givenname}"
-msgstr "Verilen isim"
-
 msgid "{login:contact_info}"
 msgstr "İletişim bilgileri:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Beklenmeyen durum"
 
-msgid "{status:validfor}"
-msgstr "Oturumunuz, şu andan itibaren %SECONDS% saniyeliğine geçerlidir."
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP Demo Örneği"
 
@@ -335,39 +284,21 @@ msgstr "Gerekli alanlar"
 msgid "{admin:cfg_check_select_file}"
 msgstr "Kontrol edilecek konfigürasyon dosyasını seç:"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Kurumsal websayfası"
-
 msgid "{logout:loggedoutfrom}"
 msgstr "%SP%'den başarıyla çıktınız."
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federasyon Servis Sağlayıcı (Bu sistemde sunulan)"
-
 msgid "{errors:errorreport_text}"
 msgstr "Hata raporu yöneticilere gönderildi"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Doğum tarihi"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Çıkış İsteğini işlemeye çalışırken bir hata oluştu"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Kalıcı takma adı ID"
-
 msgid "{logout:success}"
 msgstr "Yukarıda listelenen tüm servislerden başarıyla çıktınız."
 
 msgid "{admin:cfg_check_notices}"
 msgstr "Notlar"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Öncelikli bağlantı"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "Posta kodu"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "CAS sunucusu ile iletişim kurarken hata"
 
@@ -380,9 +311,6 @@ msgstr "SAML 2.0 SP Üstveri (Metadata)"
 msgid "{admin:metaconv_converted}"
 msgstr "Dönüştürülmüş üstveri (metadata)"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Ortak ad"
-
 msgid "{logout:completed}"
 msgstr "Tamamlandı"
 
@@ -391,18 +319,9 @@ msgstr ""
 "Yapılandırmadaki (auth.adminpassword) şifrenin öntanımlı değeri "
 "değişmedi. Lütfen yapılandırma dosyasını düzeltin."
 
-msgid "{attributes:attribute_ou}"
-msgstr "Organizasyonel birim"
-
 msgid "{general:service_provider}"
 msgstr "Servis Sağlayıcı"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "Ev telefonu"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Alan bileşeni"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Bu sayfaya yapılan istekte bir hata var. Nedeni %REASON% idi."
 
@@ -421,23 +340,14 @@ msgstr "Kullanıcı adı ve şifrenizi giriniz"
 msgid "{errors:report_explain}"
 msgstr "Bu hatanın neden oluştuğunu açıklayın..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "Yönetici"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAML cevabı verilmemiş"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Takma ad"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr ""
 "TekliÇıkışServis (SingleLogoutService) arayüzüne giriş yaptınız, ancak "
 "bir SAML Çıkışİsteği ya da ÇıkışCevabı sağlamadınız."
 
-msgid "{attributes:attribute_street}"
-msgstr "Sokak"
-
 msgid "{login:organization}"
 msgstr "Organizasyon"
 
@@ -474,9 +384,6 @@ msgstr "Organizasyon seçiniz"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "Config dosyasındaki gereksiz tercihler"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "Etiketlenen URI"
-
 msgid "{errors:report_email}"
 msgstr "E-posta adresi:"
 
@@ -500,9 +407,6 @@ msgstr ""
 "dolmadığını, oturumunuzun ne kadar sürdüğünü ve oturumunuza ait tüm "
 "bilgileri buradan görebilirsiniz."
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Ana kuruluş alan adı"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "Sayfa bulunamadı"
 
@@ -523,30 +427,18 @@ msgstr ""
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Geçerli olmayan sertifika"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Kişinin bağlı olduğu birimin belirgin adı"
-
 msgid "{general:remember}"
 msgstr "Hatırla"
 
 msgid "{disco:selectidp}"
 msgstr "Kimlik sağlayıcınızı seçiniz."
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Posta kutusu"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
-
 msgid "{login:help_desk_email}"
 msgstr "Yardım'a e-posta gönderin"
 
 msgid "{login:help_desk_link}"
 msgstr "Yardım anasayfası"
 
-msgid "{attributes:attribute_uid}"
-msgstr "Kullanıcı ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS Hatası"
 
@@ -567,9 +459,6 @@ msgstr "Seçimimi hatırla"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 Servis Sağlayıcı (Bu sistemde sunulan)"
 
-msgid "{attributes:attribute_l}"
-msgstr "Bölge"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr ""
 "Eğer diğer tarafta bir SimpleSAMLphp elemanını kullanıyorsanız, düz "
@@ -602,9 +491,6 @@ msgstr "Shib 1.3 Servis Sağlayıcı (Bu sistemde sunulan)"
 msgid "{admin:debug_sending_message_msg_title}"
 msgstr "Mesaj"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Faks numarası"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP hatası"
 
@@ -617,15 +503,9 @@ msgstr ""
 " ndeniyle oluşmuş olabilir. Bu oturum açma servisinin yöneticisi ile "
 "iletişim kurun ve yukarıdaki hata mesajını gönderin."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Cep telefonu numarası"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 Kimlik Sağlayıcı (Bu sistemde sunulan)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Tercih edilen dil"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "Geçerli bir sertifika sağlamadınız. "
 
@@ -640,15 +520,6 @@ msgstr "Şu isteğe bağlı alanlar bulunamadı"
 msgid "{logout:logout_only}"
 msgstr "Hayır, sadece %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "Organizasyon adı"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Kişinin öncelikli Kurumsal Birimi'nin belirgin adı"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Yerel kimlik numarası"
-
 msgid "{login:next}"
 msgstr "Sıradaki"
 
@@ -661,9 +532,6 @@ msgstr "Lütfen, kimlik doğrulaması yapacağınız kimlik sağlayıcıyı seç
 msgid "{errors:descr_NOTFOUNDREASON}"
 msgstr "Verilen sayfa bulunamadı. Nedeni %REASON% idi. URL %URL% idi."
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Kullanıcının şifre karması"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "Çıkış bilgisi kaybedildi"
 
@@ -679,24 +547,12 @@ msgstr ""
 "dokümanını güvenilir bir federasyon kurmak için güvenilir paydaşlara "
 "gönderebilirsiniz."
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Özel bilgi elemanları"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP Demo Örneği"
-
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Organizasyonu'un resmi adı"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth demo"
 
 msgid "{admin:metaconv_parse}"
 msgstr "Çözümle"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Kurumsal numara"
-
 msgid "Person's principal name at home organization"
 msgstr "Kişinin bağlı olduğu kuruluştaki asıl adı"
 
@@ -1006,8 +862,8 @@ msgstr ""
 "iletişim kurun ve yukarıdaki hata mesajını gönderin."
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "Oturumunuz, şu andan itibaren %SECONDS% saniyeliğine geçerlidir."
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "Oturumunuz, şu andan itibaren %remaining% saniyeliğine geçerlidir."
 
 msgid "Domain component (DC)"
 msgstr "Alan bileşeni"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/ur/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/ur/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..94a74323c9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/ur/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "cn"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "urn:mace:dir:attribute-def:cn"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "urn:oid:2.5.4.3"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "dc"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "urn:mace:dir:attribute-def:dc"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "urn:oid:0.9.2342.19200300.100.1.25"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "displayName"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "urn:mace:dir:attribute-def:displayName"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "urn:oid:2.16.840.1.113730.3.1.241"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "urn:mace:dir:attribute-def:eduOrgLegalName"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "eduPersonAffiliation"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonAffiliation"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "urn:mace:dir:attribute-def:eduPersonAssurance"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "eduPersonEntitlement"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "urn:mace:dir:attribute-def:eduPersonEntitlement"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "urn:mace:dir:attribute-def:eduPersonNickname"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgDN"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "eduPersonPrincipalName"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "eduPersonScopedAffiliation"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "urn:mace:dir:attribute-def:eduPersonTargetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "urn:oid:2.5.4.23"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "givenName"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "urn:mace:dir:attribute-def:givenName"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "urn:oid:2.5.4.42"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "homePhone"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "urn:mace:dir:attribute-def:homePhone"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "urn:oid:0.9.2342.19200300.100.1.20"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "urn:mace:dir:attribute-def:homePostalAddress"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "urn:oid:0.9.2342.19200300.100.1.39"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "urn:mace:dir:attribute-def:jpegPhoto"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "urn:oid:0.9.2342.19200300.100.1.60"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "l"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "urn:mace:dir:attribute-def:l"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "urn:oid:2.5.4.7"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "labeledURI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "urn:mace:dir:attribute-def:labeledURI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "urn:oid:1.3.6.1.4.1.250.1.57"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "mail"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "urn:mace:dir:attribute-def:mail"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "urn:oid:0.9.2342.19200300.100.1.3"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "manager"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "urn:mace:dir:attribute-def:manager"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "urn:oid:0.9.2342.19200300.100.1.10"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "mobile"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "urn:mace:dir:attribute-def:mobile"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "urn:oid:0.9.2342.19200300.100.1.41"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "urn:mace:dir:attribute-def:norEduOrgNIN"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonLIN"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "norEduPersonNIN"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "urn:mace:dir:attribute-def:norEduPersonNIN"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+
+# English string: Organization name
+msgid "o"
+msgstr "o"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "urn:mace:dir:attribute-def:o"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "urn:oid:2.5.4.10"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "urn:oid:2.5.4.11"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "ou"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "urn:mace:dir:attribute-def:ou"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "postOfficeBox"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "urn:mace:dir:attribute-def:postOfficeBox"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "urn:oid:2.5.4.18"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "postalAddress"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "urn:mace:dir:attribute-def:postalAddress"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "urn:oid:2.5.4.16"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "postalCode"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "urn:mace:dir:attribute-def:postalCode"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "urn:oid:2.5.4.17"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "preferredLanguage"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "urn:mace:dir:attribute-def:preferredLanguage"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "urn:oid:2.16.840.1.113730.3.1.39"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "urn:schac:attribute-def:schacHomeOrganization"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "urn:schac:attribute-def:schacUserPrivateAttribute"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "sn"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "urn:mace:dir:attribute-def:sn"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "urn:oid:2.5.4.4"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "street"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "urn:mace:dir:attribute-def:street"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "urn:oid:2.5.4.9"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "urn:mace:dir:attribute-def:telephoneNumber"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "urn:oid:2.5.4.20"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "title"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "urn:mace:dir:attribute-def:title"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "urn:oid:2.5.4.12"
+
+# English string: User ID
+msgid "uid"
+msgstr "uid"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "urn:mace:dir:attribute-def:uid"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "urn:oid:0.9.2342.19200300.100.1.1"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "userPassword"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "urn:mace:dir:attribute-def:userPassword"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "urn:oid:2.5.4.35"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "facebook_cn"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "facebook.name"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "http://axschema.org/namePerson/friendly"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "openid.sreg.nickname"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "http://axschema.org/namePerson"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "openid.sreg.fullname"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "twitter.name"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "windowslive.displayName"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "facebook_user"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "linkedin_user"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "twitter_screen_n_realm"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "windowslive_user"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "windowslive.userPrincipalName"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "facebook_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "linkedin_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "twitter_targetedID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "windowslive_targetedID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "http://axschema.org/contact/phone/fax"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "facebook.first_name"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "linkedin.firstName"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "http://axschema.org/namePerson/first"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "windowslive.FirstName"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "windowslive.givenName"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "http://axschema.org/contact/phone/home"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "windowslive.Location"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "facebook.profile_url"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "twitter.url"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "facebook.email"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "http://axschema.org/contact/email"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "openid.sreg.email"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "windowslive_mail"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "windowslive.mail"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "http://axschema.org/contact/phone/cell"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "http://axschema.org/company/name"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "http://axschema.org/contact/postalCode/home"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "openid.sreg.postcode"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "facebook.locale"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "http://axschema.org/pref/language"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "openid.sreg.language"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "twitter.lang"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "windowslive.preferredLanguage"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "facebook.last_name"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "linkedin.lastName"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "http://axschema.org/namePerson/last"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "windowslive.LastName"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "windowslive.surname"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "http://axschema.org/contact/phone/default"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "http://axschema.org/contact/phone/business"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "linkedin.headline"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "http://axschema.org/company/title"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "facebook.username"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "linkedin.id"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "twitter.screen_name"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "windowslive_uid"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "windowslive.id"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..cce13b4203
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: xh\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Igama eliqhelekileyo"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Igama eliqhelekileyo"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Igama eliqhelekileyo"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Ikhomponenti yedomeyin (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Ikhomponenti yedomeyin (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Ikhomponenti yedomeyin (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Igama lomboniso"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Ikhasi lekhaya Lenkampani"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Ikhasi lekhaya Lenkampani"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Ikhasi lekhaya Lenkampani"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Igama elisemthethweni lenkampani"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Igama elisemthethweni lenkampani"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Igama elisemthethweni lenkampani"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Indima"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Indima"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Indima"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Iprofayile yokuqinisekisa isazisi"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Iprofayile yokuqinisekisa isazisi"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Iprofayile yokuqinisekisa isazisi"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Ilungelo ngokuphathelele inkonzo"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Ilungelo ngokuphathelele inkonzo"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Ilungelo ngokuphathelele inkonzo"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Isiteketiso"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Isiteketiso"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Isiteketiso"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Igama elahlukileyo (DN) lenkampani yekhaya yomntu"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Igama elahlukileyo (DN) lenkampani yekhaya yomntu"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Igama elahlukileyo (DN) lenkampani yekhaya yomntu"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Igama elahlukileyo (DN) leyunithi yenkampani yekhaya yomntu"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Igama elahlukileyo (DN) leyunithi yenkampani yekhaya yomntu"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Igama elahlukileyo (DN) leyunithi yenkampani yekhaya yomntu"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Indima eyintloko"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Indima eyintloko"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Indima eyintloko"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Igama elahlukileyo (DN) leYunithi Yenkampani yokuqala yomntu"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Igama elahlukileyo (DN) leYunithi Yenkampani yokuqala yomntu"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Igama elahlukileyo (DN) leYunithi Yenkampani yokuqala yomntu"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Indima kumbutho wasekhaya"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Indima kumbutho wasekhaya"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Indima kumbutho wasekhaya"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "I-ID yomntu enganakuphinda yabelwe, ebhalwe ngegama lobuxoki eqhubekayo kwinkampani yekhaya"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "I-ID yomntu enganakuphinda yabelwe, ebhalwe ngegama lobuxoki eqhubekayo kwinkampani yekhaya"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "I-ID yomntu enganakuphinda yabelwe, ebhalwe ngegama lobuxoki eqhubekayo kwinkampani yekhaya"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Inombolo yefeksi"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Inombolo yefeksi"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Inombolo yefeksi"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Igama elinikiweyo"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Igama elinikiweyo"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Igama elinikiweyo"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Umnxeba wasekhaya"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Umnxeba wasekhaya"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Umnxeba wasekhaya"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Idilesi yeposi yasekhaya"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Idilesi yeposi yasekhaya"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Idilesi yeposi yasekhaya"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Ifoto ye-JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Ifoto ye-JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Ifoto ye-JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Indawo"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Indawo"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Indawo"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "I-URI eneleyibheli"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "I-URI eneleyibheli"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "I-URI eneleyibheli"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Iposi"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Iposi"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Iposi"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Umanejala"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Umanejala"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Umanejala"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Imobhayili"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Imobhayili"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Imobhayili"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Inombolo yenkampani"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Inombolo yenkampani"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Inombolo yenkampani"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Umhla wokuzalwa"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Umhla wokuzalwa"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Umhla wokuzalwa"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Inombolo yesazisi yasekuhlaleni"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Inombolo yesazisi yasekuhlaleni"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Inombolo yesazisi yasekuhlaleni"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Inombolo yesazisi eyabelwe ngamagunya oluntu"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Inombolo yesazisi eyabelwe ngamagunya oluntu"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Inombolo yesazisi eyabelwe ngamagunya oluntu"
+
+# English string: Organization name
+msgid "o"
+msgstr "Igama lombutho"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Igama lombutho"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Igama lombutho"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Iyunithi yombutho"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Iyunithi yombutho"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Iyunithi yombutho"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Ibhokisi yaseposini"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Ibhokisi yaseposini"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Ibhokisi yaseposini"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Idilesi yeposi"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Idilesi yeposi"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Idilesi yeposi"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Ikhowudi yeposi"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Ikhowudi yeposi"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Ikhowudi yeposi"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Ulwimi olukhethayo"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Igama ledomeyini yombutho wekhaya"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Igama ledomeyini yombutho wekhaya"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Igama ledomeyini yombutho wekhaya"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Igama ledomeyini yombutho wekhaya"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Iimpawu zenkcazelo yangasese"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Iimpawu zenkcazelo yangasese"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Iimpawu zenkcazelo yangasese"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Iimpawu zenkcazelo yangasese"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Ifani"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Ifani"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Ifani"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Istrato"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Istrato"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Istrato"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Inombolo yomnxeba"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Inombolo yomnxeba"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Inombolo yomnxeba"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Isibizo"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Isibizo"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Isibizo"
+
+# English string: User ID
+msgid "uid"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "I-ID yomsebenzisi"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Iheshi yephaswedi yomsebenzisi"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Iheshi yephaswedi yomsebenzisi"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Iheshi yephaswedi yomsebenzisi"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Igama eliqhelekileyo"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Igama lomboniso"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Igama lomboniso"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Inombolo yefeksi"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Igama elinikiweyo"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Igama elinikiweyo"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Igama elinikiweyo"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Igama elinikiweyo"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Igama elinikiweyo"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Umnxeba wasekhaya"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Indawo"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "I-URI eneleyibheli"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "I-URI eneleyibheli"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Iposi"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Iposi"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Iposi"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Iposi"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Iposi"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Imobhayili"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Igama lombutho"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Ikhowudi yeposi"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Ikhowudi yeposi"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Ulwimi olukhethayo"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Ifani"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Ifani"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Ifani"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Ifani"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Ifani"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Inombolo yomnxeba"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Inombolo yomnxeba"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Isibizo"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Isibizo"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "I-ID yomsebenzisi"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/messages.po
index 46368da9b2..eb159b6de2 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/xh/LC_MESSAGES/messages.po
@@ -35,33 +35,15 @@ msgstr ""
 msgid "{errors:descr_NOSTATE}"
 msgstr "Inkcazelo yobume ilahlekile, yaye akukho ndlela yokuqalisa isicelo"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Idilesi yeposi"
-
 msgid "{errors:title_SSOPARAMS}"
 msgstr "Akukho sicelo se-SAML sinikelweyo"
 
-msgid "{attributes:attribute_ou}"
-msgstr "Iyunithi yombutho"
-
-msgid "{status:header_wsfed}"
-msgstr "Umzekelo weDemo we-WS-Fed SP"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Impazamo xa kunxibelelwana neseva ye-CAS."
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Inombolo yenkampani"
-
-msgid "{attributes:attribute_homephone}"
-msgstr "Umnxeba wasekhaya"
-
 msgid "{errors:title_SLOSERVICEPARAMS}"
 msgstr "Akukho myalezo we-SAML unikelweyo"
 
-msgid "{attributes:attribute_uid}"
-msgstr "I-ID yomsebenzisi"
-
 msgid "{login:error_nopassword}"
 msgstr ""
 "Uthumele into kwikhasi lokungena, kodwa ngesizathu esithile iphaswedi "
@@ -77,18 +59,12 @@ msgstr ""
 msgid "{status:authData_header}"
 msgstr "Ungqinisiso lweNgcombolo"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Inombolo yefeksi"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Kufunyenwe isicelo esibi"
 
 msgid "{login:login_button}"
 msgstr "Ngena"
 
-msgid "{status:validfor}"
-msgstr "Iseshoni yakho iza kusebenza kangangemizuzu e-%SECONDS% ukususela ngoku."
-
 msgid "{status:header_shib}"
 msgstr "Idemo ye-Shibboleth"
 
@@ -98,9 +74,6 @@ msgstr "[Ukhetho olukhethwayo]"
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Kukho impazamo kwisicelo kweli khasi. Isizathu sesi: %REASON%"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Idilesi yeposi yasekhaya"
-
 msgid "{login:help_header}"
 msgstr "Ncedani! Andiyikhumbuli iphaswedi yam."
 
@@ -113,9 +86,6 @@ msgstr "Impazamo ilayisha imetadata"
 msgid "{errors:title_LOGOUTREQUEST}"
 msgstr "Impazamo iprosesa iSicelo Sokuphuma"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Iimpawu zenkcazelo yangasese"
-
 msgid "{logout:hold}"
 msgstr "Ibanjiwe"
 
@@ -134,9 +104,6 @@ msgstr "Kwenzeke impazamo xa kuzanywa ukuyilwa isicelo se-SAML."
 msgid "{login:help_desk_link}"
 msgstr "Ikhasi lekhaya ledesika yoncedo"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Igama eliqhelekileyo"
-
 msgid "{errors:debuginfo_header}"
 msgstr "Inkcazelo yokulungisa"
 
@@ -167,9 +134,6 @@ msgstr "Khumbula ukhetho lwam"
 msgid "{general:remember}"
 msgstr "Khumbula"
 
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Igama elingundoqo lomntu kwinkampani yekhaya"
-
 msgid "{errors:title_PROCESSASSERTION}"
 msgstr "Impazamo iprosesa impendulo esuka kuMboneleli Wesazisi"
 
@@ -201,9 +165,6 @@ msgstr "Igqityiwe"
 msgid "{status:subject_header}"
 msgstr "Umbandela we-SAML"
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Igama ledomeyini yombutho wekhaya"
-
 msgid "{errors:descr_LOGOUTINFOLOST}"
 msgstr ""
 "Inkcazelo malunga nomsebenzi wokuphuma wangoku ilahlekile. Ufanele "
@@ -214,9 +175,6 @@ msgstr ""
 "ulithathe, ngoko le mpazamo isenokubonisa enye impazamo ngolungiselelo. "
 "Ukuba ingxaki iyaqhubeka, qhagamshela umboneleli wenkonzo wakho."
 
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Inombolo yesazisi yasekuhlaleni"
-
 msgid "{status:subject_notset}"
 msgstr "ayikasetwa"
 
@@ -226,15 +184,9 @@ msgstr "Impazamo efunyenwe kuMboneleli Wesazisi"
 msgid "{disco:selectidp}"
 msgstr "Khetha umboneleli wesazisi wakho"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Igama elahlukileyo (DN) lenkampani yekhaya yomntu"
-
 msgid "{errors:title_NOTSET}"
 msgstr "Iphaswedi ayisetwanga"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Indima"
-
 msgid "{login:user_pass_text}"
 msgstr ""
 "Inkonzo icele ukuba uzingqinisise. Nceda ungenise igama lomsebenzisi "
@@ -246,9 +198,6 @@ msgstr "Hayi, kuphela %SP%"
 msgid "{login:username}"
 msgstr "Igama lomsebenzisi"
 
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Igama elahlukileyo (DN) leYunithi Yenkampani yokuqala yomntu"
-
 msgid "{errors:error_header}"
 msgstr "Impazamo ye-SimpleSAMLphp"
 
@@ -278,24 +227,15 @@ msgstr ""
 "Lo Mboneleli Wesazisi ufumene Isicelo Songqinisiso esisuka kuMboneleli "
 "Wenkonzo, kodwa kwenzeke impazamo xa kuzanywa ukuprosesa isicelo."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Imobhayili"
-
 msgid "{login:remember_me}"
 msgstr "Ndikhumbule"
 
 msgid "{disco:previous_auth}"
 msgstr "Kwixesha elidlulileyo ukhethe ukungqinisisa ngo-"
 
-msgid "{attributes:attribute_l}"
-msgstr "Indawo"
-
 msgid "{general:yes_continue}"
 msgstr "Ewe, qhubeka"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Igama lombutho"
-
 msgid "{login:remember_username}"
 msgstr "Khumbula igama lomsebenzisi lam"
 
@@ -305,9 +245,6 @@ msgstr "Akukho mpendulo ye-SAML inikelweyo"
 msgid "{login:user_pass_header}"
 msgstr "Ngenisa igama lomsebenzisi nephaswedi yakho"
 
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Ifoto ye-JPEG"
-
 msgid "{logout:logging_out_from}"
 msgstr "Iphuma kwezi nkonzo zilandelayo:"
 
@@ -328,29 +265,17 @@ msgstr ""
 "Inkcazelo yokulungisa engezantsi isenokuba ibangela umdla kumlawuli / "
 "idesika yoncedo:"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Igama elingelolakhe elingatshintshiyo elingqale kwinkonzo"
-
 msgid "{errors:descr_NOTFOUNDREASON}"
 msgstr ""
 "Ikhasi elinikelweyo alifunyenwanga. Isizathu sesi: %REASON%  I-URL ngu: "
 "%URL%"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Umhla wokuzalwa"
-
 msgid "{logout:success}"
 msgstr "Uphume ngokuyimpumelelo kuzo zonke iinkonzo ezidweliswe ngasentla."
 
 msgid "{login:error_wrongpassword}"
 msgstr "Igama lomsebenzisi okanye iphaswedi engachanekanga."
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Indima eyintloko"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Ifani"
-
 msgid "{login:error_header}"
 msgstr "Impazamo"
 
@@ -363,9 +288,6 @@ msgstr "Ayikwazanga ukuyila impendulo yongqinisiso"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "Ungqinisiso lusilele: isatifikerthi esithunyelwe yibhrawuza yakho asaziwa"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Inombolo yesazisi eyabelwe ngamagunya oluntu"
-
 msgid "{errors:descr_RESPONSESTATUSNOSUCCESS}"
 msgstr ""
 "Umboneleli Wesazisi uphendule ngempazamo. (Ikhowudi yobume kwiMpendulo "
@@ -374,18 +296,12 @@ msgstr ""
 msgid "{general:service_provider}"
 msgstr "Umboneleli Wenkonzo"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Isiteketiso"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Iipharamitha ezithunyelwe kwinkonzo yofumaniso azihambelani neenkcukacha."
 
 msgid "{status:header_saml20_sp}"
 msgstr "Umzekelo weDemo we-SAML 2.0 SP"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Igama elahlukileyo (DN) leyunithi yenkampani yekhaya yomntu"
-
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
 "Ungqinisiso lusilele: isatifikethi esithunyelwe yibhrawuza yakho "
@@ -394,9 +310,6 @@ msgstr ""
 msgid "{login:change_home_org_button}"
 msgstr "Khetha umbutho wekhaya"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Igama elisemthethweni lenkampani"
-
 msgid "{status:logout}"
 msgstr "Phuma"
 
@@ -405,18 +318,9 @@ msgstr ""
 "Iphaswedi ekulungiselelo (auth.adminpassword) ayitshintshwanga ukusuka "
 "kwixabiso lesiseko. Nceda uhlele ifayile yolungiselelo."
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Igama elinikiweyo"
-
 msgid "{errors:title_AUTHSOURCEERROR}"
 msgstr "Impazamo yomthombo wongqinisiso"
 
-msgid "{attributes:attribute_manager}"
-msgstr "Umanejala"
-
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Ilungelo ngokuphathelele inkonzo"
-
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Isinxaxhi esingasingathwanga"
 
@@ -426,12 +330,6 @@ msgstr "Chaza iimpazamo"
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Kwenzeke impazamo ngoxa kuproseswa isiCelo Sokuphuma."
 
-msgid "{attributes:attribute_postalcode}"
-msgstr "Ikhowudi yeposi"
-
-msgid "{attributes:attribute_street}"
-msgstr "Istrato"
-
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Isatifikethi esingasebenziyo"
 
@@ -458,18 +356,9 @@ msgstr ""
 "yolandelelo eyenza kube lula ukufumana iseshoni yakho kwiincwadi "
 "ezifumaneka kumlawuli wesistim:"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Igama lomboniso"
-
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Ikhasi lekhaya Lenkampani"
-
 msgid "{login:change_home_org_title}"
 msgstr "Tshintsha umbutho wakho wekhaya"
 
-msgid "{attributes:attribute_edupersonorcid}"
-msgstr "Isazisi se-ORCID"
-
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Isatifikethi esingaziwayo"
 
@@ -482,12 +371,6 @@ msgstr "Akukho satifikethi"
 msgid "{errors:descr_UNHANDLEDEXCEPTION}"
 msgstr "Isinxaxhi esingasingathwanga silahliwe."
 
-msgid "{attributes:attribute_title}"
-msgstr "Isibizo"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Ikhomponenti yedomeyin (DC)"
-
 msgid "{errors:title_CREATEREQUEST}"
 msgstr "Impazamo nokuyila isicelo"
 
@@ -503,12 +386,6 @@ msgstr "Asiyamkelanga impendulo ethunyelwe ukusuka kuMboneleli Wesazisi."
 msgid "{disco:selectidp_full}"
 msgstr "Nceda ukhethe umboneleli wesazisi apho ufuna ukungqinisisa:"
 
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Iprofayile yokuqinisekisa isazisi"
-
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Ubulungu beqela"
-
 msgid "{logout:failedsps}"
 msgstr ""
 "Awukwazi ukuphuma kwinkonzo enye okanye ezingakumbi. Ukuqinisekisa zonke "
@@ -528,9 +405,6 @@ msgstr "Buyela emva kwikhasi lofakelo le-SimpleSAMLphp"
 msgid "{errors:descr_CONFIG}"
 msgstr "I-SimpleSAMLphp ibonakala ingalungiselelwanga kakuhle."
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Ulwimi olukhethayo"
-
 msgid "{errors:title_DISCOPARAMS}"
 msgstr "Isicelo esibi kwinkonzo yofumaniso"
 
@@ -558,9 +432,6 @@ msgstr "Kananjalo ungene kwezi nkonzo:"
 msgid "{logout:logout_all_question}"
 msgstr "Ngaba ufuna ukuphuma kuzo zonke iinkonzo ezingasentla?"
 
-msgid "{attributes:attribute_o}"
-msgstr "Igama lombutho"
-
 msgid "{logout:loggedoutfrom}"
 msgstr "Ngoku uphume ngokuyimpumelelo kwi-%SP%."
 
@@ -593,9 +464,6 @@ msgstr ""
 "unikrele umyalezo we-SAML ArtifactResolve. Nceda uqaphele ukuba le ndawo "
 "yokuphela ayilungiselelwanga ukuba ifikelelwe ngokuthe ngqo."
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Indima kumbutho wasekhaya"
-
 msgid "{errors:title_MEMCACHEDOWN}"
 msgstr "Ayikwazi ukubuyisela ingcombolo yeseshoni"
 
@@ -626,14 +494,6 @@ msgstr "Uphumile"
 msgid "{errors:report_explain}"
 msgstr "Cacisa ukuba wenze ntoni xa bekusenzeka le mpazamo..."
 
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Inombolo yomnxeba"
-
-msgid "{attributes:attribute_edupersonuniqueid}"
-msgstr ""
-"I-ID yomntu enganakuphinda yabelwe, ebhalwe ngegama lobuxoki eqhubekayo "
-"kwinkampani yekhaya"
-
 msgid "{logout:failed}"
 msgstr "Ukuphuma kusilele"
 
@@ -656,29 +516,14 @@ msgstr ""
 "nomlawuli wale nkonzo yokungena, uze umthumele umyalezo wempazamo "
 "ongentla."
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Iheshi yephaswedi yomsebenzisi"
-
 msgid "{errors:report_text}"
 msgstr ""
 "Unokhetho lokuthumela idilesi yeimeyile yakho, ukuze abalawuli bakwazi "
 "ukukuqhagamshela ukuba banemibuzo engakumbi malunga nomba wakho:"
 
-msgid "{attributes:attribute_mail}"
-msgstr "Iposi"
-
 msgid "{logout:progress}"
 msgstr "Iyaphuma..."
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "I-URI eneleyibheli"
-
 msgid "{login:select_home_org}"
 msgstr "Khetha umbutho wakho wekhaya"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Igama elisemthethweni"
-
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Ibhokisi yaseposini"
-
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..638bc43998
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh-tw\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "常用名字"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "常用名字"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "常用名字"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "網域 Domain component (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "網域 Domain component (DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "網域 Domain component (DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "顯示名稱"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "組織首頁"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "組織首頁"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "組織首頁"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "組織全銜"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "組織全銜"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "組織全銜"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "連絡方式"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "連絡方式"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "連絡方式"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "身分驗證文件"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "身分驗證文件"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "身分驗證文件"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "關於服務的權利"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "關於服務的權利"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "關於服務的權利"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "暱稱"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "暱稱"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "暱稱"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "個人所屬組織 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "個人所屬組織 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "個人所屬組織 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "個人所屬單位 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "個人所屬單位 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "個人所屬單位 Distinguished name (DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "主要連絡方式"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "主要連絡方式"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "主要連絡方式"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "個人主要組織單位 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "個人主要組織單位 Distinguished name (DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "個人主要組織單位 Distinguished name (DN)"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "所屬單位組織之聯絡方式"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "所屬單位組織之聯絡方式"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "所屬單位組織之聯絡方式"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "永久性匿名 ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "永久性匿名 ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "永久性匿名 ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "個人無法重新設置,於所屬組織的永久匿名 ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "個人無法重新設置,於所屬組織的永久匿名 ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "個人無法重新設置,於所屬組織的永久匿名 ID"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "傳真號碼"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "傳真號碼"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "傳真號碼"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "名"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "名"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "名"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "住家電話"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "住家電話"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "住家電話"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "住家地址"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "住家地址"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "住家地址"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG 圖片"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG 圖片"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG 圖片"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "區域"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "區域"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "區域"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "標籤網址"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "標籤網址"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "標籤網址"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Email"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "管理員"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "管理員"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "管理員"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "手機"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "手機"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "手機"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "組織號碼"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "組織號碼"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "組織號碼"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "生日"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "生日"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "生日"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "本地身分證字號"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "本地身分證字號"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "本地身分證字號"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "身分證字號"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "身分證字號"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "身分證字號"
+
+# English string: Organization name
+msgid "o"
+msgstr "組織名稱"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "組織名稱"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "組織名稱"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "組織單位"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "組織單位"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "組織單位"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "郵政信箱"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "郵政信箱"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "郵政信箱"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "郵寄地址"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "郵寄地址"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "郵寄地址"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "郵遞區號"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "郵遞區號"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "郵遞區號"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "喜好語言"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "喜好語言"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "喜好語言"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "所屬的組織網域名稱"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "所屬的組織網域名稱"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "所屬的組織網域名稱"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "所屬的組織網域名稱"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "個人資料"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "個人資料"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "個人資料"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "個人資料"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "姓"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "姓"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "姓"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "街"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "街"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "街"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "電話號碼"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "電話號碼"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "電話號碼"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "標題"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "標題"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "標題"
+
+# English string: User ID
+msgid "uid"
+msgstr "使用者 ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "使用者 ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "使用者 ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "使用者密碼  (hash)"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "使用者密碼  (hash)"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "使用者密碼  (hash)"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "常用名字"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "顯示名稱"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "顯示名稱"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "個人於所屬組織的永久名字"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "永久性匿名 ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "永久性匿名 ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "永久性匿名 ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "永久性匿名 ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "傳真號碼"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "名"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "名"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "名"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "名"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "名"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "住家電話"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "區域"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "標籤網址"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "標籤網址"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Email"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Email"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Email"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Email"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Email"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "手機"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "組織名稱"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "郵遞區號"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "郵遞區號"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "喜好語言"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "喜好語言"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "喜好語言"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "喜好語言"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "喜好語言"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "姓"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "姓"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "姓"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "姓"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "姓"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "電話號碼"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "電話號碼"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "標題"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "標題"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "使用者 ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "使用者 ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "使用者 ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "使用者 ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "使用者 ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/messages.po
index ae447689a0..00b2748d02 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/zh-tw/LC_MESSAGES/messages.po
@@ -48,12 +48,6 @@ msgstr "錯誤載入詮釋資料"
 msgid "{admin:metaconv_title}"
 msgstr "Metadata 解析"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "關於服務的權利"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG 圖片"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "沒有錯誤。"
 
@@ -113,9 +107,6 @@ msgstr "喔喔!如果您的帳號和密碼錯誤,系統將無法提供相關
 msgid "{logout:default_link_text}"
 msgstr "回到 SimpleSAMLphp 安裝頁面"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation 驗證提供者(遠端)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp 異常"
 
@@ -128,18 +119,12 @@ msgstr "LDAP 是使用這資料庫,當您嘗試登入時,我們必須連結
 msgid "{errors:descr_METADATA}"
 msgstr "有一些錯誤設定在您所安裝的 SimpleSAMLphp。如果您是這個服務的管理員,您可能需要確認您的詮釋資料設定是否正確地設置。"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Distinguished name (DN) 個人預設組織"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "錯誤請求"
 
 msgid "{status:sessionsize}"
 msgstr "Session 大小: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "郵寄地址"
-
 msgid "{logout:title}"
 msgstr "標題"
 
@@ -167,30 +152,15 @@ msgstr "暫停"
 msgid "{admin:cfg_check_header}"
 msgstr "設定檢查"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "家庭連絡地址"
-
-msgid "{attributes:attribute_sn}"
-msgstr "姓"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "提交訊息"
 
 msgid "{status:logout}"
 msgstr "登出"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "組織名稱"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "電話號碼"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "傳遞至搜尋服務的參數並非按照規格所訂。"
 
-msgid "{attributes:attribute_mail}"
-msgstr "郵件"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "有個錯誤發生於您嘗試建立 SAML 請求。"
 
@@ -200,9 +170,6 @@ msgstr "選擇性欄位"
 msgid "{logout:return}"
 msgstr "回到服務"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "顯示名稱"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "<a href=\"%METAURL%\"> 直接取得 Metadata XML 格式檔 </a>"
 
@@ -212,9 +179,6 @@ msgstr "Yea,登出所有服務"
 msgid "{admin:debug_disable_debug_mode}"
 msgstr "您可以 SimpleSAMLphp 的全域設定檔 <tt>config/config.php</tt> 裡關閉除錯模式。"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "住家地址"
-
 msgid "{disco:select}"
 msgstr "選擇"
 
@@ -242,9 +206,6 @@ msgstr "這個驗證提供者收到一個服務提供者的認證請求,但在
 msgid "{logout:logout_all_question}"
 msgstr "是否登出所有服務?"
 
-msgid "{attributes:attribute_title}"
-msgstr "標題"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "無法存取"
 
@@ -257,9 +218,6 @@ msgstr "沒有 RelayState"
 msgid "{errors:descr_NOSTATE}"
 msgstr "遺失狀態資訊,且無法重新請求"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "身分證字號"
-
 msgid "{login:password}"
 msgstr "密碼"
 
@@ -284,24 +242,15 @@ msgstr "登出請求為錯誤程序"
 msgid "{admin:metaover_errorentry}"
 msgstr "有錯誤存在這個 Metadata 條目"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "連絡方式"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "找不到詮釋資料"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "名"
-
 msgid "{login:contact_info}"
 msgstr "聯絡資訊:"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "不可預期的例外"
 
-msgid "{status:validfor}"
-msgstr "您的 session 從現在起還有 %SECONDS% 有效。"
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP 展示範例"
 
@@ -335,33 +284,21 @@ msgstr "選擇要檢查的設定檔:"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "認證錯誤:您的瀏覽器傳送了一個未知的憑證"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "組織首頁"
-
 msgid "{logout:logging_out_from}"
 msgstr "從下列服務登出:"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "您已成功從 %SP% 登出。"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation 服務提供者(主機)"
-
 msgid "{errors:errorreport_text}"
 msgstr "錯誤報告已送給管理員。"
 
 msgid "{status:subject_header}"
 msgstr "SAML 主題"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "生日"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "有個錯誤發生於準備進行登出請求時。"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "持續的匿名 ID"
-
 msgid "{logout:success}"
 msgstr "您已經成功登出了列表中所有服務。"
 
@@ -371,12 +308,6 @@ msgstr "備註"
 msgid "{errors:descr_USERABORTED}"
 msgstr "使用者中斷認證"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "主要連絡方式"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "郵遞區號"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "當連線至 CAS 主機時錯誤。"
 
@@ -389,27 +320,15 @@ msgstr "SAML 2.0 SP Metadata"
 msgid "{admin:metaconv_converted}"
 msgstr "已轉換之 Metadata"
 
-msgid "{attributes:attribute_cn}"
-msgstr "常用名字"
-
 msgid "{logout:completed}"
 msgstr "已完成"
 
 msgid "{errors:descr_NOTSET}"
 msgstr "設定檔裡的密碼(auth.adminpassword)還是預設值,請編輯設定檔。"
 
-msgid "{attributes:attribute_ou}"
-msgstr "組織單位"
-
 msgid "{general:service_provider}"
 msgstr "服務提供者"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "住家電話"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Domain component (DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "這裡有個錯誤於此頁面的請求。原因為:%REASON%"
 
@@ -428,21 +347,12 @@ msgstr "請輸入您的帳號及密碼"
 msgid "{errors:report_explain}"
 msgstr "解釋當你發生錯誤時所做的事情..."
 
-msgid "{attributes:attribute_manager}"
-msgstr "管理員"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "SAML 無回應"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "暱稱"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr "您連結單一簽出服務界面,但是沒有提供一個 SAML 登出請求或登出回應。"
 
-msgid "{attributes:attribute_street}"
-msgstr "街"
-
 msgid "{login:organization}"
 msgstr "組織"
 
@@ -476,9 +386,6 @@ msgstr "選擇預設組織"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "多餘設定存在於設定檔"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "標籤網址"
-
 msgid "{errors:report_email}"
 msgstr "電子郵件:"
 
@@ -491,9 +398,6 @@ msgstr "密碼未設定"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "初始化請求並未提供一個中繼狀態 RelayState 參數說明下一個步驟。"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "正式名字"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp 診斷工具"
 
@@ -502,9 +406,6 @@ msgstr ""
 "嘿,這是 SimpleSAMLphp "
 "狀態頁,在這邊您可以看到您的連線是否逾時,以及還有多久才逾時,所有屬性值(attributes)都會附加在你的連線裡(session)。"
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "預設組織 domain name"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "找不到頁面"
 
@@ -523,33 +424,18 @@ msgstr "點選 SAML 物件標題,可檢視 SAML 物件詳細資訊。"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "無效憑證"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Distinguished name (DN) 個人預設組織單位"
-
 msgid "{general:remember}"
 msgstr "記住"
 
 msgid "{disco:selectidp}"
 msgstr "選擇你的識別提供者(idp)"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "郵政信箱"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "家庭的個人主要名字"
-
 msgid "{login:help_desk_email}"
 msgstr "傳送 e-mail 尋求協助"
 
 msgid "{login:help_desk_link}"
 msgstr "協助頁面"
 
-msgid "{attributes:attribute_ismemberof}"
-msgstr "群組成員"
-
-msgid "{attributes:attribute_uid}"
-msgstr "使用者 ID"
-
 msgid "{login:remember_me}"
 msgstr "記住我"
 
@@ -571,12 +457,6 @@ msgstr "記住我的選擇"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 服務提供者(主機)"
 
-msgid "{attributes:attribute_l}"
-msgstr "位置"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "可靠驗證設定檔"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr "如果您需要於其他地方使用 SimpleSAMLphp 實體 - 請參閱 SimpleSAMLphp 平面文件格式:"
 
@@ -625,9 +505,6 @@ msgstr "ADFS 驗證提供者(主機)"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "未知的憑證"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "傳真"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP 錯誤"
 
@@ -640,18 +517,12 @@ msgstr "找不到您所要存取的頁面,該網址是:%URL%"
 msgid "{errors:howto_text}"
 msgstr "這個問題可能是因為 SimpleSAMLphp 的某些例外的行為或無效設定。連絡這個登入服務的管理員,以及傳送這些錯誤訊息。"
 
-msgid "{attributes:attribute_mobile}"
-msgstr "手機"
-
 msgid "{admin:metadata_adfs-idp}"
 msgstr "ADFS 驗證提供者 Metadata"
 
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 驗證提供者(主機)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "喜好語言"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "您提供的憑證無效。"
 
@@ -664,15 +535,6 @@ msgstr "下列資料找不到選擇性欄位"
 msgid "{logout:logout_only}"
 msgstr "不,只有 %SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "組織名稱"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Distinguished name (DN) of 個人主要組織單位"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "本地驗證碼"
-
 msgid "{login:next}"
 msgstr "下一步"
 
@@ -688,9 +550,6 @@ msgstr "找不到您所要存取的頁面,原因:%REASON%;網址:%URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "無憑證"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "使用者密碼編碼"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "登出訊息遺失"
 
@@ -703,30 +562,18 @@ msgstr "SimpleSAMLphp 出現無效設定。"
 msgid "{admin:metadata_intro}"
 msgstr "這是 SimpleSAMLphp 產生給您的 Metadata,您可以傳送此 Metadata 文件給您信任的合作夥伴來建立可信任的聯盟。"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "個人資料"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP 展示範例"
-
 msgid "{admin:metadata_cert}"
 msgstr "憑證"
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr "驗證失敗:您的瀏覽器傳送的憑證為無效或無法讀取"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "組織正式名稱"
-
 msgid "{status:header_shib}"
 msgstr "老調的展示"
 
 msgid "{admin:metaconv_parse}"
 msgstr "解析"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "組織號碼"
-
 msgid "Person's principal name at home organization"
 msgstr "家庭的個人主要名字"
 
@@ -1041,8 +888,8 @@ msgid ""
 msgstr "這個問題可能是因為 SimpleSAMLphp 的某些例外的行為或無效設定。連絡這個登入服務的管理員,以及傳送這些錯誤訊息。"
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "您的 session 從現在起還有 %SECONDS% 有效。"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "您的 session 從現在起還有 %remaining% 有效。"
 
 msgid "Domain component (DC)"
 msgstr "Domain component (DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..0dc6da9d81
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "常用名字"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "常用名字"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "常用名字"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Opened the web browser with tabs saved from the previous session.域组件(DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Opened the web browser with tabs saved from the previous session.域组件(DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Opened the web browser with tabs saved from the previous session.域组件(DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "显示名称"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "组织的首页"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "组织的首页"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "组织的首页"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "组织的法定名称"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "组织的法定名称"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "组织的法定名称"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "联络方式"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "联络方式"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "联络方式"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "可靠验证配置文件"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "可靠验证配置文件"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "可靠验证配置文件"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "关于服务的权利"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "关于服务的权利"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "关于服务的权利"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "昵称"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "昵称"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "昵称"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "人的家庭组织的分辨名称(DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "人的家庭组织的分辨名称(DN)"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "人的家庭组织的分辨名称(DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "人的家组织单位的辨别名称(DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "人的家组织单位的辨别名称(DN)"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "人的家组织单位的辨别名称(DN)"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "主要的联系方式"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "主要的联系方式"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "主要的联系方式"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "人的主要组织单位的辨别名称(DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "人的主要组织单位的辨别名称(DN)"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "人的主要组织单位的辨别名称(DN)"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "家庭联络地址"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "家庭联络地址"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "家庭联络地址"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "持续的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "持续的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "持续的匿名ID"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "urn:mace:dir:attribute-def:eduPersonUniqueId"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "传真号码"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "传真号码"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "传真号码"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "名"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "名"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "名"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "家庭电话"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "家庭电话"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "家庭电话"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "家庭邮政地址"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "家庭邮政地址"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "家庭邮政地址"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "JPEG图片"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "JPEG图片"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "JPEG图片"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "位置"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "位置"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "位置"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "标签URI"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "标签URI"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "标签URI"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "邮箱"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "邮箱"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "邮箱"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "管理员"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "管理员"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "管理员"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "手机"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "手机"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "手机"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "组织号码"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "组织号码"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "组织号码"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "生日"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "生日"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "生日"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "本地身份号码"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "本地身份号码"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "本地身份号码"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "身份证号码"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "身份证号码"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "身份证号码"
+
+# English string: Organization name
+msgid "o"
+msgstr "组织名称"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "组织名称"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "组织名称"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "组织单位"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "组织单位"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "组织单位"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "邮政信箱"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "邮政信箱"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "邮政信箱"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "邮政地址"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "邮政地址"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "邮政地址"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "邮政编码"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "邮政编码"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "邮政编码"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "首选语言"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "首选语言"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "首选语言"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "首页组织的域名"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "首页组织的域名"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "首页组织的域名"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "首页组织的域名"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "个人资料"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "个人资料"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "个人资料"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "个人资料"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "姓"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "姓"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "姓"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "街道"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "街道"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "街道"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "电话号码"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "电话号码"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "电话号码"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "标题"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "标题"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "标题"
+
+# English string: User ID
+msgid "uid"
+msgstr "用户ID"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "用户ID"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "用户ID"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "用户密码的HASH值"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "用户密码的HASH值"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "用户密码的HASH值"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "常用名字"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "显示名称"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "显示名称"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "人的主要在家中组织的名称"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "持续的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "持续的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "持续的匿名ID"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "持续的匿名ID"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "传真号码"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "名"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "名"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "名"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "名"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "名"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "家庭电话"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "位置"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "标签URI"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "标签URI"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "邮箱"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "邮箱"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "邮箱"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "邮箱"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "邮箱"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "手机"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "组织名称"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "邮政编码"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "邮政编码"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "首选语言"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "首选语言"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "首选语言"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "首选语言"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "首选语言"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "姓"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "姓"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "姓"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "姓"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "姓"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "电话号码"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "电话号码"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "标题"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "标题"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "用户ID"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "用户ID"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "用户ID"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "用户ID"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "用户ID"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/messages.po
index 029cef0413..93b138bcaf 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/zh/LC_MESSAGES/messages.po
@@ -48,12 +48,6 @@ msgstr "载入元信息时发生错误"
 msgid "{admin:metaconv_title}"
 msgstr "元信息分析器"
 
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "关于服务的权利"
-
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "JPEG图片"
-
 msgid "{admin:cfg_check_noerrors}"
 msgstr "没有发现错误"
 
@@ -111,9 +105,6 @@ msgstr "太糟糕了!-没有你的用户名和密码你将不能访问该服
 msgid "{logout:default_link_text}"
 msgstr "返回SimpleSAMLphp安装页面"
 
-msgid "{admin:metaover_group_metadata.wsfed-idp-remote}"
-msgstr "WS-Federation 身份提供者(远程)"
-
 msgid "{errors:error_header}"
 msgstr "SimpleSAMLphp错误"
 
@@ -126,18 +117,12 @@ msgstr "LDAP是一个用户数据库,当你试图登录时,我们需要连
 msgid "{errors:descr_METADATA}"
 msgstr "你的SimpleSAMLphp配置错误,如果你是该服务的管理员,那么请确认你的配置是正确的"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "人的家庭组织的分辨名称(DN)"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "收到了错误的请求"
 
 msgid "{status:sessionsize}"
 msgstr "Session 大小: %SIZE%"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "邮政地址"
-
 msgid "{logout:title}"
 msgstr "退出"
 
@@ -159,30 +144,15 @@ msgstr "保持"
 msgid "{admin:cfg_check_header}"
 msgstr "配置检查"
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "家庭联络地址"
-
-msgid "{attributes:attribute_sn}"
-msgstr "姓"
-
 msgid "{admin:debug_sending_message_send}"
 msgstr "提交信息"
 
 msgid "{status:logout}"
 msgstr "退出"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "组织名称"
-
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "电话号码"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "发送给搜寻服务的参数不符合规范"
 
-msgid "{attributes:attribute_mail}"
-msgstr "邮箱"
-
 msgid "{errors:descr_CREATEREQUEST}"
 msgstr "在创建SAML请求中发生了一个错误"
 
@@ -192,9 +162,6 @@ msgstr "选项区域"
 msgid "{logout:return}"
 msgstr "返回至服务"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "显示名称"
-
 msgid "{admin:metadata_xmlurl}"
 msgstr "你可以在 <a href=\"%METAURL%\">获取元信息XML</a>"
 
@@ -204,9 +171,6 @@ msgstr "是的,所有的服务"
 msgid "{admin:debug_disable_debug_mode}"
 msgstr "你可以关闭调试模式,在SimpleSAMLphp全局配置文件<tt>config/config.php</tt>中"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "家庭邮政地址"
-
 msgid "{disco:select}"
 msgstr "选择"
 
@@ -231,9 +195,6 @@ msgstr "该身份提供者接受到了一个来自服务提供者的认证请求
 msgid "{logout:logout_all_question}"
 msgstr "你想同时从上面的这些服务中退出吗?"
 
-msgid "{attributes:attribute_title}"
-msgstr "标题"
-
 msgid "{errors:title_NOACCESS}"
 msgstr "禁止访问"
 
@@ -246,9 +207,6 @@ msgstr "无依赖状态"
 msgid "{errors:descr_NOSTATE}"
 msgstr "状态信息丢失,并且无法重新请求"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "身份证号码"
-
 msgid "{login:password}"
 msgstr "密码"
 
@@ -273,24 +231,15 @@ msgstr "处理退出请求时发生错误"
 msgid "{admin:metaover_errorentry}"
 msgstr "该元信息实体存在错误"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "联络方式"
-
 msgid "{errors:title_METADATANOTFOUND}"
 msgstr "没有找到元信息"
 
-msgid "{attributes:attribute_givenname}"
-msgstr "名"
-
 msgid "{login:contact_info}"
 msgstr "联系方式"
 
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "未处理的异常"
 
-msgid "{status:validfor}"
-msgstr "你的会话在%SECONDS%秒内有效"
-
 msgid "{status:header_saml20_sp}"
 msgstr "SAML 2.0 SP演示案例"
 
@@ -321,30 +270,18 @@ msgstr "选择一个配置文件用于检测"
 msgid "{errors:descr_UNKNOWNCERT}"
 msgstr "认证失败:你的浏览器发送的是未知的证书"
 
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "组织的首页"
-
 msgid "{logout:logging_out_from}"
 msgstr "从下列服务中退出"
 
 msgid "{logout:loggedoutfrom}"
 msgstr "你已成功从%SP%退出"
 
-msgid "{admin:metaover_group_metadata.wsfed-sp-hosted}"
-msgstr "WS-Federation 服务提供者(本地)"
-
 msgid "{errors:errorreport_text}"
 msgstr "错误报告已经发送给管理员"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "生日"
-
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "试图处理退出请求时发生了一个错误"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "持续的匿名ID"
-
 msgid "{logout:success}"
 msgstr "你成功的退出了上面列表中的服务"
 
@@ -354,12 +291,6 @@ msgstr "通告"
 msgid "{errors:descr_USERABORTED}"
 msgstr "认证被用户中止"
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "主要的联系方式"
-
-msgid "{attributes:attribute_postalcode}"
-msgstr "邮政编码"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "在和CAS服务器的通讯中发生了错误"
 
@@ -372,27 +303,15 @@ msgstr "SAML 2.0 SP 元信息"
 msgid "{admin:metaconv_converted}"
 msgstr "转换过的元信息"
 
-msgid "{attributes:attribute_cn}"
-msgstr "常用名字"
-
 msgid "{logout:completed}"
 msgstr "完成"
 
 msgid "{errors:descr_NOTSET}"
 msgstr "你没有修改配置文件中的默认密码,请修改该密码"
 
-msgid "{attributes:attribute_ou}"
-msgstr "组织单位"
-
 msgid "{general:service_provider}"
 msgstr "服务提供者"
 
-msgid "{attributes:attribute_homephone}"
-msgstr "家庭电话"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Opened the web browser with tabs saved from the previous session.域组件(DC)"
-
 msgid "{errors:descr_BADREQUEST}"
 msgstr "请求该页的请求存在错误,原因:%REASON%"
 
@@ -411,21 +330,12 @@ msgstr "输入你的用户名和密码"
 msgid "{errors:report_explain}"
 msgstr "说明一下,你正在做什么的时候发生了这个错误"
 
-msgid "{attributes:attribute_manager}"
-msgstr "管理员"
-
 msgid "{errors:title_ACSPARAMS}"
 msgstr "没有提供SAML应答"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "昵称"
-
 msgid "{errors:descr_SLOSERVICEPARAMS}"
 msgstr "你访问了SingleLogoutService接口,但是并没有提供一个SAML的LogoutRequest或者LogoutResponse"
 
-msgid "{attributes:attribute_street}"
-msgstr "街道"
-
 msgid "{login:organization}"
 msgstr "组织"
 
@@ -459,9 +369,6 @@ msgstr "选择你的家庭组织"
 msgid "{admin:cfg_check_superfluous}"
 msgstr "配置文件中拥有过多的选项"
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "标签URI"
-
 msgid "{errors:report_email}"
 msgstr "E-mail地址"
 
@@ -474,18 +381,12 @@ msgstr "没有设置密码"
 msgid "{errors:descr_NORELAYSTATE}"
 msgstr "这个请求的发起人没有提供RelayState参数,以说明下一步处理"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "正式名称"
-
 msgid "{status:header_diagnostics}"
 msgstr "SimpleSAMLphp 诊断"
 
 msgid "{status:intro}"
 msgstr "嗨,这是SimpleSAMLphp状态页。这里你可以看到,如果您的会话超时,它持续多久,直到超时和连接到您的会话的所有属性。"
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "首页组织的域名"
-
 msgid "{errors:title_NOTFOUNDREASON}"
 msgstr "页面没有找到"
 
@@ -504,30 +405,18 @@ msgstr "想要查看SAML实体的详细情况,请点击SAML实体载入器"
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "无效的证书"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "人的家组织单位的辨别名称(DN)"
-
 msgid "{general:remember}"
 msgstr "记住"
 
 msgid "{disco:selectidp}"
 msgstr "选择你的身份提供者"
 
-msgid "{attributes:attribute_postofficebox}"
-msgstr "邮政信箱"
-
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "人的主要在家中组织的名称"
-
 msgid "{login:help_desk_email}"
 msgstr "发送Email给服务台"
 
 msgid "{login:help_desk_link}"
 msgstr "服务台的主页"
 
-msgid "{attributes:attribute_uid}"
-msgstr "用户ID"
-
 msgid "{errors:title_CASERROR}"
 msgstr "CAS错误"
 
@@ -546,12 +435,6 @@ msgstr "记住我的选择"
 msgid "{admin:metaover_group_metadata.saml20-sp-hosted}"
 msgstr "SAML 2.0 服务提供者(本地)"
 
-msgid "{attributes:attribute_l}"
-msgstr "位置"
-
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "可靠验证配置文件"
-
 msgid "{admin:metadata_simplesamlformat}"
 msgstr "如果你想在其他网站使用的SimpleSAMLphp,那么你应该使用SimpleSAMLphp扁平的文件格式"
 
@@ -594,9 +477,6 @@ msgstr "信息"
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "未知的证书"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "传真号码"
-
 msgid "{errors:title_LDAPERROR}"
 msgstr "LDAP错误"
 
@@ -609,15 +489,9 @@ msgstr "没有找到给定的URL:%URL%"
 msgid "{errors:howto_text}"
 msgstr "这个错误可能是由于一些意想不到的行为或者是SimpleSAMLphp的配置错误导致的,请联系这个登录服务器的管理员并把上面的错误消息发送给他们"
 
-msgid "{attributes:attribute_mobile}"
-msgstr "手机"
-
 msgid "{admin:metaover_group_metadata.shib13-idp-hosted}"
 msgstr "Shib 1.3 认证提供者(本地)"
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "首选语言"
-
 msgid "{errors:descr_NOTVALIDCERT}"
 msgstr "你没有提交一个有效的证书"
 
@@ -630,15 +504,6 @@ msgstr "下列必需的选项区域没有找到"
 msgid "{logout:logout_only}"
 msgstr "不,仅%SP%"
 
-msgid "{attributes:attribute_o}"
-msgstr "组织名称"
-
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "人的主要组织单位的辨别名称(DN)"
-
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "本地身份号码"
-
 msgid "{login:next}"
 msgstr "下一步"
 
@@ -654,9 +519,6 @@ msgstr "给定的页面没有找到,原因: %REASON%; URL: %URL%"
 msgid "{errors:title_NOCERT}"
 msgstr "无证书"
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "用户密码的HASH值"
-
 msgid "{errors:title_LOGOUTINFOLOST}"
 msgstr "丢失了退出消息"
 
@@ -669,30 +531,18 @@ msgstr "SimpleSAMLphp出现配置错误"
 msgid "{admin:metadata_intro}"
 msgstr "这里是SimpleSAMLphp为你生成的元信息,你应该发送这个元信息文档给你的信任的合作伙伴以建立信任的联盟"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "个人资料"
-
-msgid "{status:header_wsfed}"
-msgstr "WS-Fed SP 演示案例"
-
 msgid "{admin:metadata_cert}"
 msgstr "证书"
 
 msgid "{errors:descr_INVALIDCERT}"
 msgstr "认证失败:你的浏览器发送的证书无效或者不能读取"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "组织的法定名称"
-
 msgid "{status:header_shib}"
 msgstr "Shibboleth演示"
 
 msgid "{admin:metaconv_parse}"
 msgstr "分析器"
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "组织号码"
-
 msgid "Person's principal name at home organization"
 msgstr "人的主要在家中组织的名称"
 
@@ -994,8 +844,8 @@ msgid ""
 msgstr "这个错误可能是由于一些意想不到的行为或者是SimpleSAMLphp的配置错误导致的,请联系这个登录服务器的管理员并把上面的错误消息发送给他们"
 
 #, python-format
-msgid "Your session is valid for %SECONDS% seconds from now."
-msgstr "你的会话在%SECONDS%秒内有效"
+msgid "Your session is valid for %remaining% seconds from now."
+msgstr "你的会话在%remaining%秒内有效"
 
 msgid "Domain component (DC)"
 msgstr "Opened the web browser with tabs saved from the previous session.域组件(DC)"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/attributes.po b/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/attributes.po
new file mode 100644
index 0000000000..8d07b90f93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/attributes.po
@@ -0,0 +1,2058 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zu\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+msgid "aRecord"
+msgstr "aRecord"
+
+msgid "urn:mace:dir:attribute-def:aRecord"
+msgstr "urn:mace:dir:attribute-def:aRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.26"
+msgstr "urn:oid:0.9.2342.19200300.100.1.26"
+
+msgid "aliasedEntryName"
+msgstr "aliasedEntryName"
+
+msgid "urn:mace:dir:attribute-def:aliasedEntryName"
+msgstr "urn:mace:dir:attribute-def:aliasedEntryName"
+
+msgid "urn:oid:2.5.4.1"
+msgstr "urn:oid:2.5.4.1"
+
+msgid "aliasedObjectName"
+msgstr "aliasedObjectName"
+
+msgid "urn:mace:dir:attribute-def:aliasedObjectName"
+msgstr "urn:mace:dir:attribute-def:aliasedObjectName"
+
+msgid "associatedDomain"
+msgstr "associatedDomain"
+
+msgid "urn:mace:dir:attribute-def:associatedDomain"
+msgstr "urn:mace:dir:attribute-def:associatedDomain"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.37"
+msgstr "urn:oid:0.9.2342.19200300.100.1.37"
+
+msgid "associatedName"
+msgstr "associatedName"
+
+msgid "urn:mace:dir:attribute-def:associatedName"
+msgstr "urn:mace:dir:attribute-def:associatedName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.38"
+msgstr "urn:oid:0.9.2342.19200300.100.1.38"
+
+msgid "audio"
+msgstr "audio"
+
+msgid "urn:mace:dir:attribute-def:audio"
+msgstr "urn:mace:dir:attribute-def:audio"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.55"
+msgstr "urn:oid:0.9.2342.19200300.100.1.55"
+
+msgid "authorityRevocationList"
+msgstr "authorityRevocationList"
+
+msgid "urn:mace:dir:attribute-def:authorityRevocationList"
+msgstr "urn:mace:dir:attribute-def:authorityRevocationList"
+
+msgid "urn:oid:2.5.4.38"
+msgstr "urn:oid:2.5.4.38"
+
+msgid "buildingName"
+msgstr "buildingName"
+
+msgid "urn:mace:dir:attribute-def:buildingName"
+msgstr "urn:mace:dir:attribute-def:buildingName"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.48"
+msgstr "urn:oid:0.9.2342.19200300.100.1.48"
+
+msgid "businessCategory"
+msgstr "businessCategory"
+
+msgid "urn:mace:dir:attribute-def:businessCategory"
+msgstr "urn:mace:dir:attribute-def:businessCategory"
+
+msgid "urn:oid:2.5.4.15"
+msgstr "urn:oid:2.5.4.15"
+
+msgid "c"
+msgstr "c"
+
+msgid "urn:mace:dir:attribute-def:c"
+msgstr "urn:mace:dir:attribute-def:c"
+
+msgid "urn:oid:2.5.4.6"
+msgstr "urn:oid:2.5.4.6"
+
+msgid "cACertificate"
+msgstr "cACertificate"
+
+msgid "urn:mace:dir:attribute-def:cACertificate"
+msgstr "urn:mace:dir:attribute-def:cACertificate"
+
+msgid "urn:oid:2.5.4.37"
+msgstr "urn:oid:2.5.4.37"
+
+msgid "cNAMERecord"
+msgstr "cNAMERecord"
+
+msgid "urn:mace:dir:attribute-def:cNAMERecord"
+msgstr "urn:mace:dir:attribute-def:cNAMERecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.31"
+msgstr "urn:oid:0.9.2342.19200300.100.1.31"
+
+msgid "carLicense"
+msgstr "carLicense"
+
+msgid "urn:mace:dir:attribute-def:carLicense"
+msgstr "urn:mace:dir:attribute-def:carLicense"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.1"
+msgstr "urn:oid:2.16.840.1.113730.3.1.1"
+
+msgid "certificateRevocationList"
+msgstr "certificateRevocationList"
+
+msgid "urn:mace:dir:attribute-def:certificateRevocationList"
+msgstr "urn:mace:dir:attribute-def:certificateRevocationList"
+
+msgid "urn:oid:2.5.4.39"
+msgstr "urn:oid:2.5.4.39"
+
+# English string: Common name
+msgid "cn"
+msgstr "Igama elivamile"
+
+# English string: Common name
+msgid "urn:mace:dir:attribute-def:cn"
+msgstr "Igama elivamile"
+
+# English string: Common name
+msgid "urn:oid:2.5.4.3"
+msgstr "Igama elivamile"
+
+msgid "co"
+msgstr "co"
+
+msgid "urn:mace:dir:attribute-def:co"
+msgstr "urn:mace:dir:attribute-def:co"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.43"
+msgstr "urn:oid:0.9.2342.19200300.100.1.43"
+
+msgid "commonName"
+msgstr "commonName"
+
+msgid "urn:mace:dir:attribute-def:commonName"
+msgstr "urn:mace:dir:attribute-def:commonName"
+
+msgid "countryName"
+msgstr "countryName"
+
+msgid "urn:mace:dir:attribute-def:countryName"
+msgstr "urn:mace:dir:attribute-def:countryName"
+
+msgid "crossCertificatePair"
+msgstr "crossCertificatePair"
+
+msgid "urn:mace:dir:attribute-def:crossCertificatePair"
+msgstr "urn:mace:dir:attribute-def:crossCertificatePair"
+
+msgid "urn:oid:2.5.4.40"
+msgstr "urn:oid:2.5.4.40"
+
+msgid "dITRedirect"
+msgstr "dITRedirect"
+
+msgid "urn:mace:dir:attribute-def:dITRedirect"
+msgstr "urn:mace:dir:attribute-def:dITRedirect"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.54"
+msgstr "urn:oid:0.9.2342.19200300.100.1.54"
+
+msgid "dSAQuality"
+msgstr "dSAQuality"
+
+msgid "urn:mace:dir:attribute-def:dSAQuality"
+msgstr "urn:mace:dir:attribute-def:dSAQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.49"
+msgstr "urn:oid:0.9.2342.19200300.100.1.49"
+
+# English string: Domain component (DC)
+msgid "dc"
+msgstr "Ingxenye yesizinda (I-DC)"
+
+# English string: Domain component (DC)
+msgid "urn:mace:dir:attribute-def:dc"
+msgstr "Ingxenye yesizinda (I-DC)"
+
+# English string: Domain component (DC)
+msgid "urn:oid:0.9.2342.19200300.100.1.25"
+msgstr "Ingxenye yesizinda (I-DC)"
+
+msgid "deltaRevocationList"
+msgstr "deltaRevocationList"
+
+msgid "urn:mace:dir:attribute-def:deltaRevocationList"
+msgstr "urn:mace:dir:attribute-def:deltaRevocationList"
+
+msgid "urn:oid:2.5.4.53"
+msgstr "urn:oid:2.5.4.53"
+
+msgid "departmentNumber"
+msgstr "departmentNumber"
+
+msgid "urn:mace:dir:attribute-def:departmentNumber"
+msgstr "urn:mace:dir:attribute-def:departmentNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.2"
+msgstr "urn:oid:2.16.840.1.113730.3.1.2"
+
+msgid "description"
+msgstr "description"
+
+msgid "urn:mace:dir:attribute-def:description"
+msgstr "urn:mace:dir:attribute-def:description"
+
+msgid "urn:oid:2.5.4.13"
+msgstr "urn:oid:2.5.4.13"
+
+msgid "destinationIndicator"
+msgstr "destinationIndicator"
+
+msgid "urn:mace:dir:attribute-def:destinationIndicator"
+msgstr "urn:mace:dir:attribute-def:destinationIndicator"
+
+msgid "urn:oid:2.5.4.27"
+msgstr "urn:oid:2.5.4.27"
+
+# English string: Display name
+msgid "displayName"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "urn:mace:dir:attribute-def:displayName"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "urn:oid:2.16.840.1.113730.3.1.241"
+msgstr "Igama lesibonisi"
+
+msgid "distinguishedName"
+msgstr "distinguishedName"
+
+msgid "urn:mace:dir:attribute-def:distinguishedName"
+msgstr "urn:mace:dir:attribute-def:distinguishedName"
+
+msgid "urn:oid:2.5.4.49"
+msgstr "urn:oid:2.5.4.49"
+
+msgid "dmdName"
+msgstr "dmdName"
+
+msgid "urn:mace:dir:attribute-def:dmdName"
+msgstr "urn:mace:dir:attribute-def:dmdName"
+
+msgid "urn:oid:2.5.4.54"
+msgstr "urn:oid:2.5.4.54"
+
+msgid "dnQualifier"
+msgstr "dnQualifier"
+
+msgid "urn:mace:dir:attribute-def:dnQualifier"
+msgstr "urn:mace:dir:attribute-def:dnQualifier"
+
+msgid "urn:oid:2.5.4.46"
+msgstr "urn:oid:2.5.4.46"
+
+msgid "documentAuthor"
+msgstr "documentAuthor"
+
+msgid "urn:mace:dir:attribute-def:documentAuthor"
+msgstr "urn:mace:dir:attribute-def:documentAuthor"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.14"
+msgstr "urn:oid:0.9.2342.19200300.100.1.14"
+
+msgid "documentIdentifier"
+msgstr "documentIdentifier"
+
+msgid "urn:mace:dir:attribute-def:documentIdentifier"
+msgstr "urn:mace:dir:attribute-def:documentIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.11"
+msgstr "urn:oid:0.9.2342.19200300.100.1.11"
+
+msgid "documentLocation"
+msgstr "documentLocation"
+
+msgid "urn:mace:dir:attribute-def:documentLocation"
+msgstr "urn:mace:dir:attribute-def:documentLocation"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.15"
+msgstr "urn:oid:0.9.2342.19200300.100.1.15"
+
+msgid "documentPublisher"
+msgstr "documentPublisher"
+
+msgid "urn:mace:dir:attribute-def:documentPublisher"
+msgstr "urn:mace:dir:attribute-def:documentPublisher"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.56"
+msgstr "urn:oid:0.9.2342.19200300.100.1.56"
+
+msgid "documentTitle"
+msgstr "documentTitle"
+
+msgid "urn:mace:dir:attribute-def:documentTitle"
+msgstr "urn:mace:dir:attribute-def:documentTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.12"
+msgstr "urn:oid:0.9.2342.19200300.100.1.12"
+
+msgid "documentVersion"
+msgstr "documentVersion"
+
+msgid "urn:mace:dir:attribute-def:documentVersion"
+msgstr "urn:mace:dir:attribute-def:documentVersion"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.13"
+msgstr "urn:oid:0.9.2342.19200300.100.1.13"
+
+msgid "domainComponent"
+msgstr "domainComponent"
+
+msgid "urn:mace:dir:attribute-def:domainComponent"
+msgstr "urn:mace:dir:attribute-def:domainComponent"
+
+msgid "drink"
+msgstr "drink"
+
+msgid "urn:mace:dir:attribute-def:drink"
+msgstr "urn:mace:dir:attribute-def:drink"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.5"
+msgstr "urn:oid:0.9.2342.19200300.100.1.5"
+
+# English string: Organizational homepage
+msgid "eduOrgHomePageURI"
+msgstr "Ikhasi lasekhaya lenhlangano"
+
+# English string: Organizational homepage
+msgid "urn:mace:dir:attribute-def:eduOrgHomePageURI"
+msgstr "Ikhasi lasekhaya lenhlangano"
+
+# English string: Organizational homepage
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.2"
+msgstr "Ikhasi lasekhaya lenhlangano"
+
+msgid "eduOrgIdentityAuthNPolicyURI"
+msgstr "eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgIdentityAuthNPolicyURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.3"
+
+# English string: Organization's legal name
+msgid "eduOrgLegalName"
+msgstr "Igama elisemthethweni lenhlangano"
+
+# English string: Organization's legal name
+msgid "urn:mace:dir:attribute-def:eduOrgLegalName"
+msgstr "Igama elisemthethweni lenhlangano"
+
+# English string: Organization's legal name
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.4"
+msgstr "Igama elisemthethweni lenhlangano"
+
+msgid "eduOrgSuperiorURI"
+msgstr "eduOrgSuperiorURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgSuperiorURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.5"
+
+msgid "eduOrgWhitePagesURI"
+msgstr "eduOrgWhitePagesURI"
+
+msgid "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+msgstr "urn:mace:dir:attribute-def:eduOrgWhitePagesURI"
+
+msgid "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.5923.1.2.1.6"
+
+# English string: Affiliation
+msgid "eduPersonAffiliation"
+msgstr "Indima"
+
+# English string: Affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonAffiliation"
+msgstr "Indima"
+
+# English string: Affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
+msgstr "Indima"
+
+# English string: Identity assurance profile
+msgid "eduPersonAssurance"
+msgstr "Iphrofayela yokuqinisekisa umazisi"
+
+# English string: Identity assurance profile
+msgid "urn:mace:dir:attribute-def:eduPersonAssurance"
+msgstr "Iphrofayela yokuqinisekisa umazisi"
+
+# English string: Identity assurance profile
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.11"
+msgstr "Iphrofayela yokuqinisekisa umazisi"
+
+# English string: Entitlement regarding the service
+msgid "eduPersonEntitlement"
+msgstr "Ilungelo eliphathelene nesevisi"
+
+# English string: Entitlement regarding the service
+msgid "urn:mace:dir:attribute-def:eduPersonEntitlement"
+msgstr "Ilungelo eliphathelene nesevisi"
+
+# English string: Entitlement regarding the service
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.7"
+msgstr "Ilungelo eliphathelene nesevisi"
+
+# English string: Nickname
+msgid "eduPersonNickname"
+msgstr "Isidlaliso"
+
+# English string: Nickname
+msgid "urn:mace:dir:attribute-def:eduPersonNickname"
+msgstr "Isidlaliso"
+
+# English string: Nickname
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.2"
+msgstr "Isidlaliso"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "eduPersonOrgDN"
+msgstr "Igama elihloniphekile (I-DN) lenhlangano yasekhaya yomuntu"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:mace:dir:attribute-def:eduPersonOrgDN"
+msgstr "Igama elihloniphekile (I-DN) lenhlangano yasekhaya yomuntu"
+
+# English string: Distinguished name (DN) of person's home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.3"
+msgstr "Igama elihloniphekile (I-DN) lenhlangano yasekhaya yomuntu"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "eduPersonOrgUnitDN"
+msgstr "Igama elihloniphekile (I-DN) leyunithi yenhlangano yasekhaya yomuntu"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:mace:dir:attribute-def:eduPersonOrgUnitDN"
+msgstr "Igama elihloniphekile (I-DN) leyunithi yenhlangano yasekhaya yomuntu"
+
+# English string: Distinguished name (DN) of the person's home organizational unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.4"
+msgstr "Igama elihloniphekile (I-DN) leyunithi yenhlangano yasekhaya yomuntu"
+
+# English string: Primary affiliation
+msgid "eduPersonPrimaryAffiliation"
+msgstr "Indima eyinhloko"
+
+# English string: Primary affiliation
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation"
+msgstr "Indima eyinhloko"
+
+# English string: Primary affiliation
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.5"
+msgstr "Indima eyinhloko"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "eduPersonPrimaryOrgUnitDN"
+msgstr "Igama elihloniphekile (I-DN) Leyunithi Yenhlangano eyinhloko yomuntu"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN"
+msgstr "Igama elihloniphekile (I-DN) Leyunithi Yenhlangano eyinhloko yomuntu"
+
+# English string: Distinguished name (DN) of person's primary Organizational Unit
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.8"
+msgstr "Igama elihloniphekile (I-DN) Leyunithi Yenhlangano eyinhloko yomuntu"
+
+# English string: Person's principal name at home organization
+msgid "eduPersonPrincipalName"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Person's principal name at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonPrincipalName"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Person's principal name at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Affiliation at home organization
+msgid "eduPersonScopedAffiliation"
+msgstr "Indima enhlanganweni yasekhaya"
+
+# English string: Affiliation at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonScopedAffiliation"
+msgstr "Indima enhlanganweni yasekhaya"
+
+# English string: Affiliation at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.9"
+msgstr "Indima enhlanganweni yasekhaya"
+
+# English string: Persistent pseudonymous ID
+msgid "eduPersonTargetedID"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:mace:dir:attribute-def:eduPersonTargetedID"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Persistent pseudonymous ID
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.10"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "eduPersonUniqueId"
+msgstr "I-ID yesibizo ephikelelayo, engakwazi ukwabelwa kabusha yomuntu yenhlangano yasekhaya"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:mace:dir:attribute-def:eduPersonUniqueId"
+msgstr "I-ID yesibizo ephikelelayo, engakwazi ukwabelwa kabusha yomuntu yenhlangano yasekhaya"
+
+# English string: Person's non-reassignable, persistent pseudonymous ID at home organization
+msgid "urn:oid:1.3.6.1.4.1.5923.1.1.1.13"
+msgstr "I-ID yesibizo ephikelelayo, engakwazi ukwabelwa kabusha yomuntu yenhlangano yasekhaya"
+
+msgid "email"
+msgstr "email"
+
+msgid "urn:mace:dir:attribute-def:email"
+msgstr "urn:mace:dir:attribute-def:email"
+
+msgid "urn:oid:1.2.840.113549.1.9.1"
+msgstr "urn:oid:1.2.840.113549.1.9.1"
+
+msgid "emailAddress"
+msgstr "emailAddress"
+
+msgid "urn:mace:dir:attribute-def:emailAddress"
+msgstr "urn:mace:dir:attribute-def:emailAddress"
+
+msgid "employeeNumber"
+msgstr "employeeNumber"
+
+msgid "urn:mace:dir:attribute-def:employeeNumber"
+msgstr "urn:mace:dir:attribute-def:employeeNumber"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.3"
+msgstr "urn:oid:2.16.840.1.113730.3.1.3"
+
+msgid "employeeType"
+msgstr "employeeType"
+
+msgid "urn:mace:dir:attribute-def:employeeType"
+msgstr "urn:mace:dir:attribute-def:employeeType"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.4"
+msgstr "urn:oid:2.16.840.1.113730.3.1.4"
+
+msgid "enhancedSearchGuide"
+msgstr "enhancedSearchGuide"
+
+msgid "urn:mace:dir:attribute-def:enhancedSearchGuide"
+msgstr "urn:mace:dir:attribute-def:enhancedSearchGuide"
+
+msgid "urn:oid:2.5.4.47"
+msgstr "urn:oid:2.5.4.47"
+
+# English string: Fax number
+msgid "facsimileTelephoneNumber"
+msgstr "Inombolo yefeksi"
+
+# English string: Fax number
+msgid "urn:mace:dir:attribute-def:facsimileTelephoneNumber"
+msgstr "Inombolo yefeksi"
+
+# English string: Fax number
+msgid "urn:oid:2.5.4.23"
+msgstr "Inombolo yefeksi"
+
+msgid "favouriteDrink"
+msgstr "favouriteDrink"
+
+msgid "urn:mace:dir:attribute-def:favouriteDrink"
+msgstr "urn:mace:dir:attribute-def:favouriteDrink"
+
+msgid "fax"
+msgstr "fax"
+
+msgid "urn:mace:dir:attribute-def:fax"
+msgstr "urn:mace:dir:attribute-def:fax"
+
+msgid "federationFeideSchemaVersion"
+msgstr "federationFeideSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:federationFeideSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.9"
+
+msgid "friendlyCountryName"
+msgstr "friendlyCountryName"
+
+msgid "urn:mace:dir:attribute-def:friendlyCountryName"
+msgstr "urn:mace:dir:attribute-def:friendlyCountryName"
+
+msgid "generationQualifier"
+msgstr "generationQualifier"
+
+msgid "urn:mace:dir:attribute-def:generationQualifier"
+msgstr "urn:mace:dir:attribute-def:generationQualifier"
+
+msgid "urn:oid:2.5.4.44"
+msgstr "urn:oid:2.5.4.44"
+
+# English string: Given name
+msgid "givenName"
+msgstr "Igama lokuzalwa"
+
+# English string: Given name
+msgid "urn:mace:dir:attribute-def:givenName"
+msgstr "Igama lokuzalwa"
+
+# English string: Given name
+msgid "urn:oid:2.5.4.42"
+msgstr "Igama lokuzalwa"
+
+msgid "gn"
+msgstr "gn"
+
+msgid "urn:mace:dir:attribute-def:gn"
+msgstr "urn:mace:dir:attribute-def:gn"
+
+# English string: Home telephone
+msgid "homePhone"
+msgstr "Ucingo lwasekhaya"
+
+# English string: Home telephone
+msgid "urn:mace:dir:attribute-def:homePhone"
+msgstr "Ucingo lwasekhaya"
+
+# English string: Home telephone
+msgid "urn:oid:0.9.2342.19200300.100.1.20"
+msgstr "Ucingo lwasekhaya"
+
+# English string: Home postal address
+msgid "homePostalAddress"
+msgstr "Ikheli leposi lasekhaya"
+
+# English string: Home postal address
+msgid "urn:mace:dir:attribute-def:homePostalAddress"
+msgstr "Ikheli leposi lasekhaya"
+
+# English string: Home postal address
+msgid "urn:oid:0.9.2342.19200300.100.1.39"
+msgstr "Ikheli leposi lasekhaya"
+
+msgid "homeTelephoneNumber"
+msgstr "homeTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:homeTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:homeTelephoneNumber"
+
+msgid "host"
+msgstr "host"
+
+msgid "urn:mace:dir:attribute-def:host"
+msgstr "urn:mace:dir:attribute-def:host"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.9"
+msgstr "urn:oid:0.9.2342.19200300.100.1.9"
+
+msgid "houseIdentifier"
+msgstr "houseIdentifier"
+
+msgid "urn:mace:dir:attribute-def:houseIdentifier"
+msgstr "urn:mace:dir:attribute-def:houseIdentifier"
+
+msgid "urn:oid:2.5.4.51"
+msgstr "urn:oid:2.5.4.51"
+
+msgid "info"
+msgstr "info"
+
+msgid "urn:mace:dir:attribute-def:info"
+msgstr "urn:mace:dir:attribute-def:info"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.4"
+msgstr "urn:oid:0.9.2342.19200300.100.1.4"
+
+msgid "initials"
+msgstr "initials"
+
+msgid "urn:mace:dir:attribute-def:initials"
+msgstr "urn:mace:dir:attribute-def:initials"
+
+msgid "urn:oid:2.5.4.43"
+msgstr "urn:oid:2.5.4.43"
+
+msgid "internationaliSDNNumber"
+msgstr "internationaliSDNNumber"
+
+msgid "urn:mace:dir:attribute-def:internationaliSDNNumber"
+msgstr "urn:mace:dir:attribute-def:internationaliSDNNumber"
+
+msgid "urn:oid:2.5.4.25"
+msgstr "urn:oid:2.5.4.25"
+
+msgid "janetMailbox"
+msgstr "janetMailbox"
+
+msgid "urn:mace:dir:attribute-def:janetMailbox"
+msgstr "urn:mace:dir:attribute-def:janetMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.46"
+msgstr "urn:oid:0.9.2342.19200300.100.1.46"
+
+# English string: JPEG Photo
+msgid "jpegPhoto"
+msgstr "Isithombe se-JPEG"
+
+# English string: JPEG Photo
+msgid "urn:mace:dir:attribute-def:jpegPhoto"
+msgstr "Isithombe se-JPEG"
+
+# English string: JPEG Photo
+msgid "urn:oid:0.9.2342.19200300.100.1.60"
+msgstr "Isithombe se-JPEG"
+
+msgid "knowledgeInformation"
+msgstr "knowledgeInformation"
+
+msgid "urn:mace:dir:attribute-def:knowledgeInformation"
+msgstr "urn:mace:dir:attribute-def:knowledgeInformation"
+
+msgid "urn:oid:2.5.4.2"
+msgstr "urn:oid:2.5.4.2"
+
+# English string: Locality
+msgid "l"
+msgstr "Indawo"
+
+# English string: Locality
+msgid "urn:mace:dir:attribute-def:l"
+msgstr "Indawo"
+
+# English string: Locality
+msgid "urn:oid:2.5.4.7"
+msgstr "Indawo"
+
+# English string: Labeled URI
+msgid "labeledURI"
+msgstr "I-URI Enelebula"
+
+# English string: Labeled URI
+msgid "urn:mace:dir:attribute-def:labeledURI"
+msgstr "I-URI Enelebula"
+
+# English string: Labeled URI
+msgid "urn:oid:1.3.6.1.4.1.250.1.57"
+msgstr "I-URI Enelebula"
+
+msgid "localityName"
+msgstr "localityName"
+
+msgid "urn:mace:dir:attribute-def:localityName"
+msgstr "urn:mace:dir:attribute-def:localityName"
+
+msgid "mDRecord"
+msgstr "mDRecord"
+
+msgid "urn:mace:dir:attribute-def:mDRecord"
+msgstr "urn:mace:dir:attribute-def:mDRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.27"
+msgstr "urn:oid:0.9.2342.19200300.100.1.27"
+
+msgid "mXRecord"
+msgstr "mXRecord"
+
+msgid "urn:mace:dir:attribute-def:mXRecord"
+msgstr "urn:mace:dir:attribute-def:mXRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.28"
+msgstr "urn:oid:0.9.2342.19200300.100.1.28"
+
+# English string: Mail
+msgid "mail"
+msgstr "Imeyili"
+
+# English string: Mail
+msgid "urn:mace:dir:attribute-def:mail"
+msgstr "Imeyili"
+
+# English string: Mail
+msgid "urn:oid:0.9.2342.19200300.100.1.3"
+msgstr "Imeyili"
+
+msgid "mailPreferenceOption"
+msgstr "mailPreferenceOption"
+
+msgid "urn:mace:dir:attribute-def:mailPreferenceOption"
+msgstr "urn:mace:dir:attribute-def:mailPreferenceOption"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.47"
+msgstr "urn:oid:0.9.2342.19200300.100.1.47"
+
+# English string: Manager
+msgid "manager"
+msgstr "Umphathi"
+
+# English string: Manager
+msgid "urn:mace:dir:attribute-def:manager"
+msgstr "Umphathi"
+
+# English string: Manager
+msgid "urn:oid:0.9.2342.19200300.100.1.10"
+msgstr "Umphathi"
+
+msgid "member"
+msgstr "member"
+
+msgid "urn:mace:dir:attribute-def:member"
+msgstr "urn:mace:dir:attribute-def:member"
+
+msgid "urn:oid:2.5.4.31"
+msgstr "urn:oid:2.5.4.31"
+
+# English string: Mobile
+msgid "mobile"
+msgstr "Imobhayili"
+
+# English string: Mobile
+msgid "urn:mace:dir:attribute-def:mobile"
+msgstr "Imobhayili"
+
+# English string: Mobile
+msgid "urn:oid:0.9.2342.19200300.100.1.41"
+msgstr "Imobhayili"
+
+msgid "mobileTelephoneNumber"
+msgstr "mobileTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:mobileTelephoneNumber"
+
+msgid "nSRecord"
+msgstr "nSRecord"
+
+msgid "urn:mace:dir:attribute-def:nSRecord"
+msgstr "urn:mace:dir:attribute-def:nSRecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.29"
+msgstr "urn:oid:0.9.2342.19200300.100.1.29"
+
+msgid "name"
+msgstr "name"
+
+msgid "urn:mace:dir:attribute-def:name"
+msgstr "urn:mace:dir:attribute-def:name"
+
+msgid "urn:oid:2.5.4.41"
+msgstr "urn:oid:2.5.4.41"
+
+msgid "norEduOrgAcronym"
+msgstr "norEduOrgAcronym"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgAcronym"
+msgstr "urn:mace:dir:attribute-def:norEduOrgAcronym"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.6"
+
+# English string: Organizational number
+msgid "norEduOrgNIN"
+msgstr "Inombolo yenhlangano"
+
+# English string: Organizational number
+msgid "urn:mace:dir:attribute-def:norEduOrgNIN"
+msgstr "Inombolo yenhlangano"
+
+# English string: Organizational number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.12"
+msgstr "Inombolo yenhlangano"
+
+msgid "norEduOrgSchemaVersion"
+msgstr "norEduOrgSchemaVersion"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+msgstr "urn:mace:dir:attribute-def:norEduOrgSchemaVersion"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.11"
+
+msgid "norEduOrgUniqueIdentifier"
+msgstr "norEduOrgUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.7"
+
+msgid "norEduOrgUniqueNumber"
+msgstr "norEduOrgUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.1"
+
+msgid "norEduOrgUnitUniqueIdentifier"
+msgstr "norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueIdentifier"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.8"
+
+msgid "norEduOrgUnitUniqueNumber"
+msgstr "norEduOrgUnitUniqueNumber"
+
+msgid "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+msgstr "urn:mace:dir:attribute-def:norEduOrgUnitUniqueNumber"
+
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+msgstr "urn:oid:1.3.6.1.4.1.2428.90.1.2"
+
+# English string: Date of birth
+msgid "norEduPersonBirthDate"
+msgstr "Usuku lokuzalwa"
+
+# English string: Date of birth
+msgid "urn:mace:dir:attribute-def:norEduPersonBirthDate"
+msgstr "Usuku lokuzalwa"
+
+# English string: Date of birth
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.3"
+msgstr "Usuku lokuzalwa"
+
+# English string: Local identity number
+msgid "norEduPersonLIN"
+msgstr "Inombolo kamazisi yasendaweni"
+
+# English string: Local identity number
+msgid "urn:mace:dir:attribute-def:norEduPersonLIN"
+msgstr "Inombolo kamazisi yasendaweni"
+
+# English string: Local identity number
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.4"
+msgstr "Inombolo kamazisi yasendaweni"
+
+# English string: Identity number assigned by public authorities
+msgid "norEduPersonNIN"
+msgstr "Inombolo kamazisi eyabelwe amagunya omphakathi"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:mace:dir:attribute-def:norEduPersonNIN"
+msgstr "Inombolo kamazisi eyabelwe amagunya omphakathi"
+
+# English string: Identity number assigned by public authorities
+msgid "urn:oid:1.3.6.1.4.1.2428.90.1.5"
+msgstr "Inombolo kamazisi eyabelwe amagunya omphakathi"
+
+# English string: Organization name
+msgid "o"
+msgstr "Igama lenhlangano"
+
+# English string: Organization name
+msgid "urn:mace:dir:attribute-def:o"
+msgstr "Igama lenhlangano"
+
+# English string: Organization name
+msgid "urn:oid:2.5.4.10"
+msgstr "Igama lenhlangano"
+
+msgid "objectClass"
+msgstr "objectClass"
+
+msgid "urn:mace:dir:attribute-def:objectClass"
+msgstr "urn:mace:dir:attribute-def:objectClass"
+
+msgid "urn:oid:2.5.4.0"
+msgstr "urn:oid:2.5.4.0"
+
+msgid "organizationName"
+msgstr "organizationName"
+
+msgid "urn:mace:dir:attribute-def:organizationName"
+msgstr "urn:mace:dir:attribute-def:organizationName"
+
+msgid "organizationalStatus"
+msgstr "organizationalStatus"
+
+msgid "urn:mace:dir:attribute-def:organizationalStatus"
+msgstr "urn:mace:dir:attribute-def:organizationalStatus"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.45"
+msgstr "urn:oid:0.9.2342.19200300.100.1.45"
+
+msgid "organizationalUnitName"
+msgstr "organizationalUnitName"
+
+msgid "urn:mace:dir:attribute-def:organizationalUnitName"
+msgstr "urn:mace:dir:attribute-def:organizationalUnitName"
+
+# English string: Organizational unit
+msgid "urn:oid:2.5.4.11"
+msgstr "Iyunithi yenhlangano"
+
+msgid "otherMailbox"
+msgstr "otherMailbox"
+
+msgid "urn:mace:dir:attribute-def:otherMailbox"
+msgstr "urn:mace:dir:attribute-def:otherMailbox"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.22"
+msgstr "urn:oid:0.9.2342.19200300.100.1.22"
+
+# English string: Organizational unit
+msgid "ou"
+msgstr "Iyunithi yenhlangano"
+
+# English string: Organizational unit
+msgid "urn:mace:dir:attribute-def:ou"
+msgstr "Iyunithi yenhlangano"
+
+msgid "owner"
+msgstr "owner"
+
+msgid "urn:mace:dir:attribute-def:owner"
+msgstr "urn:mace:dir:attribute-def:owner"
+
+msgid "urn:oid:2.5.4.32"
+msgstr "urn:oid:2.5.4.32"
+
+msgid "pager"
+msgstr "pager"
+
+msgid "urn:mace:dir:attribute-def:pager"
+msgstr "urn:mace:dir:attribute-def:pager"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.42"
+msgstr "urn:oid:0.9.2342.19200300.100.1.42"
+
+msgid "pagerTelephoneNumber"
+msgstr "pagerTelephoneNumber"
+
+msgid "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+msgstr "urn:mace:dir:attribute-def:pagerTelephoneNumber"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "pairwise-id"
+msgstr "pairwise-id"
+
+# English string: Service-specific pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:pairwise-id"
+
+msgid "personalSignature"
+msgstr "personalSignature"
+
+msgid "urn:mace:dir:attribute-def:personalSignature"
+msgstr "urn:mace:dir:attribute-def:personalSignature"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.53"
+msgstr "urn:oid:0.9.2342.19200300.100.1.53"
+
+msgid "personalTitle"
+msgstr "personalTitle"
+
+msgid "urn:mace:dir:attribute-def:personalTitle"
+msgstr "urn:mace:dir:attribute-def:personalTitle"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.40"
+msgstr "urn:oid:0.9.2342.19200300.100.1.40"
+
+msgid "photo"
+msgstr "photo"
+
+msgid "urn:mace:dir:attribute-def:photo"
+msgstr "urn:mace:dir:attribute-def:photo"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.7"
+msgstr "urn:oid:0.9.2342.19200300.100.1.7"
+
+msgid "physicalDeliveryOfficeName"
+msgstr "physicalDeliveryOfficeName"
+
+msgid "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+msgstr "urn:mace:dir:attribute-def:physicalDeliveryOfficeName"
+
+msgid "urn:oid:2.5.4.19"
+msgstr "urn:oid:2.5.4.19"
+
+msgid "pkcs9email"
+msgstr "pkcs9email"
+
+msgid "urn:mace:dir:attribute-def:pkcs9email"
+msgstr "urn:mace:dir:attribute-def:pkcs9email"
+
+# English string: Post office box
+msgid "postOfficeBox"
+msgstr "Ibhokisi lehhovisi leposi"
+
+# English string: Post office box
+msgid "urn:mace:dir:attribute-def:postOfficeBox"
+msgstr "Ibhokisi lehhovisi leposi"
+
+# English string: Post office box
+msgid "urn:oid:2.5.4.18"
+msgstr "Ibhokisi lehhovisi leposi"
+
+# English string: Postal address
+msgid "postalAddress"
+msgstr "Ikheli leposi"
+
+# English string: Postal address
+msgid "urn:mace:dir:attribute-def:postalAddress"
+msgstr "Ikheli leposi"
+
+# English string: Postal address
+msgid "urn:oid:2.5.4.16"
+msgstr "Ikheli leposi"
+
+# English string: Postal code
+msgid "postalCode"
+msgstr "Ikhodi yeposi"
+
+# English string: Postal code
+msgid "urn:mace:dir:attribute-def:postalCode"
+msgstr "Ikhodi yeposi"
+
+# English string: Postal code
+msgid "urn:oid:2.5.4.17"
+msgstr "Ikhodi yeposi"
+
+msgid "preferredDeliveryMethod"
+msgstr "preferredDeliveryMethod"
+
+msgid "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+msgstr "urn:mace:dir:attribute-def:preferredDeliveryMethod"
+
+msgid "urn:oid:2.5.4.28"
+msgstr "urn:oid:2.5.4.28"
+
+# English string: Preferred language
+msgid "preferredLanguage"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Preferred language
+msgid "urn:mace:dir:attribute-def:preferredLanguage"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Preferred language
+msgid "urn:oid:2.16.840.1.113730.3.1.39"
+msgstr "Ulimi oluncanyelwayo"
+
+msgid "presentationAddress"
+msgstr "presentationAddress"
+
+msgid "urn:mace:dir:attribute-def:presentationAddress"
+msgstr "urn:mace:dir:attribute-def:presentationAddress"
+
+msgid "urn:oid:2.5.4.29"
+msgstr "urn:oid:2.5.4.29"
+
+msgid "protocolInformation"
+msgstr "protocolInformation"
+
+msgid "urn:mace:dir:attribute-def:protocolInformation"
+msgstr "urn:mace:dir:attribute-def:protocolInformation"
+
+msgid "urn:oid:2.5.4.48"
+msgstr "urn:oid:2.5.4.48"
+
+msgid "pseudonym"
+msgstr "pseudonym"
+
+msgid "urn:mace:dir:attribute-def:pseudonym"
+msgstr "urn:mace:dir:attribute-def:pseudonym"
+
+msgid "urn:oid:2.5.4.65"
+msgstr "urn:oid:2.5.4.65"
+
+msgid "registeredAddress"
+msgstr "registeredAddress"
+
+msgid "urn:mace:dir:attribute-def:registeredAddress"
+msgstr "urn:mace:dir:attribute-def:registeredAddress"
+
+msgid "urn:oid:2.5.4.26"
+msgstr "urn:oid:2.5.4.26"
+
+msgid "rfc822Mailbox"
+msgstr "rfc822Mailbox"
+
+msgid "urn:mace:dir:attribute-def:rfc822Mailbox"
+msgstr "urn:mace:dir:attribute-def:rfc822Mailbox"
+
+msgid "roleOccupant"
+msgstr "roleOccupant"
+
+msgid "urn:mace:dir:attribute-def:roleOccupant"
+msgstr "urn:mace:dir:attribute-def:roleOccupant"
+
+msgid "urn:oid:2.5.4.33"
+msgstr "urn:oid:2.5.4.33"
+
+msgid "roomNumber"
+msgstr "roomNumber"
+
+msgid "urn:mace:dir:attribute-def:roomNumber"
+msgstr "urn:mace:dir:attribute-def:roomNumber"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.6"
+msgstr "urn:oid:0.9.2342.19200300.100.1.6"
+
+msgid "sOARecord"
+msgstr "sOARecord"
+
+msgid "urn:mace:dir:attribute-def:sOARecord"
+msgstr "urn:mace:dir:attribute-def:sOARecord"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.30"
+msgstr "urn:oid:0.9.2342.19200300.100.1.30"
+
+msgid "schacCountryOfCitizenship"
+msgstr "schacCountryOfCitizenship"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfCitizenship"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.5"
+
+msgid "urn:schac:attribute-def:schacCountryOfCitizenship"
+msgstr "urn:schac:attribute-def:schacCountryOfCitizenship"
+
+msgid "schacCountryOfResidence"
+msgstr "schacCountryOfResidence"
+
+msgid "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+msgstr "urn:mace:terena.org:attribute-def:schacCountryOfResidence"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.11"
+
+msgid "urn:schac:attribute-def:schacCountryOfResidence"
+msgstr "urn:schac:attribute-def:schacCountryOfResidence"
+
+msgid "schacDateOfBirth"
+msgstr "schacDateOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacDateOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.3"
+
+msgid "urn:schac:attribute-def:schacDateOfBirth"
+msgstr "urn:schac:attribute-def:schacDateOfBirth"
+
+msgid "schacExpiryDate"
+msgstr "schacExpiryDate"
+
+msgid "urn:mace:terena.org:attribute-def:schacExpiryDate"
+msgstr "urn:mace:terena.org:attribute-def:schacExpiryDate"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.17"
+
+msgid "urn:schac:attribute-def:schacExpiryDate"
+msgstr "urn:schac:attribute-def:schacExpiryDate"
+
+msgid "schacGender"
+msgstr "schacGender"
+
+msgid "urn:mace:terena.org:attribute-def:schacGender"
+msgstr "urn:mace:terena.org:attribute-def:schacGender"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.2"
+
+msgid "urn:schac:attribute-def:schacGender"
+msgstr "urn:schac:attribute-def:schacGender"
+
+# English string: Home organization domain name
+msgid "schacHomeOrganization"
+msgstr "Igama lesizinda senhlangano yasekhaya"
+
+# English string: Home organization domain name
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganization"
+msgstr "Igama lesizinda senhlangano yasekhaya"
+
+# English string: Home organization domain name
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.9"
+msgstr "Igama lesizinda senhlangano yasekhaya"
+
+# English string: Home organization domain name
+msgid "urn:schac:attribute-def:schacHomeOrganization"
+msgstr "Igama lesizinda senhlangano yasekhaya"
+
+msgid "schacHomeOrganizationType"
+msgstr "schacHomeOrganizationType"
+
+msgid "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+msgstr "urn:mace:terena.org:attribute-def:schacHomeOrganizationType"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.10"
+
+msgid "urn:schac:attribute-def:schacHomeOrganizationType"
+msgstr "urn:schac:attribute-def:schacHomeOrganizationType"
+
+msgid "schacMotherTongue"
+msgstr "schacMotherTongue"
+
+msgid "urn:mace:terena.org:attribute-def:schacMotherTongue"
+msgstr "urn:mace:terena.org:attribute-def:schacMotherTongue"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.1"
+
+msgid "urn:schac:attribute-def:schacMotherTongue"
+msgstr "urn:schac:attribute-def:schacMotherTongue"
+
+msgid "schacPersonalPosition"
+msgstr "schacPersonalPosition"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalPosition"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.13"
+
+msgid "urn:schac:attribute-def:schacPersonalPosition"
+msgstr "urn:schac:attribute-def:schacPersonalPosition"
+
+msgid "schacPersonalTitle"
+msgstr "schacPersonalTitle"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalTitle"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.8"
+
+msgid "urn:schac:attribute-def:schacPersonalTitle"
+msgstr "urn:schac:attribute-def:schacPersonalTitle"
+
+msgid "schacPersonalUniqueCode"
+msgstr "schacPersonalUniqueCode"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueCode"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.14"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueCode"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueCode"
+
+msgid "schacPersonalUniqueID"
+msgstr "schacPersonalUniqueID"
+
+msgid "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+msgstr "urn:mace:terena.org:attribute-def:schacPersonalUniqueID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.15"
+
+msgid "urn:schac:attribute-def:schacPersonalUniqueID"
+msgstr "urn:schac:attribute-def:schacPersonalUniqueID"
+
+msgid "schacPlaceOfBirth"
+msgstr "schacPlaceOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacPlaceOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.4"
+
+msgid "urn:schac:attribute-def:schacPlaceOfBirth"
+msgstr "urn:schac:attribute-def:schacPlaceOfBirth"
+
+msgid "schacProjectMembership"
+msgstr "schacProjectMembership"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectMembership"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectMembership"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.20"
+
+msgid "urn:schac:attribute-def:schacProjectMembership"
+msgstr "urn:schac:attribute-def:schacProjectMembership"
+
+msgid "schacProjectSpecificRole"
+msgstr "schacProjectSpecificRole"
+
+msgid "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+msgstr "urn:mace:terena.org:attribute-def:schacProjectSpecificRole"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.21"
+
+msgid "urn:schac:attribute-def:schacProjectSpecificRole"
+msgstr "urn:schac:attribute-def:schacProjectSpecificRole"
+
+msgid "schacSn1"
+msgstr "schacSn1"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn1"
+msgstr "urn:mace:terena.org:attribute-def:schacSn1"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.6"
+
+msgid "urn:schac:attribute-def:schacSn1"
+msgstr "urn:schac:attribute-def:schacSn1"
+
+msgid "schacSn2"
+msgstr "schacSn2"
+
+msgid "urn:mace:terena.org:attribute-def:schacSn2"
+msgstr "urn:mace:terena.org:attribute-def:schacSn2"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.7"
+
+msgid "urn:schac:attribute-def:schacSn2"
+msgstr "urn:schac:attribute-def:schacSn2"
+
+msgid "schacUserPresenceID"
+msgstr "schacUserPresenceID"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+msgstr "urn:mace:terena.org:attribute-def:schacUserPresenceID"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.12"
+
+msgid "urn:schac:attribute-def:schacUserPresenceID"
+msgstr "urn:schac:attribute-def:schacUserPresenceID"
+
+# English string: Private information elements
+msgid "schacUserPrivateAttribute"
+msgstr "Izingxenye zolwazi oluyimfihlo"
+
+# English string: Private information elements
+msgid "urn:mace:terena.org:attribute-def:schacUserPrivateAttribute"
+msgstr "Izingxenye zolwazi oluyimfihlo"
+
+# English string: Private information elements
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.18"
+msgstr "Izingxenye zolwazi oluyimfihlo"
+
+# English string: Private information elements
+msgid "urn:schac:attribute-def:schacUserPrivateAttribute"
+msgstr "Izingxenye zolwazi oluyimfihlo"
+
+msgid "schacUserStatus"
+msgstr "schacUserStatus"
+
+msgid "urn:mace:terena.org:attribute-def:schacUserStatus"
+msgstr "urn:mace:terena.org:attribute-def:schacUserStatus"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.2.19"
+
+msgid "urn:schac:attribute-def:schacUserStatus"
+msgstr "urn:schac:attribute-def:schacUserStatus"
+
+msgid "schacYearOfBirth"
+msgstr "schacYearOfBirth"
+
+msgid "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+msgstr "urn:mace:terena.org:attribute-def:schacYearOfBirth"
+
+msgid "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+msgstr "urn:oid:1.3.6.1.4.1.25178.1.0.2.3"
+
+msgid "urn:schac:attribute-def:schacYearOfBirth"
+msgstr "urn:schac:attribute-def:schacYearOfBirth"
+
+msgid "searchGuide"
+msgstr "searchGuide"
+
+msgid "urn:mace:dir:attribute-def:searchGuide"
+msgstr "urn:mace:dir:attribute-def:searchGuide"
+
+msgid "urn:oid:2.5.4.14"
+msgstr "urn:oid:2.5.4.14"
+
+msgid "secretary"
+msgstr "secretary"
+
+msgid "urn:mace:dir:attribute-def:secretary"
+msgstr "urn:mace:dir:attribute-def:secretary"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.21"
+msgstr "urn:oid:0.9.2342.19200300.100.1.21"
+
+msgid "seeAlso"
+msgstr "seeAlso"
+
+msgid "urn:mace:dir:attribute-def:seeAlso"
+msgstr "urn:mace:dir:attribute-def:seeAlso"
+
+msgid "urn:oid:2.5.4.34"
+msgstr "urn:oid:2.5.4.34"
+
+msgid "serialNumber"
+msgstr "serialNumber"
+
+msgid "urn:mace:dir:attribute-def:serialNumber"
+msgstr "urn:mace:dir:attribute-def:serialNumber"
+
+msgid "urn:oid:2.5.4.5"
+msgstr "urn:oid:2.5.4.5"
+
+msgid "singleLevelQuality"
+msgstr "singleLevelQuality"
+
+msgid "urn:mace:dir:attribute-def:singleLevelQuality"
+msgstr "urn:mace:dir:attribute-def:singleLevelQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.50"
+msgstr "urn:oid:0.9.2342.19200300.100.1.50"
+
+msgid "sisSchoolGrade"
+msgstr "sisSchoolGrade"
+
+msgid "urn:mace:dir:attribute-def:sisSchoolGrade"
+msgstr "urn:mace:dir:attribute-def:sisSchoolGrade"
+
+msgid "urn:oid:1.2.752.194.10.2.2"
+msgstr "urn:oid:1.2.752.194.10.2.2"
+
+msgid "sisLegalGuardianFor"
+msgstr "sisLegalGuardianFor"
+
+msgid "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+msgstr "urn:mace:dir:attribute-def:sisLegalGuardianFor"
+
+msgid "urn:oid:1.2.752.194.10.2.1"
+msgstr "urn:oid:1.2.752.194.10.2.1"
+
+# English string: Surname
+msgid "sn"
+msgstr "Isibongo"
+
+# English string: Surname
+msgid "urn:mace:dir:attribute-def:sn"
+msgstr "Isibongo"
+
+# English string: Surname
+msgid "urn:oid:2.5.4.4"
+msgstr "Isibongo"
+
+msgid "st"
+msgstr "st"
+
+msgid "urn:mace:dir:attribute-def:st"
+msgstr "urn:mace:dir:attribute-def:st"
+
+msgid "urn:oid:2.5.4.8"
+msgstr "urn:oid:2.5.4.8"
+
+msgid "stateOrProvinceName"
+msgstr "stateOrProvinceName"
+
+msgid "urn:mace:dir:attribute-def:stateOrProvinceName"
+msgstr "urn:mace:dir:attribute-def:stateOrProvinceName"
+
+# English string: Street
+msgid "street"
+msgstr "Umgwaqo"
+
+# English string: Street
+msgid "urn:mace:dir:attribute-def:street"
+msgstr "Umgwaqo"
+
+# English string: Street
+msgid "urn:oid:2.5.4.9"
+msgstr "Umgwaqo"
+
+msgid "streetAddress"
+msgstr "streetAddress"
+
+msgid "urn:mace:dir:attribute-def:streetAddress"
+msgstr "urn:mace:dir:attribute-def:streetAddress"
+
+# English string: Pseudonymous ID at home organization
+msgid "subject-id"
+msgstr "subject-id"
+
+# English string: Pseudonymous ID at home organization
+msgid "urn:oasis:names:tc:SAML:attribute:subject-id"
+msgstr "urn:oasis:names:tc:SAML:attribute:subject-id"
+
+msgid "subtreeMaximumQuality"
+msgstr "subtreeMaximumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMaximumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.52"
+msgstr "urn:oid:0.9.2342.19200300.100.1.52"
+
+msgid "subtreeMinimumQuality"
+msgstr "subtreeMinimumQuality"
+
+msgid "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+msgstr "urn:mace:dir:attribute-def:subtreeMinimumQuality"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.51"
+msgstr "urn:oid:0.9.2342.19200300.100.1.51"
+
+msgid "supportedAlgorithms"
+msgstr "supportedAlgorithms"
+
+msgid "urn:mace:dir:attribute-def:supportedAlgorithms"
+msgstr "urn:mace:dir:attribute-def:supportedAlgorithms"
+
+msgid "urn:oid:2.5.4.52"
+msgstr "urn:oid:2.5.4.52"
+
+msgid "supportedApplicationContext"
+msgstr "supportedApplicationContext"
+
+msgid "urn:mace:dir:attribute-def:supportedApplicationContext"
+msgstr "urn:mace:dir:attribute-def:supportedApplicationContext"
+
+msgid "urn:oid:2.5.4.30"
+msgstr "urn:oid:2.5.4.30"
+
+msgid "surname"
+msgstr "surname"
+
+msgid "urn:mace:dir:attribute-def:surname"
+msgstr "urn:mace:dir:attribute-def:surname"
+
+# English string: Telephone number
+msgid "telephoneNumber"
+msgstr "Inombolo yocingo"
+
+# English string: Telephone number
+msgid "urn:mace:dir:attribute-def:telephoneNumber"
+msgstr "Inombolo yocingo"
+
+# English string: Telephone number
+msgid "urn:oid:2.5.4.20"
+msgstr "Inombolo yocingo"
+
+msgid "teletexTerminalIdentifier"
+msgstr "teletexTerminalIdentifier"
+
+msgid "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+msgstr "urn:mace:dir:attribute-def:teletexTerminalIdentifier"
+
+msgid "urn:oid:2.5.4.22"
+msgstr "urn:oid:2.5.4.22"
+
+msgid "telexNumber"
+msgstr "telexNumber"
+
+msgid "urn:mace:dir:attribute-def:telexNumber"
+msgstr "urn:mace:dir:attribute-def:telexNumber"
+
+msgid "urn:oid:2.5.4.21"
+msgstr "urn:oid:2.5.4.21"
+
+msgid "textEncodedORAddress"
+msgstr "textEncodedORAddress"
+
+msgid "urn:mace:dir:attribute-def:textEncodedORAddress"
+msgstr "urn:mace:dir:attribute-def:textEncodedORAddress"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.2"
+msgstr "urn:oid:0.9.2342.19200300.100.1.2"
+
+# English string: Title
+msgid "title"
+msgstr "Isiqu"
+
+# English string: Title
+msgid "urn:mace:dir:attribute-def:title"
+msgstr "Isiqu"
+
+# English string: Title
+msgid "urn:oid:2.5.4.12"
+msgstr "Isiqu"
+
+# English string: User ID
+msgid "uid"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "urn:mace:dir:attribute-def:uid"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "urn:oid:0.9.2342.19200300.100.1.1"
+msgstr "I-ID yomsebenzisi"
+
+msgid "uniqueIdentifier"
+msgstr "uniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:uniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:uniqueIdentifier"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.44"
+msgstr "urn:oid:0.9.2342.19200300.100.1.44"
+
+msgid "uniqueMember"
+msgstr "uniqueMember"
+
+msgid "urn:mace:dir:attribute-def:uniqueMember"
+msgstr "urn:mace:dir:attribute-def:uniqueMember"
+
+msgid "urn:oid:2.5.4.50"
+msgstr "urn:oid:2.5.4.50"
+
+msgid "userCertificate"
+msgstr "userCertificate"
+
+msgid "urn:mace:dir:attribute-def:userCertificate"
+msgstr "urn:mace:dir:attribute-def:userCertificate"
+
+msgid "urn:oid:2.5.4.36"
+msgstr "urn:oid:2.5.4.36"
+
+msgid "userClass"
+msgstr "userClass"
+
+msgid "urn:mace:dir:attribute-def:userClass"
+msgstr "urn:mace:dir:attribute-def:userClass"
+
+msgid "urn:oid:0.9.2342.19200300.100.1.8"
+msgstr "urn:oid:0.9.2342.19200300.100.1.8"
+
+msgid "userPKCS12"
+msgstr "userPKCS12"
+
+msgid "urn:mace:dir:attribute-def:userPKCS12"
+msgstr "urn:mace:dir:attribute-def:userPKCS12"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.216"
+msgstr "urn:oid:2.16.840.1.113730.3.1.216"
+
+# English string: User's password hash
+msgid "userPassword"
+msgstr "Uheshi wephasiwedi yomsebenzisi"
+
+# English string: User's password hash
+msgid "urn:mace:dir:attribute-def:userPassword"
+msgstr "Uheshi wephasiwedi yomsebenzisi"
+
+# English string: User's password hash
+msgid "urn:oid:2.5.4.35"
+msgstr "Uheshi wephasiwedi yomsebenzisi"
+
+msgid "userSMIMECertificate"
+msgstr "userSMIMECertificate"
+
+msgid "urn:mace:dir:attribute-def:userSMIMECertificate"
+msgstr "urn:mace:dir:attribute-def:userSMIMECertificate"
+
+msgid "urn:oid:2.16.840.1.113730.3.1.40"
+msgstr "urn:oid:2.16.840.1.113730.3.1.40"
+
+msgid "userid"
+msgstr "userid"
+
+msgid "urn:mace:dir:attribute-def:userid"
+msgstr "urn:mace:dir:attribute-def:userid"
+
+msgid "x121Address"
+msgstr "x121Address"
+
+msgid "urn:mace:dir:attribute-def:x121Address"
+msgstr "urn:mace:dir:attribute-def:x121Address"
+
+msgid "urn:oid:2.5.4.24"
+msgstr "urn:oid:2.5.4.24"
+
+msgid "x500UniqueIdentifier"
+msgstr "x500UniqueIdentifier"
+
+msgid "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+msgstr "urn:mace:dir:attribute-def:x500UniqueIdentifier"
+
+msgid "urn:oid:2.5.4.45"
+msgstr "urn:oid:2.5.4.45"
+
+# English string: Common name
+msgid "facebook_cn"
+msgstr "Igama elivamile"
+
+msgid "http://axschema.org/contact/country/home"
+msgstr "http://axschema.org/contact/country/home"
+
+msgid "openid.sreg.country"
+msgstr "openid.sreg.country"
+
+msgid "facebook.about_me"
+msgstr "facebook.about_me"
+
+msgid "linkedin.summary"
+msgstr "linkedin.summary"
+
+msgid "twitter.description"
+msgstr "twitter.description"
+
+# English string: Display name
+msgid "facebook.name"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson/friendly"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "openid.sreg.nickname"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "http://axschema.org/namePerson"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "openid.sreg.fullname"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "twitter.name"
+msgstr "Igama lesibonisi"
+
+# English string: Display name
+msgid "windowslive.displayName"
+msgstr "Igama lesibonisi"
+
+# English string: Person's principal name at home organization
+msgid "facebook_user"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Person's principal name at home organization
+msgid "linkedin_user"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Person's principal name at home organization
+msgid "twitter_screen_n_realm"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Person's principal name at home organization
+msgid "windowslive_user"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Person's principal name at home organization
+msgid "windowslive.userPrincipalName"
+msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
+
+# English string: Persistent pseudonymous ID
+msgid "facebook_targetedID"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Persistent pseudonymous ID
+msgid "linkedin_targetedID"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Persistent pseudonymous ID
+msgid "twitter_targetedID"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Persistent pseudonymous ID
+msgid "windowslive_targetedID"
+msgstr "Isibizo esingashintshi esiqondene nesevisi"
+
+# English string: Fax number
+msgid "http://axschema.org/contact/phone/fax"
+msgstr "Inombolo yefeksi"
+
+# English string: Given name
+msgid "facebook.first_name"
+msgstr "Igama lokuzalwa"
+
+# English string: Given name
+msgid "linkedin.firstName"
+msgstr "Igama lokuzalwa"
+
+# English string: Given name
+msgid "http://axschema.org/namePerson/first"
+msgstr "Igama lokuzalwa"
+
+# English string: Given name
+msgid "windowslive.FirstName"
+msgstr "Igama lokuzalwa"
+
+# English string: Given name
+msgid "windowslive.givenName"
+msgstr "Igama lokuzalwa"
+
+# English string: Home telephone
+msgid "http://axschema.org/contact/phone/home"
+msgstr "Ucingo lwasekhaya"
+
+# English string: Locality
+msgid "windowslive.Location"
+msgstr "Indawo"
+
+# English string: Labeled URI
+msgid "facebook.profile_url"
+msgstr "I-URI Enelebula"
+
+# English string: Labeled URI
+msgid "twitter.url"
+msgstr "I-URI Enelebula"
+
+# English string: Mail
+msgid "facebook.email"
+msgstr "Imeyili"
+
+# English string: Mail
+msgid "http://axschema.org/contact/email"
+msgstr "Imeyili"
+
+# English string: Mail
+msgid "openid.sreg.email"
+msgstr "Imeyili"
+
+# English string: Mail
+msgid "windowslive_mail"
+msgstr "Imeyili"
+
+# English string: Mail
+msgid "windowslive.mail"
+msgstr "Imeyili"
+
+# English string: Mobile
+msgid "http://axschema.org/contact/phone/cell"
+msgstr "Imobhayili"
+
+# English string: Organization name
+msgid "http://axschema.org/company/name"
+msgstr "Igama lenhlangano"
+
+msgid "http://axschema.org/namePerson/prefix"
+msgstr "http://axschema.org/namePerson/prefix"
+
+# English string: Postal code
+msgid "http://axschema.org/contact/postalCode/home"
+msgstr "Ikhodi yeposi"
+
+# English string: Postal code
+msgid "openid.sreg.postcode"
+msgstr "Ikhodi yeposi"
+
+# English string: Preferred language
+msgid "facebook.locale"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Preferred language
+msgid "http://axschema.org/pref/language"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Preferred language
+msgid "openid.sreg.language"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Preferred language
+msgid "twitter.lang"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Preferred language
+msgid "windowslive.preferredLanguage"
+msgstr "Ulimi oluncanyelwayo"
+
+# English string: Surname
+msgid "facebook.last_name"
+msgstr "Isibongo"
+
+# English string: Surname
+msgid "linkedin.lastName"
+msgstr "Isibongo"
+
+# English string: Surname
+msgid "http://axschema.org/namePerson/last"
+msgstr "Isibongo"
+
+# English string: Surname
+msgid "windowslive.LastName"
+msgstr "Isibongo"
+
+# English string: Surname
+msgid "windowslive.surname"
+msgstr "Isibongo"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/default"
+msgstr "Inombolo yocingo"
+
+# English string: Telephone number
+msgid "http://axschema.org/contact/phone/business"
+msgstr "Inombolo yocingo"
+
+# English string: Title
+msgid "linkedin.headline"
+msgstr "Isiqu"
+
+# English string: Title
+msgid "http://axschema.org/company/title"
+msgstr "Isiqu"
+
+# English string: User ID
+msgid "facebook.username"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "linkedin.id"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "twitter.screen_name"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "windowslive_uid"
+msgstr "I-ID yomsebenzisi"
+
+# English string: User ID
+msgid "windowslive.id"
+msgstr "I-ID yomsebenzisi"
diff --git a/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/messages.po b/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/messages.po
index 52b41aa0ff..e9a14aafe8 100644
--- a/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/messages.po
+++ b/vendor/simplesamlphp/simplesamlphp/locales/zu/LC_MESSAGES/messages.po
@@ -36,33 +36,15 @@ msgstr ""
 "Ulwazi lwesifunda lulahlekile, futhi ayikho indlela yokuqala kabusha "
 "isicelo"
 
-msgid "{attributes:attribute_postaladdress}"
-msgstr "Ikheli leposi"
-
 msgid "{errors:title_SSOPARAMS}"
 msgstr "Asikho isicelo se-SAML esinikeziwe"
 
-msgid "{attributes:attribute_ou}"
-msgstr "Iyunithi yenhlangano"
-
-msgid "{status:header_wsfed}"
-msgstr "Isibonelo Sedemo ye-WS-Fed SP"
-
 msgid "{errors:descr_CASERROR}"
 msgstr "Iphutha ngenkathi kuxhunyanwa neseva ye-CAS."
 
-msgid "{attributes:attribute_noreduorgnin}"
-msgstr "Inombolo yenhlangano"
-
-msgid "{attributes:attribute_homephone}"
-msgstr "Ucingo lwasekhaya"
-
 msgid "{errors:title_SLOSERVICEPARAMS}"
 msgstr "Awukho umlayezo we-SAML onikeziwe"
 
-msgid "{attributes:attribute_uid}"
-msgstr "I-ID yomsebenzisi"
-
 msgid "{login:error_nopassword}"
 msgstr ""
 "Uthumele okuthile ekhasini lokungena, kodwa ngasizathu simbe iphasiwedi "
@@ -78,18 +60,12 @@ msgstr ""
 msgid "{status:authData_header}"
 msgstr "I-AuthData"
 
-msgid "{attributes:attribute_facsimiletelephonenumber}"
-msgstr "Inombolo yefeksi"
-
 msgid "{errors:title_BADREQUEST}"
 msgstr "Kutholwe umlayezo ongalungile"
 
 msgid "{login:login_button}"
 msgstr "Ngena"
 
-msgid "{status:validfor}"
-msgstr "Iseshini yakho isebenza imizuzwana engu-%SECONDS% ukusuka manje."
-
 msgid "{status:header_shib}"
 msgstr "Idemo ye-Shibboleth"
 
@@ -99,9 +75,6 @@ msgstr "[Ukukhetha okuncanyelwayo]"
 msgid "{errors:descr_BADREQUEST}"
 msgstr "Kukhona iphutha kusicelo saleli khasi. Isizathu besithi: %REASON%"
 
-msgid "{attributes:attribute_homepostaladdress}"
-msgstr "Ikheli leposi lasekhaya"
-
 msgid "{login:help_header}"
 msgstr "Siza! Angiyikhumbuli iphasiwedi yami."
 
@@ -114,9 +87,6 @@ msgstr "Iphutha lokulayisha imethadatha"
 msgid "{errors:title_LOGOUTREQUEST}"
 msgstr "Iphutha lokucubungula Isicelo Sokuphuma"
 
-msgid "{attributes:attribute_schacuserprivateattribute}"
-msgstr "Izingxenye zolwazi oluyimfihlo"
-
 msgid "{logout:hold}"
 msgstr "Imisiwe"
 
@@ -137,9 +107,6 @@ msgstr "Kuvele iphutha ngenkathi izama ukwakha isicelo se-SAML."
 msgid "{login:help_desk_link}"
 msgstr "Ikhasi lasekhaya ledeski losizo"
 
-msgid "{attributes:attribute_cn}"
-msgstr "Igama elivamile"
-
 msgid "{errors:debuginfo_header}"
 msgstr "Ulwazi lokususwa kwephutha"
 
@@ -170,9 +137,6 @@ msgstr "Khumbula ukukhetha kwami"
 msgid "{general:remember}"
 msgstr "Khumbula"
 
-msgid "{attributes:attribute_edupersonprincipalname}"
-msgstr "Igama eliyinhloko lomuntu enhlanganweni yasekhaya"
-
 msgid "{errors:title_PROCESSASSERTION}"
 msgstr "Iphutha lokucubungula impendulo esuka Kumhlinzeki Kamazisi"
 
@@ -204,9 +168,6 @@ msgstr "Kuqedile"
 msgid "{status:subject_header}"
 msgstr "Isihloko Se-SAML"
 
-msgid "{attributes:attribute_schachomeorganization}"
-msgstr "Igama lesizinda senhlangano yasekhaya"
-
 msgid "{errors:descr_LOGOUTINFOLOST}"
 msgstr ""
 "Ulwazi olumayelana nomsebenzi wokuphuma wamanje lulahlekile. Kufanele "
@@ -217,9 +178,6 @@ msgstr ""
 "leli phutha lingase libonise elinye iphutha ngomiso. Uma inkinga "
 "iphikelela, thinta umhlinzeki wakho wesevisi."
 
-msgid "{attributes:attribute_noredupersonlin}"
-msgstr "Inombolo kamazisi yasendaweni"
-
 msgid "{status:subject_notset}"
 msgstr "akusethiwe"
 
@@ -229,15 +187,9 @@ msgstr "Iphutha litholwe ukusuka Kumhlinzeki Kamazisi"
 msgid "{disco:selectidp}"
 msgstr "Khetha umhlinzeki wakho kamazisi"
 
-msgid "{attributes:attribute_edupersonorgdn}"
-msgstr "Igama elihloniphekile (I-DN) lenhlangano yasekhaya yomuntu"
-
 msgid "{errors:title_NOTSET}"
 msgstr "Iphasiwedi ayisethiwe"
 
-msgid "{attributes:attribute_edupersonaffiliation}"
-msgstr "Indima"
-
 msgid "{login:user_pass_text}"
 msgstr ""
 "Isevisi icele ukuthi uziqinisekise. Sicela ufake igama lakho lomsebenzisi"
@@ -249,9 +201,6 @@ msgstr "Cha, ku-%SP% kuphela"
 msgid "{login:username}"
 msgstr "Igama lomsebenzisi"
 
-msgid "{attributes:attribute_edupersonprimaryorgunitdn}"
-msgstr "Igama elihloniphekile (I-DN) Leyunithi Yenhlangano eyinhloko yomuntu"
-
 msgid "{errors:error_header}"
 msgstr "Iphutha le-SimpleSAMLphp"
 
@@ -281,24 +230,15 @@ msgstr ""
 "Lo Mhlinzeki Kamazisi uthole Isicelo Sokuqinisekisa ukusuka Kumhlinzeki "
 "Wesevisi, kodw,a kuvele iphutha ngenkathi ezama ukucubungula isicelo."
 
-msgid "{attributes:attribute_mobile}"
-msgstr "Imobhayili"
-
 msgid "{login:remember_me}"
 msgstr "Ngikhumbule"
 
 msgid "{disco:previous_auth}"
 msgstr "Ngaphambilini ukhethe ukuqinisekisa kokuthi"
 
-msgid "{attributes:attribute_l}"
-msgstr "Indawo"
-
 msgid "{general:yes_continue}"
 msgstr "Yebo, qhubeka"
 
-msgid "{attributes:attribute_organisationname}"
-msgstr "Igama lenhlangano"
-
 msgid "{login:remember_username}"
 msgstr "Khumbula igama lami lomsebenzisi"
 
@@ -308,9 +248,6 @@ msgstr "Ayikho impendulo ye-SAML enikeziwe"
 msgid "{login:user_pass_header}"
 msgstr "Faka igama lakho lomsebenzisi nephasiwedi"
 
-msgid "{attributes:attribute_jpegphoto}"
-msgstr "Isithombe se-JPEG"
-
 msgid "{logout:logging_out_from}"
 msgstr "Iyaphuma kumasevisi alandelayo:"
 
@@ -331,29 +268,17 @@ msgstr ""
 "Ulwazi lokususwa kwephutha olungezansi lungase lukhange kumlawuli / "
 "ideski losizo:"
 
-msgid "{attributes:attribute_edupersontargetedid}"
-msgstr "Isibizo esingashintshi esiqondene nesevisi"
-
 msgid "{errors:descr_NOTFOUNDREASON}"
 msgstr ""
 "Ikhasi elinikeziwe alitholakalanga. Isizathu besithi: %REASON%  I-URL "
 "ibithi: %URL%"
 
-msgid "{attributes:attribute_noredupersonbirthdate}"
-msgstr "Usuku lokuzalwa"
-
 msgid "{logout:success}"
 msgstr "Uphume ngempumelelo kuwo wonke amasevisi abhalwe ngenhla."
 
 msgid "{login:error_wrongpassword}"
 msgstr "Igama lomsebenzisi noma iphasiwedi engalungile."
 
-msgid "{attributes:attribute_edupersonprimaryaffiliation}"
-msgstr "Indima eyinhloko"
-
-msgid "{attributes:attribute_sn}"
-msgstr "Isibongo"
-
 msgid "{login:error_header}"
 msgstr "Iphutha"
 
@@ -368,9 +293,6 @@ msgstr ""
 "Ukuqinisekisa kuhlulekile: isitifiketi esithunyelwe isiphequluli sakho "
 "asaziwa"
 
-msgid "{attributes:attribute_noredupersonnin}"
-msgstr "Inombolo kamazisi eyabelwe amagunya omphakathi"
-
 msgid "{errors:descr_RESPONSESTATUSNOSUCCESS}"
 msgstr ""
 "Umhlinzeki Womazisi uphendule ngephutha. (Ikhodi yesimo Sempendulo ye-"
@@ -379,18 +301,12 @@ msgstr ""
 msgid "{general:service_provider}"
 msgstr "Umhlinzeki Wesevisi"
 
-msgid "{attributes:attribute_edupersonnickname}"
-msgstr "Isidlaliso"
-
 msgid "{errors:descr_DISCOPARAMS}"
 msgstr "Amapharamitha athunyelwe kusevisi yokuthola abengavumelani nezici."
 
 msgid "{status:header_saml20_sp}"
 msgstr "Isampula Ledemo Ye-SAML 2.0 SP"
 
-msgid "{attributes:attribute_edupersonorgunitdn}"
-msgstr "Igama elihloniphekile (I-DN) leyunithi yenhlangano yasekhaya yomuntu"
-
 msgid "{errors:descr_INVALIDCERT}"
 msgstr ""
 "Ukuqinisekisa kuhlulekile: isitifiketi esithunyelwe isiphequluli sakho "
@@ -399,9 +315,6 @@ msgstr ""
 msgid "{login:change_home_org_button}"
 msgstr "Khetha inhlangano yasekhaya"
 
-msgid "{attributes:attribute_eduorglegalname}"
-msgstr "Igama elisemthethweni lenhlangano"
-
 msgid "{status:logout}"
 msgstr "Phuma"
 
@@ -410,18 +323,9 @@ msgstr ""
 "Iphasiwedi kumiso (auth.adminpassword) ayishintshiwe kunani "
 "elizenzakalelayo. Sicela uhlele ifayela lomiso."
 
-msgid "{attributes:attribute_givenname}"
-msgstr "Igama lokuzalwa"
-
 msgid "{errors:title_AUTHSOURCEERROR}"
 msgstr "Iphutha lomthombo wokuqinisekisa"
 
-msgid "{attributes:attribute_manager}"
-msgstr "Umphathi"
-
-msgid "{attributes:attribute_edupersonentitlement}"
-msgstr "Ilungelo eliphathelene nesevisi"
-
 msgid "{errors:title_UNHANDLEDEXCEPTION}"
 msgstr "Okuhlukile okungasingathiwe"
 
@@ -431,12 +335,6 @@ msgstr "Amaphutha ombiko"
 msgid "{errors:descr_LOGOUTREQUEST}"
 msgstr "Kuvele iphutha ngenkathi izama ukucubungula Isicelo Sokuphuma."
 
-msgid "{attributes:attribute_postalcode}"
-msgstr "Ikhodi yeposi"
-
-msgid "{attributes:attribute_street}"
-msgstr "Umgwaqo"
-
 msgid "{errors:title_NOTVALIDCERT}"
 msgstr "Isitifiketi esingalungile"
 
@@ -463,18 +361,9 @@ msgstr ""
 " kube nokwenzeka ukuthola iseshini yakho kumalogi atholakalayo kumlawuli "
 "wesistimu:"
 
-msgid "{attributes:attribute_displayname}"
-msgstr "Igama lesibonisi"
-
-msgid "{attributes:attribute_eduorghomepageuri}"
-msgstr "Ikhasi lasekhaya lenhlangano"
-
 msgid "{login:change_home_org_title}"
 msgstr "Shintsha inhlangano yakho yasekhaya"
 
-msgid "{attributes:attribute_edupersonorcid}"
-msgstr "Isihlonzi se-ORCID"
-
 msgid "{errors:title_UNKNOWNCERT}"
 msgstr "Isitifiketi esingaziwa"
 
@@ -487,12 +376,6 @@ msgstr "Asikho isitifiketi"
 msgid "{errors:descr_UNHANDLEDEXCEPTION}"
 msgstr "Okuhlukile okungasingathiwe kulahliwe."
 
-msgid "{attributes:attribute_title}"
-msgstr "Isiqu"
-
-msgid "{attributes:attribute_dc}"
-msgstr "Ingxenye yesizinda (I-DC)"
-
 msgid "{errors:title_CREATEREQUEST}"
 msgstr "Iphutha lokwakha isicelo"
 
@@ -508,12 +391,6 @@ msgstr "Asizange samukele impendulo ethunyelwe ukusuka Kumhlinzeki Kamazisi."
 msgid "{disco:selectidp_full}"
 msgstr "Sicela ukhethe umhlinzeki kamazisi lapho ofuna ukuqinisekisa khona:"
 
-msgid "{attributes:attribute_edupersonassurance}"
-msgstr "Iphrofayela yokuqinisekisa umazisi"
-
-msgid "{attributes:attribute_ismemberof}"
-msgstr "Ubulungu beqembu"
-
 msgid "{logout:failedsps}"
 msgstr ""
 "Ayikwazi ukuphuma kusevisi eyodwa noma ngaphezulu. Ukuze wenze "
@@ -534,9 +411,6 @@ msgstr "Buyela emuva ekhasini lokufaka le-SimpleSAMLphp"
 msgid "{errors:descr_CONFIG}"
 msgstr "I-SimpleSAMLphp ibonakala ingamisiwe ngendlela efanele."
 
-msgid "{attributes:attribute_preferredlanguage}"
-msgstr "Ulimi oluncanyelwayo"
-
 msgid "{errors:title_DISCOPARAMS}"
 msgstr "Isicelo esingalungile sesevisi yokuthola"
 
@@ -564,9 +438,6 @@ msgstr "Ungenile futhi kulawa masevisi:"
 msgid "{logout:logout_all_question}"
 msgstr "Ingabe ufuna ukuphuma kuwo wonke amasevisi angenhla?"
 
-msgid "{attributes:attribute_o}"
-msgstr "Igama lenhlangano"
-
 msgid "{logout:loggedoutfrom}"
 msgstr "Usuphume ngempumelelo kokuthi %SP%."
 
@@ -599,9 +470,6 @@ msgstr ""
 "uhlinzeke umlayezo we-SAML ArtifactResolve. Sicela uphawule ukuthi "
 "isiphetho asihloselwe ukufinyelelwa ngokuqondile."
 
-msgid "{attributes:attribute_edupersonscopedaffiliation}"
-msgstr "Indima enhlanganweni yasekhaya"
-
 msgid "{errors:title_MEMCACHEDOWN}"
 msgstr "Ayikwazi ukubuyisela idatha yeseshini"
 
@@ -632,14 +500,6 @@ msgstr "Uphume ngemvume"
 msgid "{errors:report_explain}"
 msgstr "Chaza ukuthi yini oyenzile ngenkathi kuvela leli phutha..."
 
-msgid "{attributes:attribute_telephonenumber}"
-msgstr "Inombolo yocingo"
-
-msgid "{attributes:attribute_edupersonuniqueid}"
-msgstr ""
-"I-ID yesibizo ephikelelayo, engakwazi ukwabelwa kabusha yomuntu "
-"yenhlangano yasekhaya"
-
 msgid "{logout:failed}"
 msgstr "Ukuphuma kuhlulekile"
 
@@ -661,29 +521,14 @@ msgstr ""
 "engalindelwe noma umiso olungafanele lwe-SimpleSAMLphp. Thinta umlawuli "
 "wale sevisi yokungena, bese umthumela umlayezo wephutha ongenhla."
 
-msgid "{attributes:attribute_userpassword}"
-msgstr "Uheshi wephasiwedi yomsebenzisi"
-
 msgid "{errors:report_text}"
 msgstr ""
 "Faka ngokuzithandela ikheli lakho le-imeyili, ukuze abalawuli bakwazi "
 "ukukuthinta ngemibuzo eyengeziwe mayelana nenkinga yakho:"
 
-msgid "{attributes:attribute_mail}"
-msgstr "Imeyili"
-
 msgid "{logout:progress}"
 msgstr "Iyaphuma..."
 
-msgid "{attributes:attribute_labeleduri}"
-msgstr "I-URI Enelebula"
-
 msgid "{login:select_home_org}"
 msgstr "Khetha inhlangano yakho yasekhaya"
 
-msgid "{attributes:attribute_noredupersonlegalname}"
-msgstr "Igama elisemthethweni"
-
-msgid "{attributes:attribute_postofficebox}"
-msgstr "Ibhokisi lehhovisi leposi"
-
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-hosted.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-hosted.php
index ecb05ce111..79dc926d6a 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-hosted.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-hosted.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 2.0 IdP configuration for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-remote.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-remote.php
index d390647e6c..264e8bcdb7 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-remote.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-idp-remote.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 2.0 remote IdP metadata for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-sp-remote.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-sp-remote.php
index a9940e8202..0b0315ce02 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-sp-remote.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/saml20-sp-remote.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 2.0 remote SP metadata for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-hosted.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-hosted.php
index 28ccc42b33..dc6c9e0a95 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-hosted.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-hosted.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 1.1 IdP configuration for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-remote.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-remote.php
index 69c1ef324e..9aa6f0e647 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-remote.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-idp-remote.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 1.1 remote IdP metadata for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-hosted.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-hosted.php
index e3581c9b86..15a275a383 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-hosted.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-hosted.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 1.1 SP configuration for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-remote.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-remote.php
index f60174e288..b2fb1d8e0a 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-remote.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/shib13-sp-remote.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * SAML 1.1 remote SP metadata for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-idp-remote.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-idp-remote.php
index 214679ce37..05732c664d 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-idp-remote.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-idp-remote.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * WS-Federation remote IdP metadata for SimpleSAMLphp.
  */
diff --git a/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-sp-hosted.php b/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-sp-hosted.php
index 5ebdf21c19..bb123b9411 100644
--- a/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-sp-hosted.php
+++ b/vendor/simplesamlphp/simplesamlphp/metadata-templates/wsfed-sp-hosted.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * WS-Federation SP configuration for SimpleSAMLphp.
  *
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/adfs/.php_cs.dist
new file mode 100644
index 0000000000..51854a2840
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www/idp',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/adfs/.travis.yml
new file mode 100644
index 0000000000..fec43ab41a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/adfs/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/adfs/bin/check-syntax.sh
new file mode 100755
index 0000000000..8fc2e8e342
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib templates tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/jaimeperez/twig-configurable-i18n/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/adfs/codecov.yml
similarity index 100%
rename from vendor/jaimeperez/twig-configurable-i18n/.codecov.yml
rename to vendor/simplesamlphp/simplesamlphp/modules/adfs/codecov.yml
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/adfs/composer.json
new file mode 100644
index 0000000000..eae34314e6
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-adfs",
+    "description": "A module that implements the WS-federation IDP",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "adfs"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\adfs\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "webmozart/assert": "<1.7",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-adfs/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-adfs"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/AdfsController.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/AdfsController.php
new file mode 100644
index 0000000000..47eeb88f23
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/AdfsController.php
@@ -0,0 +1,287 @@
+<?php
+
+namespace SimpleSAML\Module\adfs;
+
+use SAML2\Constants;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error as SspError;
+use SimpleSAML\IdP;
+use SimpleSAML\Locale\Translate;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Module\adfs\IdP\ADFS;
+use SimpleSAML\Metadata;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\StreamedResponse;
+use Webmozart\Assert\Assert;
+
+/**
+ * Controller class for the adfs module.
+ *
+ * This class serves the adfs views available in the module.
+ *
+ * @package SimpleSAML\Module\adfs
+ */
+class AdfsController
+{
+    /** @var \SimpleSAML\Configuration */
+    protected $config;
+
+    /** @var \SimpleSAML\Metadata\MetaDataStorageHandler */
+    protected $metadata;
+
+    /** @var \SimpleSAML\Session */
+    protected $session;
+
+    /**
+     * AdfsController constructor.
+     *
+     * @param \SimpleSAML\Configuration $config The configuration to use.
+     * @param \SimpleSAML\Session $session The current user session.
+     */
+    public function __construct(Configuration $config, Session $session)
+    {
+        $this->config = $config;
+        $this->metadata = Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $this->session = $session;
+    }
+
+
+    /**
+     * @param \Symfony\Component\HttpFoundation\Request $request
+     * @return \Symfony\Component\HttpFoundation\Response|\SimpleSAML\XHTML\Template
+     */
+    public function metadata(Request $request)
+    {
+        if (!$this->config->getBoolean('enable.adfs-idp', false)) {
+            throw new SspError\Error('NOACCESS');
+        }
+
+        // check if valid local session exists
+        if ($this->config->getBoolean('admin.protectmetadata', false)) {
+            Utils\Auth::requireAdmin();
+        }
+
+        try {
+            $idpentityid = isset($_GET['idpentityid']) ?
+                $_GET['idpentityid'] : $this->metadata->getMetaDataCurrentEntityID('adfs-idp-hosted');
+            $idpmeta = $this->metadata->getMetaDataConfig($idpentityid, 'adfs-idp-hosted');
+
+            $availableCerts = [];
+            $keys = [];
+            $certInfo = Utils\Crypto::loadPublicKey($idpmeta, false, 'new_');
+
+            if ($certInfo !== null) {
+                $availableCerts['new_idp.crt'] = $certInfo;
+                $keys[] = [
+                    'type'            => 'X509Certificate',
+                    'signing'         => true,
+                    'encryption'      => true,
+                    'X509Certificate' => $certInfo['certData'],
+                ];
+                $hasNewCert = true;
+            } else {
+                $hasNewCert = false;
+            }
+
+            /** @var array $certInfo */
+            $certInfo = Utils\Crypto::loadPublicKey($idpmeta, true);
+            $availableCerts['idp.crt'] = $certInfo;
+            $keys[] = [
+                'type'            => 'X509Certificate',
+                'signing'         => true,
+                'encryption'      => ($hasNewCert ? false : true),
+                'X509Certificate' => $certInfo['certData'],
+            ];
+
+            if ($idpmeta->hasValue('https.certificate')) {
+                /** @var array $httpsCert */
+                $httpsCert = Utils\Crypto::loadPublicKey($idpmeta, true, 'https.');
+                Assert::keyExists($httpsCert, 'certData');
+                $availableCerts['https.crt'] = $httpsCert;
+                $keys[] = [
+                    'type'            => 'X509Certificate',
+                    'signing'         => true,
+                    'encryption'      => false,
+                    'X509Certificate' => $httpsCert['certData'],
+                ];
+            }
+
+            $adfs_service_location = Module::getModuleURL('adfs').'/idp/prp.php';
+            $metaArray = [
+                'metadata-set'        => 'adfs-idp-remote',
+                'entityid'            => $idpentityid,
+                'SingleSignOnService' => [
+                    0 => [
+                        'Binding'  => Constants::BINDING_HTTP_REDIRECT,
+                        'Location' => $adfs_service_location
+                    ]
+                ],
+                'SingleLogoutService' => [
+                    0 => [
+                        'Binding'  => Constants::BINDING_HTTP_REDIRECT,
+                        'Location' => $adfs_service_location
+                    ]
+                ],
+            ];
+
+            if (count($keys) === 1) {
+                $metaArray['certData'] = $keys[0]['X509Certificate'];
+            } else {
+                $metaArray['keys'] = $keys;
+            }
+
+            $metaArray['NameIDFormat'] = $idpmeta->getString(
+                'NameIDFormat',
+                Constants::NAMEID_TRANSIENT
+            );
+
+            if ($idpmeta->hasValue('OrganizationName')) {
+                $metaArray['OrganizationName'] = $idpmeta->getLocalizedString('OrganizationName');
+                $metaArray['OrganizationDisplayName'] = $idpmeta->getLocalizedString(
+                    'OrganizationDisplayName',
+                    $metaArray['OrganizationName']
+                );
+
+                if (!$idpmeta->hasValue('OrganizationURL')) {
+                    throw new SspError\Exception('If OrganizationName is set, OrganizationURL must also be set.');
+                }
+                $metaArray['OrganizationURL'] = $idpmeta->getLocalizedString('OrganizationURL');
+            }
+
+            if ($idpmeta->hasValue('scope')) {
+                $metaArray['scope'] = $idpmeta->getArray('scope');
+            }
+
+            if ($idpmeta->hasValue('EntityAttributes')) {
+                $metaArray['EntityAttributes'] = $idpmeta->getArray('EntityAttributes');
+            }
+
+            if ($idpmeta->hasValue('UIInfo')) {
+                $metaArray['UIInfo'] = $idpmeta->getArray('UIInfo');
+            }
+
+            if ($idpmeta->hasValue('DiscoHints')) {
+                $metaArray['DiscoHints'] = $idpmeta->getArray('DiscoHints');
+            }
+
+            if ($idpmeta->hasValue('RegistrationInfo')) {
+                $metaArray['RegistrationInfo'] = $idpmeta->getArray('RegistrationInfo');
+            }
+
+            $metaflat = '$metadata['.var_export($idpentityid, true).'] = '.var_export($metaArray, true).';';
+
+            $metaBuilder = new Metadata\SAMLBuilder($idpentityid);
+            $metaBuilder->addSecurityTokenServiceType($metaArray);
+            $metaBuilder->addOrganizationInfo($metaArray);
+            $technicalContactEmail = $this->config->getString('technicalcontact_email', null);
+            if ($technicalContactEmail && $technicalContactEmail !== 'na@example.org') {
+                $metaBuilder->addContact('technical', Utils\Config\Metadata::getContact([
+                    'emailAddress' => $technicalContactEmail,
+                    'name'         => $this->config->getString('technicalcontact_name', null),
+                    'contactType'  => 'technical',
+                ]));
+            }
+            $output_xhtml = array_key_exists('output', $_GET) && $_GET['output'] == 'xhtml';
+            $metaxml = $metaBuilder->getEntityDescriptorText($output_xhtml);
+            if (!$output_xhtml) {
+                $metaxml = str_replace("\n", '', $metaxml);
+            }
+
+            // sign the metadata if enabled
+            $metaxml = Metadata\Signer::sign($metaxml, $idpmeta->toArray(), 'ADFS IdP');
+
+            if ($output_xhtml) {
+                $t = new Template($this->config, 'metadata.php', 'admin');
+
+                $t->data['clipboard.js'] = true;
+                $t->data['available_certs'] = $availableCerts;
+                $certdata = [];
+                foreach (array_keys($availableCerts) as $availableCert) {
+                    $certdata[$availableCert]['name'] = $availableCert;
+                    $certdata[$availableCert]['url'] = Module::getModuleURL('saml/idp/certs.php').
+                        '/'.$availableCert;
+
+                    $certdata[$availableCert]['comment'] = '';
+                    if ($availableCerts[$availableCert]['certFingerprint'][0] === 'afe71c28ef740bc87425be13a2263d37971da1f9') {
+                        $certdata[$availableCert]['comment'] = 'This is the default certificate.'.
+                            ' Generate a new certificate if this is a production system.';
+                    }
+                }
+                $t->data['certdata'] = $certdata;
+                $t->data['header'] = 'adfs-idp'; // TODO: Replace with headerString in 2.0
+                $t->data['headerString'] = Translate::noop('metadata_adfs-idp');
+                $t->data['metaurl'] = Utils\HTTP::getSelfURLNoQuery();
+                $t->data['metadata'] = htmlspecialchars($metaxml);
+                $t->data['metadataflat'] = htmlspecialchars($metaflat);
+
+                return $t;
+            } else {
+                // make sure to export only the md:EntityDescriptor
+                $i = strpos($metaxml, '<md:EntityDescriptor');
+                $metaxml = substr($metaxml, $i ? $i : 0);
+
+                // 22 = strlen('</md:EntityDescriptor>')
+                $i = strrpos($metaxml, '</md:EntityDescriptor>');
+                $metaxml = substr($metaxml, 0, $i ? $i + 22 : 0);
+
+                $response = new Response();
+                $response->headers->set('Content-Type', 'application/xml');
+                $response->setContent($metaxml);
+
+                return $response;
+            }
+        } catch (\Exception $exception) {
+            throw new SspError\Error('METADATA', $exception);
+        }
+    }
+
+
+    /**
+     * @param \Symfony\Component\HttpFoundation\Request $request
+     * @return \Symfony\Component\HttpFoundation\Response
+     */
+    public function prp(Request $request)
+    {
+        Logger::info('ADFS - IdP.prp: Accessing ADFS IdP endpoint prp');
+
+        $idpEntityId = $this->metadata->getMetaDataCurrentEntityID('adfs-idp-hosted');
+        $idp = IdP::getById('adfs:'.$idpEntityId);
+
+        if (isset($_GET['wa'])) {
+            if ($_GET['wa'] === 'wsignout1.0') {
+                return new StreamedResponse(
+                    /** @return void */
+                    function () use ($idp) {
+                        ADFS::receiveLogoutMessage($idp);
+                    }
+                );
+            } elseif ($_GET['wa'] === 'wsignin1.0') {
+                return new StreamedResponse(
+                    /** @return void */
+                    function () use ($idp) {
+                        ADFS::receiveAuthnRequest($idp);
+                    }
+                );
+            }
+            throw new SspError\BadRequest("Unsupported value for 'wa' specified in request.");
+        } elseif (isset($_GET['assocId'])) {
+            // logout response from ADFS SP
+            $assocId = $_GET['assocId']; // Association ID of the SP that sent the logout response
+            $relayState = $_GET['relayState']; // Data that was sent in the logout request to the SP. Can be null
+            $logoutError = null; // null on success, or an instance of a \SimpleSAML\Error\Exception on failure.
+
+            return new StreamedResponse(
+                /** @return void */
+                function () use ($idp, $assocId, $relayState, $logoutError) {
+                    $idp->handleLogoutResponse($assocId, $relayState, $logoutError);
+                }
+            );
+        }
+        throw new SspError\BadRequest("Missing parameter 'wa' or 'assocId' in request.");
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/IdP/ADFS.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/IdP/ADFS.php
index 449c25e7d5..5c9f8f2315 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/IdP/ADFS.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/IdP/ADFS.php
@@ -4,11 +4,20 @@
 
 use RobRichards\XMLSecLibs\XMLSecurityDSig;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use SAML2\Constants;
+
 use SimpleSAML\Utils\Config\Metadata;
 use SimpleSAML\Utils\Crypto;
+use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Utils\Time;
 
 class ADFS
 {
+    /**
+     * @param \SimpleSAML\IdP $idp
+     * @return void
+     * @throws \SimpleSAML\Error\Error
+     */
     public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
     {
         try {
@@ -35,21 +44,36 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
         ];
 
         if (isset($query['wreply']) && !empty($query['wreply'])) {
-            $state['adfs:wreply'] = \SimpleSAML\Utils\HTTP::checkURLAllowed($query['wreply']);
+            $state['adfs:wreply'] = HTTP::checkURLAllowed($query['wreply']);
         }
 
         $idp->handleAuthenticationRequest($state);
     }
 
+
+    /**
+     * @param string $issuer
+     * @param string $target
+     * @param string $nameid
+     * @param array $attributes
+     * @param int $assertionLifetime
+     * @return string
+     */
     private static function generateResponse($issuer, $target, $nameid, $attributes, $assertionLifetime)
     {
-        $issueInstant = \SimpleSAML\Utils\Time::generateTimestamp();
-        $notBefore = \SimpleSAML\Utils\Time::generateTimestamp(time() - 30);
-        $assertionExpire = \SimpleSAML\Utils\Time::generateTimestamp(time() + $assertionLifetime);
+        $issueInstant = Time::generateTimestamp();
+        $notBefore = Time::generateTimestamp(time() - 30);
+        $assertionExpire = Time::generateTimestamp(time() + $assertionLifetime);
         $assertionID = \SimpleSAML\Utils\Random::generateID();
         $nameidFormat = 'http://schemas.xmlsoap.org/claims/UPN';
         $nameid = htmlspecialchars($nameid);
 
+        if (HTTP::isHTTPS()) {
+            $method = Constants::AC_PASSWORD_PROTECTED_TRANSPORT;
+        } else {
+            $method = Constants::AC_PASSWORD;
+        }
+
         $result = <<<MSG
 <wst:RequestSecurityTokenResponse xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust">
     <wst:RequestedSecurityToken>
@@ -59,7 +83,7 @@ private static function generateResponse($issuer, $target, $nameid, $attributes,
                     <saml:Audience>$target</saml:Audience>
                 </saml:AudienceRestrictionCondition>
             </saml:Conditions>
-            <saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified" AuthenticationInstant="$issueInstant">
+            <saml:AuthenticationStatement AuthenticationMethod="$method" AuthenticationInstant="$issueInstant">
                 <saml:Subject>
                     <saml:NameIdentifier Format="$nameidFormat">$nameid</saml:NameIdentifier>
                 </saml:Subject>
@@ -108,6 +132,15 @@ private static function generateResponse($issuer, $target, $nameid, $attributes,
         return $result;
     }
 
+
+    /**
+     * @param string $response
+     * @param string $key
+     * @param string $cert
+     * @param string $algo
+     * @param string|null $passphrase
+     * @return string
+     */
     private static function signResponse($response, $key, $cert, $algo, $passphrase)
     {
         $objXMLSecDSig = new XMLSecurityDSig();
@@ -115,6 +148,11 @@ private static function signResponse($response, $key, $cert, $algo, $passphrase)
         $objXMLSecDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N);
         $responsedom = \SAML2\DOMDocumentFactory::fromString(str_replace("\r", "", $response));
         $firstassertionroot = $responsedom->getElementsByTagName('Assertion')->item(0);
+
+        if (is_null($firstassertionroot)) {
+            throw new \Exception("No assertion found in response.");
+        }
+
         $objXMLSecDSig->addReferenceList(
             [$firstassertionroot],
             XMLSecurityDSig::SHA256,
@@ -132,20 +170,49 @@ private static function signResponse($response, $key, $cert, $algo, $passphrase)
             $public_cert = file_get_contents($cert);
             $objXMLSecDSig->add509Cert($public_cert, true);
         }
+
+        /** @var \DOMElement $objXMLSecDSig->sigNode */
         $newSig = $responsedom->importNode($objXMLSecDSig->sigNode, true);
         $firstassertionroot->appendChild($newSig);
         return $responsedom->saveXML();
     }
 
+
+    /**
+     * @param string $url
+     * @param string $wresult
+     * @param string $wctx
+     * @return void
+     */
     private static function postResponse($url, $wresult, $wctx)
     {
         $config = \SimpleSAML\Configuration::getInstance();
-        $t = new \SimpleSAML\XHTML\Template($config, 'adfs:postResponse.twig');
-        $t->data['baseurlpath'] = \SimpleSAML\Module::getModuleURL('adfs');
-        $t->data['url'] = $url;
-        $t->data['wresult'] = $wresult;
-        $t->data['wctx'] = $wctx;
-        $t->show();
+        $usenewui = $config->getBoolean('usenewui', false);
+        if ($usenewui === false) {
+            $wresult = htmlspecialchars($wresult);
+            $wctx = htmlspecialchars($wctx);
+
+            $post = <<<MSG
+    <body onload="document.forms[0].submit()">
+        <form method="post" action="$url">
+            <input type="hidden" name="wa" value="wsignin1.0">
+            <input type="hidden" name="wresult" value="$wresult">
+            <input type="hidden" name="wctx" value="$wctx">
+            <noscript>
+                <input type="submit" value="Continue">
+            </noscript>
+        </form>
+    </body>
+MSG;
+            echo $post;
+        } else {
+            $t = new \SimpleSAML\XHTML\Template($config, 'adfs:postResponse.twig');
+            $t->data['baseurlpath'] = \SimpleSAML\Module::getModuleURL('adfs');
+            $t->data['url'] = $url;
+            $t->data['wresult'] = $wresult;
+            $t->data['wctx'] = $wctx;
+            $t->show();
+        }
     }
 
 
@@ -169,15 +236,15 @@ public static function getHostedMetadata($entityid)
             'entityid' => $entityid,
             'SingleSignOnService' => [
                 [
-                    'Binding' => \SAML2\Constants::BINDING_HTTP_REDIRECT,
+                    'Binding' => Constants::BINDING_HTTP_REDIRECT,
                     'Location' => $endpoint,
                 ]
             ],
             'SingleLogoutService' => [
-                'Binding' => \SAML2\Constants::BINDING_HTTP_REDIRECT,
+                'Binding' => Constants::BINDING_HTTP_REDIRECT,
                 'Location' => $endpoint,
             ],
-            'NameIDFormat' => $config->getString('NameIDFormat', \SAML2\Constants::NAMEID_TRANSIENT),
+            'NameIDFormat' => $config->getString('NameIDFormat', Constants::NAMEID_TRANSIENT),
             'contacts' => [],
         ];
 
@@ -196,6 +263,7 @@ public static function getHostedMetadata($entityid)
             $hasNewCert = true;
         }
 
+        /** @var array $certInfo */
         $certInfo = Crypto::loadPublicKey($config, true);
         $keys[] = [
             'type' => 'X509Certificate',
@@ -206,6 +274,7 @@ public static function getHostedMetadata($entityid)
         ];
 
         if ($config->hasValue('https.certificate')) {
+            /** @var array $httpsCert */
             $httpsCert = Crypto::loadPublicKey($config, true, 'https.');
             $keys[] = [
                 'type' => 'X509Certificate',
@@ -226,7 +295,7 @@ public static function getHostedMetadata($entityid)
             );
 
             if (!$config->hasValue('OrganizationURL')) {
-                throw new \SimpleSAMl\Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
+                throw new \SimpleSAML\Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
             }
             $metadata['OrganizationURL'] = $config->getLocalizedString('OrganizationURL');
         }
@@ -274,6 +343,11 @@ public static function getHostedMetadata($entityid)
     }
 
 
+    /**
+     * @param array $state
+     * @throws \Exception
+     * @return void
+     */
     public static function sendResponse(array $state)
     {
         $spMetadata = $state["SPMetadata"];
@@ -327,22 +401,34 @@ public static function sendResponse(array $state)
         ADFS::postResponse($wreply, $wresult, $wctx);
     }
 
+
+    /**
+     * @param \SimpleSAML\IdP $idp
+     * @param array $state
+     * @return void
+     */
     public static function sendLogoutResponse(\SimpleSAML\IdP $idp, array $state)
     {
         // NB:: we don't know from which SP the logout request came from
         $idpMetadata = $idp->getConfig();
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL(
-            $idpMetadata->getValue('redirect-after-logout', \SimpleSAML\Utils\HTTP::getBaseURL())
+        HTTP::redirectTrustedURL(
+            $idpMetadata->getValue('redirect-after-logout', HTTP::getBaseURL())
         );
     }
 
+
+    /**
+     * @param \SimpleSAML\IdP $idp
+     * @throws \Exception
+     * @return void
+     */
     public static function receiveLogoutMessage(\SimpleSAML\IdP $idp)
     {
         // if a redirect is to occur based on wreply, we will redirect to url as
         // this implies an override to normal sp notification
         if (isset($_GET['wreply']) && !empty($_GET['wreply'])) {
-            $idp->doLogoutRedirect(\SimpleSAML\Utils\HTTP::checkURLAllowed($_GET['wreply']));
-            assert(false);
+            $idp->doLogoutRedirect(HTTP::checkURLAllowed($_GET['wreply']));
+            throw new \Exception("Code should never be reached");
         }
 
         $state = [
@@ -355,7 +441,15 @@ public static function receiveLogoutMessage(\SimpleSAML\IdP $idp)
         $idp->handleLogoutRequest($state, $assocId);
     }
 
-    // accepts an association array, and returns a URL that can be accessed to terminate the association
+
+    /**
+     * accepts an association array, and returns a URL that can be accessed to terminate the association
+     *
+     * @param \SimpleSAML\IdP $idp
+     * @param array $association
+     * @param string $relayState
+     * @return string
+     */
     public static function getLogoutURL(\SimpleSAML\IdP $idp, array $association, $relayState)
     {
         $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Endpoint.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Endpoint.php
index d3ac56ad34..46b4940251 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Endpoint.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/Endpoint.php
@@ -15,6 +15,8 @@ class Endpoint
      *
      * @param \DOMElement $parent  The element we should append this endpoint to.
      * @param string $name  The name of the element we should create.
+     * @param string $address
+     * @return \DOMElement
      */
     public static function appendXML(\DOMElement $parent, $name, $address)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/SecurityTokenServiceType.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/SecurityTokenServiceType.php
index de386e9f65..9eae127779 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/SecurityTokenServiceType.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/SecurityTokenServiceType.php
@@ -13,16 +13,17 @@ class SecurityTokenServiceType extends \SAML2\XML\md\RoleDescriptor
     /**
      * List of supported protocols.
      *
-     * @var array
+     * @var array $protocolSupportEnumeration
      */
     public $protocolSupportEnumeration = [Constants::NS_FED];
 
     /**
      * The Location of Services.
      *
-     * @var string
+     * @var string|null $Location
      */
-    public $Location;
+    public $Location = null;
+
 
     /**
      * Initialize a SecurityTokenServiceType element.
@@ -45,6 +46,10 @@ public function __construct(\DOMElement $xml = null)
      */
     public function toXML(\DOMElement $parent)
     {
+        if (is_null($this->Location)) {
+            throw new \Exception('Location not set');
+        }
+
         assert(is_string($this->Location));
 
         $e = parent::toXML($parent);
@@ -61,7 +66,7 @@ public function toXML(\DOMElement $parent)
     /**
      * Get the location of this service.
      *
-     * @return string The full URL where this service can be reached.
+     * @return string|null The full URL where this service can be reached.
      */
     public function getLocation()
     {
@@ -73,6 +78,7 @@ public function getLocation()
      * Set the location of this service.
      *
      * @param string $location The full URL where this service can be reached.
+     * @return void
      */
     public function setLocation($location)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/TokenTypesOffered.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/TokenTypesOffered.php
index 5df8f3f9cc..659628ada5 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/TokenTypesOffered.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/lib/SAML2/XML/fed/TokenTypesOffered.php
@@ -14,6 +14,7 @@ class TokenTypesOffered
      * Add tokentypesoffered to an XML element.
      *
      * @param \DOMElement $parent  The element we should append this endpoint to.
+     * @return \DOMElement
      */
     public static function appendXML(\DOMElement $parent)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-idp-hosted.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-idp-hosted.php
new file mode 100644
index 0000000000..dd81340695
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-idp-hosted.php
@@ -0,0 +1,12 @@
+<?php
+
+$metadata['__DYNAMIC:1__'] = [
+    'host' => '__DEFAULT__',
+    'privatekey' => 'server.pem',
+    'certificate' => 'server.crt',
+    'auth' => 'example-userpass',
+    'authproc' => [
+        // Convert LDAP names to WS-Fed Claims.
+        100 => ['class' => 'core:AttributeMap', 'name2claim'],
+    ],
+];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-sp-remote.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-sp-remote.php
new file mode 100644
index 0000000000..ec2d79c916
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/metadata-templates/adfs-sp-remote.php
@@ -0,0 +1,12 @@
+<?php
+
+$metadata['urn:federation:localhost'] = [
+    'prp' => 'https://localhost/adfs/ls/',
+    'simplesaml.nameidattribute' => 'uid',
+    'authproc' => [
+        50 => [
+            'class' => 'core:AttributeLimit',
+            'cn', 'mail', 'uid', 'eduPersonAffiliation',
+        ],
+    ],
+];
diff --git a/vendor/jaimeperez/twig-configurable-i18n/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/adfs/phpunit.xml
similarity index 100%
rename from vendor/jaimeperez/twig-configurable-i18n/phpunit.xml
rename to vendor/simplesamlphp/simplesamlphp/modules/adfs/phpunit.xml
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/adfs/psalm.xml
new file mode 100644
index 0000000000..1fe07be1a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp ADFS module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="tests" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/tests/bootstrap.php
new file mode 100644
index 0000000000..1634f1ffc2
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/tests/bootstrap.php
@@ -0,0 +1,12 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+/** @psalm-suppress UnresolvableInclude */
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/adfs';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/metadata.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/metadata.php
index 473af96dc6..7d04309be1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/metadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/metadata.php
@@ -1,183 +1,15 @@
 <?php
 
-// load configuration and metadata
-$config = \SimpleSAML\Configuration::getInstance();
-$metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+namespace SimpleSAML\Module\adfs;
 
-if (!$config->getBoolean('enable.adfs-idp', false)) {
-    throw new \SimpleSAML\Error\Error('NOACCESS');
-}
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use Symfony\Component\HttpFoundation\Request;
 
-// check if valid local session exists
-if ($config->getBoolean('admin.protectmetadata', false)) {
-    \SimpleSAML\Utils\Auth::requireAdmin();
-}
+$config = Configuration::getInstance();
+$session = Session::getSessionFromRequest();
+$request = Request::createFromGlobals();
 
-try {
-    $idpentityid = isset($_GET['idpentityid']) ?
-        $_GET['idpentityid'] : $metadata->getMetaDataCurrentEntityID('adfs-idp-hosted');
-    $idpmeta = $metadata->getMetaDataConfig($idpentityid, 'adfs-idp-hosted');
-
-    $availableCerts = [];
-
-    $keys = [];
-    $certInfo = \SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, false, 'new_');
-    if ($certInfo !== null) {
-        $availableCerts['new_idp.crt'] = $certInfo;
-        $keys[] = [
-            'type'            => 'X509Certificate',
-            'signing'         => true,
-            'encryption'      => true,
-            'X509Certificate' => $certInfo['certData'],
-        ];
-        $hasNewCert = true;
-    } else {
-        $hasNewCert = false;
-    }
-
-    $certInfo = \SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, true);
-    $availableCerts['idp.crt'] = $certInfo;
-    $keys[] = [
-        'type'            => 'X509Certificate',
-        'signing'         => true,
-        'encryption'      => ($hasNewCert ? false : true),
-        'X509Certificate' => $certInfo['certData'],
-    ];
-
-    if ($idpmeta->hasValue('https.certificate')) {
-        $httpsCert = \SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, true, 'https.');
-        assert(isset($httpsCert['certData']));
-        $availableCerts['https.crt'] = $httpsCert;
-        $keys[] = [
-            'type'            => 'X509Certificate',
-            'signing'         => true,
-            'encryption'      => false,
-            'X509Certificate' => $httpsCert['certData'],
-        ];
-    }
-
-    $adfs_service_location = \SimpleSAML\Module::getModuleURL('adfs').'/idp/prp.php';
-    $metaArray = [
-        'metadata-set'        => 'adfs-idp-remote',
-        'entityid'            => $idpentityid,
-        'SingleSignOnService' => [
-            0 => [
-                'Binding'  => \SAML2\Constants::BINDING_HTTP_REDIRECT,
-                'Location' => $adfs_service_location
-            ]
-        ],
-        'SingleLogoutService' => [
-            0 => [
-                'Binding'  => \SAML2\Constants::BINDING_HTTP_REDIRECT,
-                'Location' => $adfs_service_location
-            ]
-        ],
-    ];
-
-    if (count($keys) === 1) {
-        $metaArray['certData'] = $keys[0]['X509Certificate'];
-    } else {
-        $metaArray['keys'] = $keys;
-    }
-
-    $metaArray['NameIDFormat'] = $idpmeta->getString(
-        'NameIDFormat',
-        'urn:oasis:names:tc:SAML:2.0:nameid-format:transient'
-    );
-
-    if ($idpmeta->hasValue('OrganizationName')) {
-        $metaArray['OrganizationName'] = $idpmeta->getLocalizedString('OrganizationName');
-        $metaArray['OrganizationDisplayName'] = $idpmeta->getLocalizedString(
-            'OrganizationDisplayName',
-            $metaArray['OrganizationName']
-        );
-
-        if (!$idpmeta->hasValue('OrganizationURL')) {
-            throw new \SimpleSAML\Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
-        }
-        $metaArray['OrganizationURL'] = $idpmeta->getLocalizedString('OrganizationURL');
-    }
-
-    if ($idpmeta->hasValue('scope')) {
-        $metaArray['scope'] = $idpmeta->getArray('scope');
-    }
-
-    if ($idpmeta->hasValue('EntityAttributes')) {
-        $metaArray['EntityAttributes'] = $idpmeta->getArray('EntityAttributes');
-    }
-
-    if ($idpmeta->hasValue('UIInfo')) {
-        $metaArray['UIInfo'] = $idpmeta->getArray('UIInfo');
-    }
-
-    if ($idpmeta->hasValue('DiscoHints')) {
-        $metaArray['DiscoHints'] = $idpmeta->getArray('DiscoHints');
-    }
-
-    if ($idpmeta->hasValue('RegistrationInfo')) {
-        $metaArray['RegistrationInfo'] = $idpmeta->getArray('RegistrationInfo');
-    }
-
-    $metaflat = '$metadata['.var_export($idpentityid, true).'] = '.var_export($metaArray, true).';';
-
-    $metaBuilder = new \SimpleSAML\Metadata\SAMLBuilder($idpentityid);
-    $metaBuilder->addSecurityTokenServiceType($metaArray);
-    $metaBuilder->addOrganizationInfo($metaArray);
-    $technicalContactEmail = $config->getString('technicalcontact_email', null);
-    if ($technicalContactEmail && $technicalContactEmail !== 'na@example.org') {
-        $metaBuilder->addContact('technical', \SimpleSAML\Utils\Config\Metadata::getContact([
-            'emailAddress' => $technicalContactEmail,
-            'name'         => $config->getString('technicalcontact_name', null),
-            'contactType'  => 'technical',
-        ]));
-    }
-    $output_xhtml = array_key_exists('output', $_GET) && $_GET['output'] == 'xhtml';
-    $metaxml = $metaBuilder->getEntityDescriptorText($output_xhtml);
-    if (!$output_xhtml) {
-        $metaxml = str_replace("\n", '', $metaxml);
-    }
-
-    // sign the metadata if enabled
-    $metaxml = \SimpleSAML\Metadata\Signer::sign($metaxml, $idpmeta->toArray(), 'ADFS IdP');
-
-    if ($output_xhtml) {
-        $defaultidp = $config->getString('default-adfs-idp', null);
-
-        $t = new \SimpleSAML\XHTML\Template($config, 'metadata.php', 'admin');
-
-        $t->data['clipboard.js'] = true;
-        $t->data['available_certs'] = $availableCerts;
-        $certdata = [];
-        foreach (array_keys($availableCerts) as $availableCert) {
-            $certdata[$availableCert]['name'] = $availableCert;
-            $certdata[$availableCert]['url'] = \SimpleSAML\Module::getModuleURL('saml/idp/certs.php').
-                '/'.$availableCert;
-
-            $certdata[$availableCert]['comment'] = '';
-            if ($availableCerts[$availableCert]['certFingerprint'][0] === 'afe71c28ef740bc87425be13a2263d37971da1f9') {
-                $certdata[$availableCert]['comment'] = 'This is the default certificate.'.
-                    ' Generate a new certificate if this is a production system.';
-            }
-        }
-        $t->data['certdata'] = $certdata;
-        $t->data['header'] = 'adfs-idp'; // TODO: Replace with headerString in 2.0
-        $t->data['headerString'] = \SimpleSAML\Locale\Translate::noop('metadata_adfs-idp');
-        $t->data['metaurl'] = \SimpleSAML\Utils\HTTP::getSelfURLNoQuery();
-        $t->data['metadata'] = htmlspecialchars($metaxml);
-        $t->data['metadataflat'] = htmlspecialchars($metaflat);
-        $t->data['defaultidp'] = $defaultidp;
-        $t->show();
-    } else {
-        header('Content-Type: application/xml');
-
-        // make sure to export only the md:EntityDescriptor
-        $metaxml = substr($metaxml, strpos($metaxml, '<md:EntityDescriptor'));
-        // 22 = strlen('</md:EntityDescriptor>')
-        $metaxml = substr($metaxml, 0, strrpos($metaxml, '</md:EntityDescriptor>') + 22);
-        echo $metaxml;
-
-        exit(0);
-    }
-} catch (\Exception $exception) {
-    throw new \SimpleSAML\Error\Error('METADATA', $exception);
-}
+$controller = new AdfsController($config, $session);
+$t = $controller->metadata($request);
+$t->send();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/prp.php b/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/prp.php
index 03a973b116..0ea8438097 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/prp.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/adfs/www/idp/prp.php
@@ -7,23 +7,16 @@
  * @package SimpleSAMLphp
  */
 
-\SimpleSAML\Logger::info('ADFS - IdP.prp: Accessing ADFS IdP endpoint prp');
+namespace SimpleSAML\Module\adfs;
 
-$metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
-$idpEntityId = $metadata->getMetaDataCurrentEntityID('adfs-idp-hosted');
-$idp = \SimpleSAML\IdP::getById('adfs:'.$idpEntityId);
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use Symfony\Component\HttpFoundation\Request;
 
-if (isset($_GET['wa'])) {
-    if ($_GET['wa'] === 'wsignout1.0') {
-        \SimpleSAML\Module\adfs\IdP\ADFS::receiveLogoutMessage($idp);
-    } elseif ($_GET['wa'] === 'wsignin1.0') {
-        \SimpleSAML\Module\adfs\IdP\ADFS::receiveAuthnRequest($idp);
-    }
-    assert(false);
-} elseif (isset($_GET['assocId'])) {
-    // logout response from ADFS SP
-    $assocId = $_GET['assocId']; // Association ID of the SP that sent the logout response
-    $relayState = $_GET['relayState']; // Data that was sent in the logout request to the SP. Can be null
-    $logoutError = null; // null on success, or an instance of a \SimpleSAML\Error\Exception on failure.
-    $idp->handleLogoutResponse($assocId, $relayState, $logoutError);
-}
+$config = Configuration::getInstance();
+$session = Session::getSessionFromRequest();
+$request = Request::createFromGlobals();
+
+$controller = new AdfsController($config, $session);
+$t = $controller->prp($request);
+$t->send();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/ConfigController.php b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/ConfigController.php
index 217010a17e..d4764b5850 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/ConfigController.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/ConfigController.php
@@ -2,9 +2,13 @@
 
 namespace SimpleSAML\Module\admin;
 
+use SimpleSAML\Configuration;
 use SimpleSAML\HTTP\RunnableResponse;
 use SimpleSAML\Locale\Translate;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
 use Symfony\Component\HttpFoundation\Request;
 
 /**
@@ -17,6 +21,7 @@
 class ConfigController
 {
     const LATEST_VERSION_STATE_KEY = 'core:latest_simplesamlphp_version';
+
     const RELEASES_API = 'https://api.github.com/repos/simplesamlphp/simplesamlphp/releases/latest';
 
     /** @var \SimpleSAML\Configuration */
@@ -35,7 +40,7 @@ class ConfigController
      * @param \SimpleSAML\Configuration $config The configuration to use.
      * @param \SimpleSAML\Session $session The current user session.
      */
-    public function __construct(\SimpleSAML\Configuration $config, \SimpleSAML\Session $session)
+    public function __construct(Configuration $config, Session $session)
     {
         $this->config = $config;
         $this->session = $session;
@@ -52,28 +57,28 @@ public function __construct(\SimpleSAML\Configuration $config, \SimpleSAML\Sessi
      */
     public function diagnostics(Request $request)
     {
-        \SimpleSAML\Utils\Auth::requireAdmin();
+        Utils\Auth::requireAdmin();
 
-        $t = new \SimpleSAML\XHTML\Template($this->config, 'admin:diagnostics.twig');
+        $t = new Template($this->config, 'admin:diagnostics.twig');
         $t->data = [
             'remaining' => $this->session->getAuthData('admin', 'Expire') - time(),
-            'logouturl' => \SimpleSAML\Utils\Auth::getAdminLogoutURL(),
+            'logouturl' => Utils\Auth::getAdminLogoutURL(),
             'items' => [
                 'HTTP_HOST' => [$request->getHost()],
                 'HTTPS' => $request->isSecure() ? ['on'] : [],
                 'SERVER_PROTOCOL' => [$request->getProtocolVersion()],
-                'getBaseURL()' => [HTTP::getBaseURL()],
-                'getSelfHost()' => [HTTP::getSelfHost()],
-                'getSelfHostWithNonStandardPort()' => [HTTP::getSelfHostWithNonStandardPort()],
-                'getSelfURLHost()' => [HTTP::getSelfURLHost()],
-                'getSelfURLNoQuery()' => [HTTP::getSelfURLNoQuery()],
-                'getSelfHostWithPath()' => [HTTP::getSelfHostWithPath()],
-                'getFirstPathElement()' => [HTTP::getFirstPathElement()],
-                'getSelfURL()' => [HTTP::getSelfURL()],
+                'getBaseURL()' => [Utils\HTTP::getBaseURL()],
+                'getSelfHost()' => [Utils\HTTP::getSelfHost()],
+                'getSelfHostWithNonStandardPort()' => [Utils\HTTP::getSelfHostWithNonStandardPort()],
+                'getSelfURLHost()' => [Utils\HTTP::getSelfURLHost()],
+                'getSelfURLNoQuery()' => [Utils\HTTP::getSelfURLNoQuery()],
+                'getSelfHostWithPath()' => [Utils\HTTP::getSelfHostWithPath()],
+                'getFirstPathElement()' => [Utils\HTTP::getFirstPathElement()],
+                'getSelfURL()' => [Utils\HTTP::getSelfURL()],
             ],
         ];
 
-        $this->menu->addOption('logout', \SimpleSAML\Utils\Auth::getAdminLogoutURL(), Translate::noop('Log out'));
+        $this->menu->addOption('logout', $t->data['logouturl'], Translate::noop('Log out'));
         return $this->menu->insert($t);
     }
 
@@ -85,20 +90,20 @@ public function diagnostics(Request $request)
      */
     public function main()
     {
-        \SimpleSAML\Utils\Auth::requireAdmin();
+        Utils\Auth::requireAdmin();
 
-        $t = new \SimpleSAML\XHTML\Template($this->config, 'admin:config.twig');
+        $t = new Template($this->config, 'admin:config.twig');
         $t->data = [
             'warnings' => $this->getWarnings(),
             'directory' => $this->config->getBaseDir(),
             'version' => $this->config->getVersion(),
             'links' => [
                 [
-                    'href' => \SimpleSAML\Module::getModuleURL('admin/diagnostics'),
+                    'href' => Module::getModuleURL('admin/diagnostics'),
                     'text' => Translate::noop('Diagnostics on hostname, port and protocol')
                 ],
                 [
-                    'href' => \SimpleSAML\Module::getModuleURL('admin/phpinfo'),
+                    'href' => Module::getModuleURL('admin/phpinfo'),
                     'text' => Translate::noop('Information on your PHP installation')
                 ]
             ],
@@ -107,11 +112,11 @@ public function main()
                 'shib13idp' => $this->config->getBoolean('enable.shib13-idp', false),
             ],
             'funcmatrix' => $this->getPrerequisiteChecks(),
-            'logouturl' => \SimpleSAML\Utils\Auth::getAdminLogoutURL(),
+            'logouturl' => Utils\Auth::getAdminLogoutURL(),
         ];
 
-        \SimpleSAML\Module::callHooks('configpage', $t);
-        $this->menu->addOption('logout', \SimpleSAML\Utils\Auth::getAdminLogoutURL(), Translate::noop('Log out'));
+        Module::callHooks('configpage', $t);
+        $this->menu->addOption('logout', Utils\Auth::getAdminLogoutURL(), Translate::noop('Log out'));
         return $this->menu->insert($t);
     }
 
@@ -150,11 +155,11 @@ protected function getPrerequisiteChecks()
                 'descr' => [
                     Translate::noop('PHP %minimum% or newer is needed. You are running: %current%'),
                     [
-                        '%minimum%' => '5.5',
+                        '%minimum%' => '5.6',
                         '%current%' => explode('-', phpversion())[0]
                     ]
                 ],
-                'enabled' => version_compare(phpversion(), '5.5', '>=')
+                'enabled' => version_compare(phpversion(), '5.6', '>=')
             ]
         ];
         $store = $this->config->getString('store.type', '');
@@ -241,14 +246,14 @@ protected function getPrerequisiteChecks()
                 ]
             ],
             'ldap_bind' => [
-                'required' => \SimpleSAML\Module::isModuleEnabled('ldap') ? 'required' : 'optional',
+                'required' => Module::isModuleEnabled('ldap') ? 'required' : 'optional',
                 'descr' => [
                     'optional' => Translate::noop('LDAP extension (required if an LDAP backend is used)'),
                     'required' => Translate::noop('LDAP extension'),
                 ]
             ],
             'radius_auth_open' => [
-                'required' => \SimpleSAML\Module::isModuleEnabled('radius') ? 'required' : 'optional',
+                'required' => Module::isModuleEnabled('radius') ? 'required' : 'optional',
                 'descr' => [
                     'optional' => Translate::noop('Radius extension (required if a radius backend is used)'),
                     'required' => Translate::noop('Radius extension'),
@@ -332,11 +337,11 @@ protected function getWarnings()
         $warnings = [];
 
         // make sure we're using HTTPS
-        if (!\SimpleSAML\Utils\HTTP::isHTTPS()) {
+        if (!Utils\HTTP::isHTTPS()) {
             $warnings[] = Translate::noop(
-                '<strong>You are not using HTTPS</strong> to protect communications with your users. HTTP works fine '.
-                'for testing purposes, but in a production environment you should use HTTPS. <a '.
-                'href="https://simplesamlphp.org/docs/stable/simplesamlphp-maintenance">Read more about the '.
+                '<strong>You are not using HTTPS</strong> to protect communications with your users. HTTP works fine ' .
+                'for testing purposes, but in a production environment you should use HTTPS. <a ' .
+                'href="https://simplesamlphp.org/docs/stable/simplesamlphp-maintenance">Read more about the ' .
                 'maintenance of SimpleSAMLphp</a>.'
             );
         }
@@ -344,9 +349,9 @@ protected function getWarnings()
         // make sure we have a secret salt set
         if ($this->config->getValue('secretsalt') === 'defaultsecretsalt') {
             $warnings[] = Translate::noop(
-                '<strong>The configuration uses the default secret salt</strong>. Make sure to modify the <code>'.
-                'secretsalt</code> option in the SimpleSAMLphp configuration in production environments. <a '.
-                'href="https://simplesamlphp.org/docs/stable/simplesamlphp-install">Read more about the '.
+                '<strong>The configuration uses the default secret salt</strong>. Make sure to modify the <code>' .
+                'secretsalt</code> option in the SimpleSAMLphp configuration in production environments. <a ' .
+                'href="https://simplesamlphp.org/docs/stable/simplesamlphp-install">Read more about the ' .
                 'maintenance of SimpleSAMLphp</a>.'
             );
         }
@@ -356,12 +361,12 @@ protected function getWarnings()
             $len = ini_get('suhosin.get.max_value_length');
             if (empty($len) || $len < 2048) {
                 $warnings[] = Translate::noop(
-                    'The length of query parameters is limited by the PHP Suhosin extension. Please increase the '.
+                    'The length of query parameters is limited by the PHP Suhosin extension. Please increase the ' .
                     '<code>suhosin.get.max_value_length</code> option in your php.ini to at least 2048 bytes.'
                 );
             }
         }
-        
+
         /*
          * Check for updates. Store the remote result in the session so we don't need to fetch it on every access to
          * this page.
@@ -383,7 +388,8 @@ protected function getWarnings()
                     curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config->getValue('proxy.auth', null));
                     $response = curl_exec($ch);
 
-                    if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
+                    if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) === 200) {
+                        /** @psalm-suppress InvalidScalarArgument */
                         $latest = json_decode($response, true);
                         $this->session->setData(self::LATEST_VERSION_STATE_KEY, 'version', $latest);
                     }
@@ -394,7 +400,7 @@ protected function getWarnings()
                 if ($latest && version_compare($this->config->getVersion(), ltrim($latest['tag_name'], 'v'), 'lt')) {
                     $warnings[] = [
                         Translate::noop(
-                            'You are running an outdated version of SimpleSAMLphp. Please update to <a href="'.
+                            'You are running an outdated version of SimpleSAMLphp. Please update to <a href="' .
                             '%latest%">the latest version</a> as soon as possible.'
                         ),
                             [
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/FederationController.php b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/FederationController.php
index a6608ac627..f167514972 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/FederationController.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/FederationController.php
@@ -2,14 +2,24 @@
 
 namespace SimpleSAML\Module\admin;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
+use SimpleSAML\HTTP\RunnableResponse;
 use SimpleSAML\Locale\Translate;
+use SimpleSAML\Logger;
 use SimpleSAML\Metadata\MetaDataStorageHandler;
 use SimpleSAML\Metadata\SAMLBuilder;
+use SimpleSAML\Metadata\SAMLParser;
+use SimpleSAML\Metadata\Signer;
 use SimpleSAML\Module;
 use SimpleSAML\Module\adfs\IdP\ADFS as ADFS_IdP;
 use SimpleSAML\Module\saml\IdP\SAML1 as SAML1_IdP;
 use SimpleSAML\Module\saml\IdP\SAML2 as SAML2_IdP;
-use SimpleSAML\Utils\Auth;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\ResponseHeaderBag;
 
 /**
  * Controller class for the admin module.
@@ -36,7 +46,7 @@ class FederationController
      *
      * @param \SimpleSAML\Configuration $config The configuration to use.
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         $this->config = $config;
         $this->menu = new Menu();
@@ -49,11 +59,11 @@ public function __construct(\SimpleSAML\Configuration $config)
      *
      * @return \SimpleSAML\XHTML\Template
      * @throws \SimpleSAML\Error\Exception
-     * @throws \SimpleSAML_Error_Exception
+     * @throws \SimpleSAML\Error\Exception
      */
     public function main()
     {
-        Auth::requireAdmin();
+        Utils\Auth::requireAdmin();
 
         // initialize basic metadata array
         $hostedSPs = $this->getHostedSP();
@@ -61,19 +71,19 @@ public function main()
         $entries = [
             'hosted' => array_merge($hostedSPs, $hostedIdPs),
             'remote' => [
-                'saml20-idp-remote' => !empty($hostedSPs) ? $this->mdHandler->getList('saml20-idp-remote') : [],
-                'shib13-idp-remote' => !empty($hostedSPs) ? $this->mdHandler->getList('shib13-idp-remote') : [],
+                'saml20-idp-remote' => !empty($hostedSPs) ? $this->mdHandler->getList('saml20-idp-remote', true) : [],
+                'shib13-idp-remote' => !empty($hostedSPs) ? $this->mdHandler->getList('shib13-idp-remote', true) : [],
                 'saml20-sp-remote' => $this->config->getBoolean('enable.saml20-idp', false) === true
-                    ? $this->mdHandler->getList('saml20-sp-remote') : [],
+                    ? $this->mdHandler->getList('saml20-sp-remote', true) : [],
                 'shib13-sp-remote' => $this->config->getBoolean('enable.shib13-idp', false) === true
-                    ? $this->mdHandler->getList('shib13-sp-remote') : [],
+                    ? $this->mdHandler->getList('shib13-sp-remote', true) : [],
                 'adfs-sp-remote' => ($this->config->getBoolean('enable.adfs-idp', false) === true) &&
-                    Module::isModuleEnabled('adfs') ? $this->mdHandler->getList('adfs-sp-remote') : [],
+                    Module::isModuleEnabled('adfs') ? $this->mdHandler->getList('adfs-sp-remote', true) : [],
             ],
         ];
 
         // initialize template and language
-        $t = new \SimpleSAML\XHTML\Template($this->config, 'admin:federation.twig');
+        $t = new Template($this->config, 'admin:federation.twig');
         $language = $t->getTranslator()->getLanguage()->getLanguage();
         $defaultLang = $this->config->getString('language.default', 'en');
 
@@ -108,7 +118,8 @@ public function main()
                     } elseif (isset($entity[$old]['en'])) {
                         $entries['remote'][$key][$entityid][$new] = $entity[$old]['en'];
                     } elseif (isset($entries['remote'][$key][$entityid][$old])) {
-                        $entries['remote'][$key][$entityid][$new] = $entries['remote'][$key][$entityid][$old];
+                        $old_entry = $entries['remote'][$key][$entityid][$old];
+                        $entries['remote'][$key][$entityid][$new] = is_array($old_entry) ? $entityid : $old_entry;
                     }
                 }
             }
@@ -117,7 +128,7 @@ public function main()
         $t->data = [
             'links' => [
                 [
-                    'href' => Module::getModuleURL('admin/metadata-converter'),
+                    'href' => Module::getModuleURL('admin/federation/metadata-converter'),
                     'text' => Translate::noop('XML to SimpleSAMLphp metadata converter'),
                 ]
             ],
@@ -136,7 +147,7 @@ public function main()
                 'adfs-idp-remote' => Translate::noop('ADFS IdP metadata'),
                 'adfs-idp-hosted' => Translate::noop('ADFS IdP metadata'),
             ],
-            'logouturl' => Auth::getAdminLogoutURL(),
+            'logouturl' => Utils\Auth::getAdminLogoutURL(),
         ];
 
         Module::callHooks('federationpage', $t);
@@ -162,7 +173,7 @@ private function getHostedIdP()
                 $saml2entities = [];
                 if (count($idps) > 1) {
                     foreach ($idps as $index => $idp) {
-                        $idp['url'] = Module::getModuleURL('saml/2/idp/metadata/'.$idp['auth']);
+                        $idp['url'] = Module::getModuleURL('saml/2/idp/metadata/' . $idp['auth']);
                         $idp['metadata-set'] = 'saml20-idp-hosted';
                         $idp['metadata-index'] = $index;
                         $idp['metadata_array'] = SAML2_IdP::getHostedMetadata($idp['entityid']);
@@ -170,11 +181,10 @@ private function getHostedIdP()
                     }
                 } else {
                     $saml2entities['saml20-idp'] = $this->mdHandler->getMetaDataCurrent('saml20-idp-hosted');
-                    $saml2entities['saml20-idp']['url'] = \SimpleSAML\Utils\HTTP::getBaseURL().'saml2/idp/metadata.php';
-                    $saml2entities['saml20-idp']['metadata_array'] =
-                        SAML2_IdP::getHostedMetadata(
-                            $this->mdHandler->getMetaDataCurrentEntityID('saml20-idp-hosted')
-                        );
+                    $saml2entities['saml20-idp']['url'] = Utils\HTTP::getBaseURL() . 'saml2/idp/metadata.php';
+                    $saml2entities['saml20-idp']['metadata_array'] = SAML2_IdP::getHostedMetadata(
+                        $this->mdHandler->getMetaDataCurrentEntityID('saml20-idp-hosted')
+                    );
                 }
 
                 foreach ($saml2entities as $index => $entity) {
@@ -185,7 +195,7 @@ private function getHostedIdP()
                         $builder->addContact($contact['contactType'], $contact);
                     }
 
-                    $entity['metadata'] = \SimpleSAML\Metadata\Signer::sign(
+                    $entity['metadata'] = Signer::sign(
                         $builder->getEntityDescriptorText(),
                         $entity['metadata_array'],
                         'SAML 2 IdP'
@@ -193,7 +203,7 @@ private function getHostedIdP()
                     $entities[$index] = $entity;
                 }
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::error('Federation: Error loading saml20-idp: '.$e->getMessage());
+                Logger::error('Federation: Error loading saml20-idp: ' . $e->getMessage());
             }
         }
 
@@ -204,7 +214,7 @@ private function getHostedIdP()
                 $shib13entities = [];
                 if (count($idps) > 1) {
                     foreach ($idps as $index => $idp) {
-                        $idp['url'] = Module::getModuleURL('saml/1.1/idp/metadata/'.$idp['auth']);
+                        $idp['url'] = Module::getModuleURL('saml/1.1/idp/metadata/' . $idp['auth']);
                         $idp['metadata-set'] = 'shib13-idp-hosted';
                         $idp['metadata-index'] = $index;
                         $idp['metadata_array'] = SAML1_IdP::getHostedMetadata($idp['entityid']);
@@ -212,14 +222,12 @@ private function getHostedIdP()
                     }
                 } else {
                     $shib13entities['shib13-idp'] = $this->mdHandler->getMetaDataCurrent('shib13-idp-hosted');
-                    $shib13entities['shib13-idp']['url'] = \SimpleSAML\Utils\HTTP::getBaseURL().
-                        'shib13/idp/metadata.php';
-                    $shib13entities['shib13-idp']['metadata_array'] =
-                        SAML1_IdP::getHostedMetadata(
-                            $this->mdHandler->getMetaDataCurrentEntityID('shib13-idp-hosted')
-                        );
+                    $shib13entities['shib13-idp']['url'] = Utils\HTTP::getBaseURL() . 'shib13/idp/metadata.php';
+                    $shib13entities['shib13-idp']['metadata_array'] = SAML1_IdP::getHostedMetadata(
+                        $this->mdHandler->getMetaDataCurrentEntityID('shib13-idp-hosted')
+                    );
                 }
-                
+
                 foreach ($shib13entities as $index => $entity) {
                     $builder = new SAMLBuilder($entity['entityid']);
                     $builder->addMetadataIdP11($entity['metadata_array']);
@@ -228,7 +236,7 @@ private function getHostedIdP()
                         $builder->addContact($contact['contactType'], $contact);
                     }
 
-                    $entity['metadata'] = \SimpleSAML\Metadata\Signer::sign(
+                    $entity['metadata'] = Signer::sign(
                         $builder->getEntityDescriptorText(),
                         $entity['metadata_array'],
                         'SAML 2 SP'
@@ -236,7 +244,7 @@ private function getHostedIdP()
                     $entities[$index] = $entity;
                 }
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::error('Federation: Error loading shib13-idp: '.$e->getMessage());
+                Logger::error('Federation: Error loading shib13-idp: ' . $e->getMessage());
             }
         }
 
@@ -247,7 +255,7 @@ private function getHostedIdP()
                 $adfsentities = [];
                 if (count($idps) > 1) {
                     foreach ($idps as $index => $idp) {
-                        $idp['url'] = Module::getModuleURL('adfs/idp/metadata/'.$idp['auth']);
+                        $idp['url'] = Module::getModuleURL('adfs/idp/metadata/' . $idp['auth']);
                         $idp['metadata-set'] = 'adfs-idp-hosted';
                         $idp['metadata-index'] = $index;
                         $idp['metadata_array'] = ADFS_IdP::getHostedMetadata($idp['entityid']);
@@ -256,10 +264,9 @@ private function getHostedIdP()
                 } else {
                     $adfsentities['adfs-idp'] = $this->mdHandler->getMetaDataCurrent('adfs-idp-hosted');
                     $adfsentities['adfs-idp']['url'] = Module::getModuleURL('adfs/idp/metadata.php');
-                    $adfsentities['adfs-idp']['metadata_array'] =
-                        ADFS_IdP::getHostedMetadata(
-                            $this->mdHandler->getMetaDataCurrentEntityID('adfs-idp-hosted')
-                        );
+                    $adfsentities['adfs-idp']['metadata_array'] = ADFS_IdP::getHostedMetadata(
+                        $this->mdHandler->getMetaDataCurrentEntityID('adfs-idp-hosted')
+                    );
                 }
 
                 foreach ($adfsentities as $index => $entity) {
@@ -270,7 +277,7 @@ private function getHostedIdP()
                         $builder->addContact($contact['contactType'], $contact);
                     }
 
-                    $entity['metadata'] = \SimpleSAML\Metadata\Signer::sign(
+                    $entity['metadata'] = Signer::sign(
                         $builder->getEntityDescriptorText(),
                         $entity['metadata_array'],
                         'ADFS IdP'
@@ -278,7 +285,7 @@ private function getHostedIdP()
                     $entities[$index] = $entity;
                 }
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::error('Federation: Error loading adfs-idp: '.$e->getMessage());
+                Logger::error('Federation: Error loading adfs-idp: ' . $e->getMessage());
             }
         }
 
@@ -287,7 +294,7 @@ private function getHostedIdP()
             $entities[$index]['type'] = $entity['metadata-set'];
             foreach ($entity['metadata_array']['keys'] as $kidx => $key) {
                 $key['url'] = Module::getModuleURL(
-                    'admin/cert',
+                    'admin/federation/cert',
                     [
                         'set' => $entity['metadata-set'],
                         'idp' => $entity['metadata-index'],
@@ -324,13 +331,17 @@ private function getHostedSP()
         $entities = [];
 
         /** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
-        foreach (\SimpleSAML\Auth\Source::getSourcesOfType('saml:SP') as $source) {
+        foreach (Auth\Source::getSourcesOfType('saml:SP') as $source) {
             $metadata = $source->getHostedMetadata();
-            $certificates = $metadata['keys'];
-            if (count($metadata['keys']) === 1) {
-                $cert = array_pop($metadata['keys']);
-                $metadata['certData'] = $cert['X509Certificate'];
-                unset($metadata['keys']);
+            if (isset($metadata['keys'])) {
+                $certificates = $metadata['keys'];
+                if (count($metadata['keys']) === 1) {
+                    $cert = array_pop($metadata['keys']);
+                    $metadata['certData'] = $cert['X509Certificate'];
+                    unset($metadata['keys']);
+                }
+            } else {
+                $certificates = [];
             }
 
             // get the name
@@ -355,7 +366,7 @@ private function getHostedSP()
             }
 
             // sign the metadata if enabled
-            $xml = \SimpleSAML\Metadata\Signer::sign($xml, $source->getMetadata()->toArray(), 'SAML 2 SP');
+            $xml = Signer::sign($xml, $source->getMetadata()->toArray(), 'SAML 2 SP');
 
             $entities[] = [
                 'authid' => $source->getAuthId(),
@@ -371,4 +382,137 @@ private function getHostedSP()
 
         return $entities;
     }
+
+    /**
+     * Metadata converter
+     *
+     * @param Request $request The current request.
+     *
+     * @return \SimpleSAML\XHTML\Template
+     */
+    public function metadataConverter(Request $request)
+    {
+        Utils\Auth::requireAdmin();
+
+        if ($xmlfile = $request->files->get('xmlfile')) {
+            $xmldata = trim(file_get_contents($xmlfile));
+        } elseif ($xmldata = $request->request->get('xmldata')) {
+            $xmldata = trim($xmldata);
+        }
+
+        if (!empty($xmldata)) {
+            Utils\XML::checkSAMLMessage($xmldata, 'saml-meta');
+            $entities = SAMLParser::parseDescriptorsString($xmldata);
+
+            // get all metadata for the entities
+            foreach ($entities as &$entity) {
+                $entity = [
+                    'shib13-sp-remote'  => $entity->getMetadata1xSP(),
+                    'shib13-idp-remote' => $entity->getMetadata1xIdP(),
+                    'saml20-sp-remote'  => $entity->getMetadata20SP(),
+                    'saml20-idp-remote' => $entity->getMetadata20IdP(),
+                ];
+            }
+
+            // transpose from $entities[entityid][type] to $output[type][entityid]
+            $output = Utils\Arrays::transpose($entities);
+
+            // merge all metadata of each type to a single string which should be added to the corresponding file
+            foreach ($output as $type => &$entities) {
+                $text = '';
+                foreach ($entities as $entityId => $entityMetadata) {
+                    if ($entityMetadata === null) {
+                        continue;
+                    }
+
+                    /**
+                     * remove the entityDescriptor element because it is unused,
+                     * and only makes the output harder to read
+                     */
+                    unset($entityMetadata['entityDescriptor']);
+
+                    $text .= '$metadata[' . var_export($entityId, true) . '] = '
+                        . var_export($entityMetadata, true) . ";\n";
+                }
+                $entities = $text;
+            }
+        } else {
+            $xmldata = '';
+            $output = [];
+        }
+
+        $t = new Template($this->config, 'admin:metadata_converter.twig');
+        $t->data = [
+            'logouturl' => Utils\Auth::getAdminLogoutURL(),
+            'xmldata' => $xmldata,
+            'output' => $output,
+        ];
+
+        $this->menu->addOption('logout', $t->data['logouturl'], Translate::noop('Log out'));
+        return $this->menu->insert($t);
+    }
+
+    /**
+     * Download a certificate for a given entity.
+     *
+     * @param Request $request The current request.
+     *
+     * @return Response PEM-encoded certificate.
+     */
+    public function downloadCert(Request $request)
+    {
+        Utils\Auth::requireAdmin();
+
+        $set = $request->get('set');
+        $prefix = $request->get('prefix');
+
+        if ($set === 'saml20-sp-hosted') {
+            $sourceID = $request->get('source');
+            /**
+             * The second argument ensures non-nullable return-value
+             * @var \SimpleSAML\Module\saml\Auth\Source\SP $source
+             */
+            $source = \SimpleSAML\Auth\Source::getById($sourceID, Module\saml\Auth\Source\SP::class);
+            $mdconfig = $source->getMetadata();
+        } else {
+            $entityID = $request->get('entity');
+            $mdconfig = $this->mdHandler->getMetaDataConfig($entityID, $set);
+        }
+
+        /** @var array $certInfo  Second param ensures non-nullable return-value */
+        $certInfo = Utils\Crypto::loadPublicKey($mdconfig, true, $prefix);
+
+        $response = new Response($certInfo['PEM']);
+        $disposition = $response->headers->makeDisposition(
+            ResponseHeaderBag::DISPOSITION_ATTACHMENT,
+            'cert.pem'
+        );
+
+        $response->headers->set('Content-Disposition', $disposition);
+        $response->headers->set('Content-Type', 'application/x-pem-file');
+
+        return $response;
+    }
+
+    /**
+     * Show remote entity metadata
+     *
+     * @param Request $request The current request.
+     *
+     * @return Response
+     */
+    public function showRemoteEntity(Request $request)
+    {
+        Utils\Auth::requireAdmin();
+
+        $entityId = $request->get('entityid');
+        $set = $request->get('set');
+
+        $metadata = $this->mdHandler->getMetaData($entityId, $set);
+
+        $t = new Template($this->config, 'admin:show_metadata.twig');
+        $t->data['entityid'] = $entityId;
+        $t->data['metadata'] = var_export($metadata, true);
+        return $t;
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/Menu.php b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/Menu.php
index e4e55250cf..c1d87d9597 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/Menu.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/Menu.php
@@ -51,6 +51,7 @@ public function __construct()
      * @param string $id The identifier of this option.
      * @param string $url The URL this option points to.
      * @param string $name The name of the option for display purposes.
+     * @return void
      */
     public function addOption($id, $url, $name)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/TestController.php b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/TestController.php
index c330c81489..ac4afebcd6 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/TestController.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/lib/TestController.php
@@ -2,9 +2,16 @@
 
 namespace SimpleSAML\Module\admin;
 
+use SAML2\Constants;
+use SAML2\XML\saml\NameID;
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
 use SimpleSAML\HTTP\RunnableResponse;
 use SimpleSAML\Locale\Translate;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 
@@ -34,7 +41,7 @@ class TestController
      * @param \SimpleSAML\Configuration $config The configuration to use.
      * @param \SimpleSAML\Session $session The current user session.
      */
-    public function __construct(\SimpleSAML\Configuration $config, \SimpleSAML\Session $session)
+    public function __construct(Configuration $config, Session $session)
     {
         $this->config = $config;
         $this->session = $session;
@@ -45,29 +52,31 @@ public function __construct(\SimpleSAML\Configuration $config, \SimpleSAML\Sessi
     /**
      * Display the list of available authsources.
      *
+     * @param string|null $as
      * @return \SimpleSAML\XHTML\Template
      */
     public function main(Request $request, $as)
     {
-        \SimpleSAML\Utils\Auth::requireAdmin();
+        Utils\Auth::requireAdmin();
         if (is_null($as)) {
-            $t = new \SimpleSAML\XHTML\Template($this->config, 'admin:authsource_list.twig');
+            $t = new Template($this->config, 'admin:authsource_list.twig');
             $t->data = [
-                'sources' => \SimpleSAML\Auth\Source::getSources(),
+                'sources' => Auth\Source::getSources(),
             ];
         } else {
-            $authsource = new \SimpleSAML\Auth\Simple($as);
+            $authsource = new Auth\Simple($as);
             if (!is_null($request->query->get('logout'))) {
-                $authsource->logout($this->config->getBasePath().'logout.php');
-            } elseif (!is_null($request->query->get(\SimpleSAML\Auth\State::EXCEPTION_PARAM))) {
+                $authsource->logout($this->config->getBasePath() . 'logout.php');
+            } elseif (!is_null($request->query->get(Auth\State::EXCEPTION_PARAM))) {
                 // This is just a simple example of an error
-                $state = \SimpleSAML\Auth\State::loadExceptionState();
-                assert(array_key_exists(\SimpleSAML\Auth\State::EXCEPTION_DATA, $state));
-                throw $state[\SimpleSAML\Auth\State::EXCEPTION_DATA];
+                /** @var array $state */
+                $state = Auth\State::loadExceptionState();
+                assert(array_key_exists(Auth\State::EXCEPTION_DATA, $state));
+                throw $state[Auth\State::EXCEPTION_DATA];
             }
 
             if (!$authsource->isAuthenticated()) {
-                $url = \SimpleSAML\Module::getModuleURL('admin/test/' .$as, []);
+                $url = Module::getModuleURL('admin/test/' . $as, []);
                 $params = [
                     'ErrorURL' => $url,
                     'ReturnTo' => $url,
@@ -77,15 +86,17 @@ public function main(Request $request, $as)
 
             $attributes = $authsource->getAttributes();
             $authData = $authsource->getAuthDataArray();
-            $nameId = !is_null($authsource->getAuthData('saml:sp:NameID')) ? $authsource->getAuthData('saml:sp:NameID') : false;
+            $nameId = !is_null($authsource->getAuthData('saml:sp:NameID'))
+                ? $authsource->getAuthData('saml:sp:NameID')
+                : false;
 
-            $t = new \SimpleSAML\XHTML\Template($this->config, 'admin:status.twig', 'attributes');
+            $t = new Template($this->config, 'admin:status.twig', 'attributes');
             $t->data = [
                 'attributes' => $attributes,
                 'attributesHtml' => $this->getAttributesHTML($t, $attributes, ''),
                 'authData' => $authData,
                 'nameid' => $nameId,
-                'logouturl' => \SimpleSAML\Utils\HTTP::getSelfURLNoQuery().'?as='.urlencode($as).'&logout',
+                'logouturl' => Utils\HTTP::getSelfURLNoQuery() . '?as=' . urlencode($as) . '&logout',
             ];
 
             if ($nameId !== false) {
@@ -93,24 +104,34 @@ public function main(Request $request, $as)
             }
         }
 
-        \SimpleSAML\Module::callHooks('configpage', $t);
-        $this->menu->addOption('logout', \SimpleSAML\Utils\Auth::getAdminLogoutURL(), Translate::noop('Log out'));
+        Module::callHooks('configpage', $t);
+        $this->menu->addOption('logout', Utils\Auth::getAdminLogoutURL(), Translate::noop('Log out'));
         return $this->menu->insert($t);
     }
 
 
-    private function getNameIDHTML(\SimpleSAML\XHTML\Template $t, \SAML2\XML\saml\NameID $nameId)
+    /**
+     * @param \SimpleSAML\XHTML\Template $t
+     * @param \SAML2\XML\saml\NameID $nameId
+     * @return string
+     */
+    private function getNameIDHTML(Template $t, NameID $nameId)
     {
+        $translator = $t->getTranslator();
         $result = '';
         if ($nameId->getValue() === null) {
-            $list = ["NameID" => [$t->t('{status:subject_notset}')]];
-            $result .= "<p>NameID: <span class=\"notset\">".$t->t('{status:subject_notset}')."</span></p>";
+            $list = ["NameID" => [$translator->t('{status:subject_notset}')]];
+            /** @var string $notset */
+            $notset = $translator->t('{status:subject_notset}');
+            $result .= "<p>NameID: <span class=\"notset\">" . $notset . "</span></p>";
         } else {
             $list = [
                 "NameId" => [$nameId->getValue()],
             ];
             if ($nameId->getFormat() !== null) {
-                $list[$t->t('{status:subject_format}')] = [$nameId->getFormat()];
+                /** @var string $format */
+                $format = $translator->t('{status:subject_format}');
+                $list[$format] = [$nameId->getFormat()];
             }
             if ($nameId->getNameQualifier() !== null) {
                 $list['NameQualifier'] = [$nameId->getNameQualifier()];
@@ -122,53 +143,61 @@ private function getNameIDHTML(\SimpleSAML\XHTML\Template $t, \SAML2\XML\saml\Na
                 $list['SPProvidedID'] = [$nameId->getSPProvidedID()];
             }
         }
-        return $result.$this->getAttributesHTML($t, $list, '');
+        return $result . $this->getAttributesHTML($t, $list, '');
     }
 
 
-    private function getAttributesHTML(\SimpleSAML\XHTML\Template $t, $attributes, $nameParent)
+    /**
+     * @param \SimpleSAML\XHTML\Template $t
+     * @param array $attributes
+     * @param string $nameParent
+     * @return string
+     */
+    private function getAttributesHTML(Template $t, $attributes, $nameParent)
     {
         $alternate = ['pure-table-odd', 'pure-table-even'];
         $i = 0;
-        $parentStr = (strlen($nameParent) > 0) ? strtolower($nameParent).'_' : '';
-        $str = (strlen($nameParent) > 0) ? '<table class="pure-table pure-table-attributes" summary="attribute overview">' :
-            '<table id="table_with_attributes" class="pure-table pure-table-attributes" summary="attribute overview">';
+        $parentStr = (strlen($nameParent) > 0) ? strtolower($nameParent) . '_' : '';
+        $str = (strlen($nameParent) > 0)
+            ? '<table class="pure-table pure-table-attributes" summary="attribute overview">'
+            : '<table id="table_with_attributes" class="pure-table pure-table-attributes"'
+            . ' summary="attribute overview">';
         foreach ($attributes as $name => $value) {
             $nameraw = $name;
             $trans = $t->getTranslator();
-            $name = $trans->getAttributeTranslation($parentStr.$nameraw);
+            $name = $trans->getAttributeTranslation($parentStr . $nameraw);
             if (preg_match('/^child_/', $nameraw)) {
                 $parentName = preg_replace('/^child_/', '', $nameraw);
                 foreach ($value as $child) {
-                    $str .= '<tr class="odd"><td colspan="2" style="padding: 2em">'.
-                        $this->getAttributesHTML($t, $child, $parentName).'</td></tr>';
+                    $str .= '<tr class="odd"><td colspan="2" style="padding: 2em">' .
+                        $this->getAttributesHTML($t, $child, $parentName) . '</td></tr>';
                 }
             } else {
                 if (sizeof($value) > 1) {
-                    $str .= '<tr class="'.$alternate[($i++ % 2)].'"><td class="attrname">';
+                    $str .= '<tr class="' . $alternate[($i++ % 2)] . '"><td class="attrname">';
                     if ($nameraw !== $name) {
-                        $str .= htmlspecialchars($name).'<br/>';
+                        $str .= htmlspecialchars($name) . '<br/>';
                     }
-                    $str .= '<code>'.htmlspecialchars($nameraw).'</code>';
+                    $str .= '<code>' . htmlspecialchars($nameraw) . '</code>';
                     $str .= '</td><td class="attrvalue"><ul>';
                     foreach ($value as $listitem) {
                         if ($nameraw === 'jpegPhoto') {
-                            $str .= '<li><img src="data:image/jpeg;base64,'.htmlspecialchars($listitem).'" /></li>';
+                            $str .= '<li><img src="data:image/jpeg;base64,' . htmlspecialchars($listitem) . '" /></li>';
                         } else {
-                            $str .= '<li>'.$this->present_assoc($listitem).'</li>';
+                            $str .= '<li>' . $this->presentAssoc($listitem) . '</li>';
                         }
                     }
                     $str .= '</ul></td></tr>';
                 } elseif (isset($value[0])) {
-                    $str .= '<tr class="'.$alternate[($i++ % 2)].'"><td class="attrname">';
+                    $str .= '<tr class="' . $alternate[($i++ % 2)] . '"><td class="attrname">';
                     if ($nameraw !== $name) {
-                        $str .= htmlspecialchars($name).'<br/>';
+                        $str .= htmlspecialchars($name) . '<br/>';
                     }
-                    $str .= '<code>'.htmlspecialchars($nameraw).'</code>';
+                    $str .= '<code>' . htmlspecialchars($nameraw) . '</code>';
                     $str .= '</td>';
                     if ($nameraw === 'jpegPhoto') {
-                        $str .= '<td class="attrvalue"><img src="data:image/jpeg;base64,'.htmlspecialchars($value[0]).
-                            '" /></td></tr>';
+                        $str .= '<td class="attrvalue"><img src="data:image/jpeg;base64,' . htmlspecialchars($value[0])
+                            . '" /></td></tr>';
                     } elseif (is_a($value[0], 'DOMNodeList')) {
                         // try to see if we have a NameID here
                         /** @var \DOMNodeList $value [0] */
@@ -176,18 +205,18 @@ private function getAttributesHTML(\SimpleSAML\XHTML\Template $t, $attributes, $
                         for ($idx = 0; $idx < $n; $idx++) {
                             $elem = $value[0]->item($idx);
                             /* @var \DOMElement $elem */
-                            if (!($elem->localName === 'NameID' && $elem->namespaceURI === \SAML2\Constants::NS_SAML)) {
+                            if (!($elem->localName === 'NameID' && $elem->namespaceURI === Constants::NS_SAML)) {
                                 continue;
                             }
-                            $str .= $this->present_eptid($trans, new \SAML2\XML\saml\NameID($elem));
+                            $str .= $this->presentEptid($trans, new NameID($elem));
                             break; // we only support one NameID here
                         }
                         $str .= '</td></tr>';
                     } elseif (is_a($value[0], '\SAML2\XML\saml\NameID')) {
-                        $str .= $this->present_eptid($trans, $value[0]);
+                        $str .= $this->presentEptid($trans, $value[0]);
                         $str .= '</td></tr>';
                     } else {
-                        $str .= '<td class="attrvalue">'.htmlspecialchars($value[0]).'</td></tr>';
+                        $str .= '<td class="attrvalue">' . htmlspecialchars($value[0]) . '</td></tr>';
                     }
                 }
             }
@@ -197,12 +226,17 @@ private function getAttributesHTML(\SimpleSAML\XHTML\Template $t, $attributes, $
         return $str;
     }
 
-    private function present_list($attr)
+
+    /**
+     * @param array|string $attr
+     * @return string
+     */
+    private function presentList($attr)
     {
         if (is_array($attr) && count($attr) > 1) {
             $str = '<ul>';
             foreach ($attr as $value) {
-                $str .= '<li>'.htmlspecialchars($attr).'</li>';
+                $str .= '<li>' . htmlspecialchars(strval($attr)) . '</li>';
             }
             $str .= '</ul>';
             return $str;
@@ -211,12 +245,17 @@ private function present_list($attr)
         }
     }
 
-    private function present_assoc($attr)
+
+    /**
+     * @param array|string $attr
+     * @return string
+     */
+    private function presentAssoc($attr)
     {
         if (is_array($attr)) {
             $str = '<dl>';
             foreach ($attr as $key => $value) {
-                $str .= "\n".'<dt>'.htmlspecialchars($key).'</dt><dd>'.$this->present_list($value).'</dd>';
+                $str .= "\n" . '<dt>' . htmlspecialchars($key) . '</dt><dd>' . $this->presentList($value) . '</dd>';
             }
             $str .= '</dl>';
             return $str;
@@ -225,13 +264,21 @@ private function present_assoc($attr)
         }
     }
 
-    private function present_eptid(\SimpleSAML\Locale\Translate $t, \SAML2\XML\saml\NameID $nameID)
+
+    /**
+     * @param \SimpleSAML\Locale\Translate $t
+     * @param \SAML2\XML\saml\NameID $nameID
+     * @return string
+     */
+    private function presentEptid(Translate $t, NameID $nameID)
     {
         $eptid = [
             'NameID' => [$nameID->getValue()],
         ];
         if ($nameID->getFormat() !== null) {
-            $eptid[$t->t('{status:subject_format}')] = [$nameID->getFormat()];
+            /** @var string $format */
+            $format = $t->t('{status:subject_format}');
+            $eptid[$format] = [$nameID->getFormat()];
         }
         if ($nameID->getNameQualifier() !== null) {
             $eptid['NameQualifier'] = [$nameID->getNameQualifier()];
@@ -242,6 +289,6 @@ private function present_eptid(\SimpleSAML\Locale\Translate $t, \SAML2\XML\saml\
         if ($nameID->getSPProvidedID() !== null) {
             $eptid['SPProvidedID'] = [$nameID->getSPProvidedID()];
         }
-        return '<td class="attrvalue">'.$this->present_assoc($eptid);
+        return '<td class="attrvalue">' . $this->presentAssoc($eptid);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/routes.yaml b/vendor/simplesamlphp/simplesamlphp/modules/admin/routes.yaml
index e19374da6b..34490c3f96 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/routes.yaml
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/routes.yaml
@@ -13,3 +13,12 @@ admin-test:
 admin-fed:
     path:       /federation
     defaults:   { _controller: 'SimpleSAML\Module\admin\FederationController::main' }
+admin-fed-cert:
+    path:       /federation/cert
+    defaults:   { _controller: 'SimpleSAML\Module\admin\FederationController::downloadCert' }
+admin-fed-show:
+    path:       /federation/show
+    defaults:   { _controller: 'SimpleSAML\Module\admin\FederationController::showRemoteEntity' }
+admin-fed-converter:
+    path:       /federation/metadata-converter
+    defaults:   { _controller: 'SimpleSAML\Module\admin\FederationController::metadataConverter' }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/authsource_list.twig b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/authsource_list.twig
index e00b3c356a..6a40aca0a4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/authsource_list.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/authsource_list.twig
@@ -4,6 +4,8 @@
 
 {% block content %}
     {%- include "@admin/includes/menu.twig" %}
+
+    <h2>{{ pagetitle }} </h2>
     <ul>
     {% for key, name in sources %}
         <li><a href="test/{{ name|escape('url') }}">{{ name }}</a></li>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/diagnostics.twig b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/diagnostics.twig
index 7e5e36064e..8e900f4873 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/diagnostics.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/diagnostics.twig
@@ -4,6 +4,9 @@
 
 {% block content %}
     {%- include "@admin/includes/menu.twig" %}
+
+    <h2>{{ pagetitle }} </h2>
+
     {%- embed "_table.twig" %}
       {%- block namecol %}
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/federation.twig b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/federation.twig
index ab2921b53e..d9059ae761 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/federation.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/federation.twig
@@ -71,9 +71,9 @@
                 {#- #}$metadata['{{ set.entityid }}'] = {{ set.metadata_array }};{# -#}
               </div>
             </dd>
-            <dt>{% trans %}Certificates{% endtrans %}</dt>
             {%- for cert in set.certificates %}
               {%- if loop.first %}
+              <dt>{% trans %}Certificates{% endtrans %}</dt>
 
               <ul>
               {%- endif %}
@@ -105,18 +105,17 @@
       <ul>
       {% for entityid, entity in set %}
 
-        <li><a href="{{ (metadata_url ~ '?entityid=' ~ entity.entityid ~ '&set=' ~ key) }}">
-          {%- if entity.name_translated %}
+        <li><a href="federation/show{{ ('?entityid=' ~ (entity.entityid|url_encode) ~ '&set=' ~ key) }}">
+          {%- if entity.name_translated -%}
 
           {{ entity.name_translated }}
-          {%- elseif entity.organizationdisplayname_translated %}
+          {%- elseif entity.organizationdisplayname_translated -%}
 
           {{ entity.organizationdisplayname_translated }}
-          {%- else %}
+          {%- else -%}
 
           {{ entity.entityid|escape('html') }}
-          {% endif -%}
-
+          {%- endif -%}
           </a>
           {%- if entity.expire %}
             {%- if entity.expire < date().timestamp %}
@@ -126,9 +125,8 @@
               {%- set expiration = (entity.expire - date().timestamp) / 3600 %}
 
           ({% trans %}expires in {{ expiration }} hours{% endtrans %})
-            {%- endif %}
-          {%- endif %}
-
+            {%- endif -%}
+          {%- endif -%}
         </li>
       {% endfor %}
       </ul>
@@ -144,7 +142,7 @@
       {%- endfor %}
 
     </ul>
-    <form action="{{ metadata_url }}" method="get" class="pure-form">
+    <form action="federation/show" method="get" class="pure-form">
       <fieldset class="fancyfieldset">
         <legend>{% trans %}Look up metadata for entity:{% endtrans %}</legend>
         <select name="set">
@@ -156,7 +154,7 @@
           {%- endif %}
 
         </select>
-        <input type="text" name="entityid" placeholder="{% trans %}EntityID{% endtrans %}" />
+        <input type="text" name="entityid" placeholder="{% trans %}EntityID{% endtrans %}">
         <button class="pure-button pure-button-red" type="submit">{% trans %}Search{% endtrans %}</button>
       </fieldset>
     </form>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/metadata_converter.twig b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/metadata_converter.twig
new file mode 100644
index 0000000000..785fe0f36c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/metadata_converter.twig
@@ -0,0 +1,63 @@
+{% set pagetitle = 'Metadata parser'|trans %}
+{% set frontpage_section = 'federation' %}
+{% extends "base.twig" %}
+
+{%  set i=1 %}
+{% block content %}
+    {%- include "@admin/includes/menu.twig" %}
+
+    <h2>{{ pagetitle }}</h2>
+    <form method="post" class="pure-form" enctype="multipart/form-data" action="#converted">
+        <h3> {% trans 'XML metadata' %}</h3>
+        <div class="pure-control-group">
+            <textarea name="xmldata" rows="20" class="text-area edge xmldata">{{ xmldata }}</textarea>
+        </div>
+        <br>
+        <div class="center">
+            <div class="pure-button-group two-elements" role="group">
+                <label class="pure-button">
+                    <span class="fa fa-folder-open"></span>{{ 'or select a file:'|trans }}
+                    <input type="file" name="xmlfile" class="hidden" id="file-input">
+                </label>
+                <label id="show-file" class="pure-button hollow show-files" disabled>{{ 'No file selected.'|trans }}</label>
+            </div>
+            <br>
+            <button class="pure-button pure-button-red pure-input-1-3">{{ 'Parse'|trans }}</button>
+        </div>
+    </form>
+
+    {% if output -%}
+    <br>
+    <h2 id="converted">{{ 'Converted metadata'|trans }}</h2>
+        {% for type, text in output if text -%}
+{# spaceless is to work around a clipboard.js bug that would add extra whitespace #}
+{% spaceless %}
+    <div class="code-box">
+        <div class="code-box-title">
+            <h3>{{ type }}</h3>
+            <button data-clipboard-target="#metadata{{ loop.index }}" id="btn{{ loop.index }}" class="pure-button right clipboard-btn copy">
+                <i class="fa fa-copy"></i>
+            </button>
+        </div>
+        <div class="code-box-content">
+            <pre id="metadata{{ loop.index }}">{{ text|escape }}</pre>
+        </div>
+    </div>
+{% endspaceless %}
+            <br><br>
+            {%- set i=i+1 %}
+        {%- endfor -%}
+    {% endif -%}
+{% endblock content -%}
+{% block postload %}
+<script>
+    $('body').on('change', '#file-input', function () {
+        var files = this.files;
+        var fileNames = [];
+        for (var i = 0; i < files.length; i++) {
+            fileNames.push(files.item(i).name);
+        }
+        $('#show-file').html(fileNames.join(", "));
+    });
+</script>
+{% endblock postload %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/show_metadata.twig b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/show_metadata.twig
new file mode 100644
index 0000000000..ca51cca1cc
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/show_metadata.twig
@@ -0,0 +1,18 @@
+{% set pagetile = 'SimpleSAMLphp Show Metadata'|trans %}
+{% extends 'base.twig' %}
+{% block content %}
+
+    <h2>{{ 'Metadata' | trans }}</h2>
+    <div class="code-box hljs">
+        <div class="pure-button-group top-right-corner">
+            <a class="pure-button copy hljs" data-clipboard-target="#metadata"
+                title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+        </div>
+        <div id="metadata" class="code-box-content php">
+            {#- #}$metadata["{{ entityid }}"] => {{ metadata|escape }};{# -#}
+        </div>
+    </div>
+    <div class="center">
+        <a href="../federation" class="pure-button pure-button-red">{{ 'Back'|trans }}</a>
+    </div>
+{% endblock content %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/status.twig b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/status.twig
index 341d3790ef..f0ff255626 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/status.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/admin/templates/status.twig
@@ -12,24 +12,67 @@
 
     {{ attributesHtml|raw }}
 
-    {% if nameidHtml -%}
-    <h2>{{ '{status:subject_header}'|trans }}</h2>
-    {{  nameidHtml|raw }}
-    {%- endif %}
+    {%- if nameid or authData %}
 
-    {% if authData -%}
-    <h2>{% trans %}AuthData{% endtrans %}</h2>
-    <details><summary>{% trans %}Click to view AuthData{% endtrans %}</summary>
-      <pre>{{ authData|json_encode|raw }}</pre>
-    </details>
-    {%- endif %}    
+    <h2>{% trans %}Technical information{% endtrans %}</h2>
+    {% endif %}
+    {%- if nameid %}
 
-    {% if logout -%}
-    <h2>{{ '{status:logout}'|trans }}</h2>
-    <p>{{ logout }}</p> 
-    {%- endif %}
+    <h3>{% trans %}SAML Subject{% endtrans %}</h3>
+      {%  set items = {'NameId' : nameid.value} %}
+
+      {% if not nameid.value %}
+        {%  set items = items|merge({'NameID' : 'not set'|trans}) %}
+      {% endif %}
+
+      {% if nameid.Format %}
+        {% set items = items|merge({('Format'|trans) : nameid.Format}) %}
+      {% endif %}
+
+      {% if nameid.NameQualifier %}
+        {% set items = items|merge({'NameQualifier' : nameid.NameQualifier}) %}
+      {% endif %}
+
+      {% if nameid.SPNameQualifier %}
+        {% set items = items|merge({'SPNameQualifier' : nameid.SPNameQualifier}) %}
+      {% endif %}
+
+      {% if nameid.SPProvidedID %}
+        {% set items = items|merge({'SPProvidedID' : nameid.SPProvidedID}) %}
+      {%- endif %}
+
+    <table id="table_with_attributes"  class="attributes pure-table pure-table-striped pure-table-attributes"
+           summary="{% trans %}SAML Subject{% endtrans %}">
+      {%- for name, value in items %}
+
+      <tr class="{{ cycle(['odd', 'even'], loop.index0) }}">
+        <td class="attrname">{{ name }}</td>
+        <td class="attrvalue">{{ value }}</td>
+      </tr>
+      {%- endfor %}
+
+    </table>
+    <br/>
+    {% endif %}
+
+    {% if authData %}
+    <h3>{% trans %}Authentication data{% endtrans %}</h3>
+    <div class="code-box hljs">
+      <div class="pure-button-group top-right-corner">
+        <a class="pure-button copy hljs" data-clipboard-target="#auth-data"
+           title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+      </div>
+      <code id="auth-data" class="code-box-content json">
+        {{- authData|json_encode(constant("JSON_PRETTY_PRINT") b-or constant("JSON_UNESCAPED_SLASHES")) }}
+      </code>
+    </div>
+    <br/>
+    {% endif %}
+
+    {%- if logouturl %}
 
-    {% if logouturl -%}
-    <a href="{{ logouturl }}">{{ '{status:logout}'|trans }}</a>
+    <div class="center">
+      <a class="pure-button pure-button-red" href="{{ logouturl }}">{{ '{status:logout}'|trans }}</a>
+    </div>
     {%- endif %}
 {% endblock %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/.gitignore b/vendor/simplesamlphp/simplesamlphp/modules/authX509/.gitignore
new file mode 100644
index 0000000000..ce45e2079d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/.gitignore
@@ -0,0 +1,8 @@
+.phpunit.result.cache
+composer.lock
+composer.phar
+/vendor/
+
+# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
+# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
+# composer.lock
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authX509/.php_cs.dist
new file mode 100644
index 0000000000..33467ebed8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authX509/.travis.yml
new file mode 100644
index 0000000000..5d09fe074b
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/.travis.yml
@@ -0,0 +1,27 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer self-update --1
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm; fi
+
+script:
+#  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authX509/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authX509/composer.json
new file mode 100644
index 0000000000..93af4b6cc0
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/composer.json
@@ -0,0 +1,49 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authx509",
+    "description": "A module that is able to authenticate users based on X509 client certificates",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "X509"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Joost van Dijk",
+            "email": "Joost.vanDijk@surfnet.nl"
+        },
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\authX509\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.5",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "simplesamlphp/simplesamlphp-module-ldap": "^0.9"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.15"
+    },
+    "extra": {
+        "ssp-mixedcase-module-name": "authX509"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-authx509/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-authx509"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/authX509/default-disable
index e69de29bb2..f0c9e96956 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authX509/default-disable
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/default-disable
@@ -0,0 +1,3 @@
+This file indicates that the default state of this module
+is disabled. To enable, create a file named enable in the
+same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/docs/authX509.md b/vendor/simplesamlphp/simplesamlphp/modules/authX509/docs/authX509.md
index dcb8ff9259..0aaaba3de4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authX509/docs/authX509.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/docs/authX509.md
@@ -102,8 +102,7 @@ can hack your metadata/saml20-idp-hosted.php file that way:
             'authority'     =>      'login',
             'userid.attribute' =>   'uid',
             'logouttype'    =>      'iframe',
-            'attributes.NameFormat' =>
-                            'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
+            'attributes.NameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
     )
 
 Checking certificate expiry
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Process/ExpiryWarning.php b/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Process/ExpiryWarning.php
index 1b9c1ca875..9ef69aeb97 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Process/ExpiryWarning.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Process/ExpiryWarning.php
@@ -19,8 +19,10 @@
 
 class ExpiryWarning extends \SimpleSAML\Auth\ProcessingFilter
 {
-
+    /** @var int */
     private $warndaysbefore = 30;
+
+    /** @var string|null */
     private $renewurl = null;
 
     /**
@@ -57,6 +59,7 @@ public function __construct($config, $reserved)
      * is informed about the expiry date of his/her certificate.
      *
      * @param array $state  The state of the response.
+     * @return void
      */
     public function process(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Source/X509userCert.php b/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Source/X509userCert.php
index 4605c0ee97..66380c2e05 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Source/X509userCert.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Auth/Source/X509userCert.php
@@ -13,18 +13,21 @@ class X509userCert extends \SimpleSAML\Auth\Source
 {
     /**
      * x509 attributes to use from the certificate for searching the user in the LDAP directory.
+     * @var array
      */
     private $x509attributes = ['UID' => 'uid'];
 
 
     /**
      * LDAP attribute containing the user certificate.
+     * This can be set to NULL to avoid looking up the certificate in LDAP
+     * @var array|null
      */
     private $ldapusercert = ['userCertificate;binary'];
 
 
     /**
-     * LDAPConfigHelper object
+     * @var \SimpleSAML\Module\ldap\ConfigHelper
      */
     private $ldapcf;
 
@@ -56,8 +59,6 @@ public function __construct($info, &$config)
             $config,
             'Authentication source '.var_export($this->authId, true)
         );
-
-        return;
     }
 
 
@@ -67,15 +68,27 @@ public function __construct($info, &$config)
      * This function can be overloaded by a child authentication class that wish to perform some operations on failure.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public function authFailed(&$state)
     {
         $config = \SimpleSAML\Configuration::getInstance();
+        $errorcode = $state['authX509.error'];
+        $errorcodes = \SimpleSAML\Error\ErrorCodes::getAllErrorCodeMessages();
 
         $t = new \SimpleSAML\XHTML\Template($config, 'authX509:X509error.php');
         $t->data['loginurl'] = \SimpleSAML\Utils\HTTP::getSelfURL();
-        $t->data['errorcode'] = $state['authX509.error'];
-        $t->data['errorcodes'] = \SimpleSAML\Error\ErrorCodes::getAllErrorCodeMessages();
+        $t->data['errorcode'] = $errorcode;
+        $t->data['errorcodes'] = $errorcodes;
+
+        if (!empty($errorcode)) {
+            if (array_key_exists($errorcode, $errorcodes['title'])) {
+                $t->data['errortitle'] = $errorcodes['title'][$errorcode];
+            }
+            if (array_key_exists($errorcode, $errorcodes['descr'])) {
+                $t->data['errordescr'] = $errorcodes['descr'][$errorcode];
+            }
+        }
 
         $t->show();
         exit();
@@ -89,6 +102,7 @@ public function authFailed(&$state)
      * page. On failure, The authX509:X509error.php template is loaded.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -100,8 +114,7 @@ public function authenticate(&$state)
             $state['authX509.error'] = "NOCERT";
             $this->authFailed($state);
 
-            assert(false); // should never be reached
-            return;
+            throw new \Exception("Should never be reached");
         }
 
         $client_cert = $_SERVER['SSL_CLIENT_CERT'];
@@ -111,8 +124,7 @@ public function authenticate(&$state)
             $state['authX509.error'] = "INVALIDCERT";
             $this->authFailed($state);
 
-            assert(false); // should never be reached
-            return;
+            throw new \Exception("Should never be reached");
         }
 
         $dn = null;
@@ -122,6 +134,10 @@ public function authenticate(&$state)
                 $value = $client_cert_data['subject'][$x509_attr];
                 \SimpleSAML\Logger::info('authX509: cert '.$x509_attr.' = '.$value);
                 $dn = $ldapcf->searchfordn($ldap_attr, $value, true);
+                /** 
+                 * Remove when SSP 1.18 is released
+                 * @psalm-suppress RedundantConditionGivenDocblockType
+                 */
                 if ($dn !== null) {
                     break;
                 }
@@ -133,8 +149,7 @@ public function authenticate(&$state)
             $state['authX509.error'] = "UNKNOWNCERT";
             $this->authFailed($state);
 
-            assert(false); // should never be reached
-            return;
+            throw new \Exception("Should never be reached");
         }
 
         if ($this->ldapusercert === null) {
@@ -144,18 +159,17 @@ public function authenticate(&$state)
             $state['Attributes'] = $attributes;
             $this->authSuccesful($state);
 
-            assert(false); // should never be reached
-            return;
+            throw new \Exception("Should never be reached");
         }
 
         $ldap_certs = $ldapcf->getAttributes($dn, $this->ldapusercert);
-        if ($ldap_certs === false) {
+
+        if (empty($ldap_certs)) {
             \SimpleSAML\Logger::error('authX509: no certificate found in LDAP for dn='.$dn);
             $state['authX509.error'] = "UNKNOWNCERT";
             $this->authFailed($state);
 
-            assert(false); // should never be reached
-            return;
+            throw new \Exception("Should never be reached");
         }
 
 
@@ -179,8 +193,7 @@ public function authenticate(&$state)
                 $state['Attributes'] = $attributes;
                 $this->authSuccesful($state);
 
-                assert(false); // should never be reached
-                return;
+                throw new \Exception("Should never be reached");
             }
         }
 
@@ -188,8 +201,7 @@ public function authenticate(&$state)
         $state['authX509.error'] = "UNKNOWNCERT";
         $this->authFailed($state);
 
-        assert(false); // should never be reached
-        return;
+        throw new \Exception("Should never be reached");
     }
 
 
@@ -199,12 +211,12 @@ public function authenticate(&$state)
      * This function can be overloaded by a child authentication class that wish to perform some operations after login.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public function authSuccesful(&$state)
     {
         \SimpleSAML\Auth\Source::completeAuth($state);
 
-        assert(false); // should never be reached
-        return;
+        throw new \Exception("Should never be reached");
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Controller/ExpiryWarning.php b/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Controller/ExpiryWarning.php
new file mode 100644
index 0000000000..dbf448bab3
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/lib/Controller/ExpiryWarning.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace SimpleSAML\Module\authX509\Controller;
+
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\HTTP\RunnableResponse;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Module\authX509\Auth\Source\X509userCert;
+use SimpleSAML\Session;
+use SimpleSAML\XHTML\Template;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+
+/**
+ * Controller class for the authx509 module.
+ *
+ * This class serves the different views available in the module.
+ *
+ * @package simplesamlphp/simplesamlphp-module-authx509
+ */
+class ExpiryWarning
+{
+    /** @var \SimpleSAML\Configuration */
+    protected $config;
+
+    /** @var \SimpleSAML\Session */
+    protected $session;
+
+    /**
+     * @var \SimpleSAML\Auth\State|string
+     * @psalm-var \SimpleSAML\Auth\State|class-string
+     */
+    protected $authState = Auth\State::class;
+
+
+    /**
+     * Controller constructor.
+     *
+     * It initializes the global configuration and session for the controllers implemented here.
+     *
+     * @param \SimpleSAML\Configuration $config The configuration to use by the controllers.
+     * @param \SimpleSAML\Session $session The session to use by the controllers.
+     *
+     * @throws \Exception
+     */
+    public function __construct(
+        Configuration $config,
+        Session $session
+    ) {
+        $this->config = $config;
+        $this->session = $session;
+    }
+
+
+    /**
+     * Inject the \SimpleSAML\Auth\State dependency.
+     *
+     * @param \SimpleSAML\Auth\State $authState
+     */
+    public function setAuthState(Auth\State $authState)
+    {
+        $this->authState = $authState;
+    }
+
+
+    /**
+     * Show expiry warning.
+     *
+     * @param \Symfony\Component\HttpFoundation\Request $request
+     * @return \SimpleSAML\XHTML\Template|\SimpleSAML\HTTP\RunnableResponse
+     * @throws \Exception
+     */
+    public function main(Request $request)
+    {
+        Logger::info('AuthX509 - Showing expiry warning to user');
+
+        $id = $request->get('StateId', null);
+        if ($id === null) {
+            throw new Error\BadRequest('Missing required StateId query parameter.');
+        }
+
+        $authState = $this->authState;
+        $state = $authState::loadState($id, 'warning:expire');
+
+        if (is_null($state)) {
+            throw new Error\NoState();
+        } elseif ($request->get('proceed', null) !== null) {
+            // The user has pressed the proceed-button
+            return new RunnableResponse([Auth\ProcessingChain::class, 'resumeProcessing'], [$state]);
+        }
+
+        $t = new Template($this->config, 'authX509:X509warning.twig');
+        $t->data['target'] = Module::getModuleURL('authX509/expirywarning.php');
+        $t->data['data'] = ['StateId' => $id];
+        $t->data['daysleft'] = $state['daysleft'];
+        $t->data['renewurl'] = $state['renewurl'];
+        $t->data['errorcodes'] = Error\ErrorCodes::getAllErrorCodeMessages();
+        return $t;
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/locales/pl/LC_MESSAGES/authX509.po b/vendor/simplesamlphp/simplesamlphp/modules/authX509/locales/pl/LC_MESSAGES/authX509.po
new file mode 100644
index 0000000000..0e6da5b5c9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/locales/pl/LC_MESSAGES/authX509.po
@@ -0,0 +1,61 @@
+
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: SimpleSAMLphp 1.15\n"
+"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
+"POT-Creation-Date: 2016-10-12 09:23+0200\n"
+"PO-Revision-Date: 2016-10-14 12:14+0200\n"
+"Last-Translator: \n"
+"Language: pl\n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.3.4\n"
+
+msgid "{authX509:X509warning:proceed}"
+msgstr "Idź"
+
+msgid "{authX509:X509warning:renew}"
+msgstr "Pamiętaj o odnowieniu swojego certyfikatu zanim wygaśnie."
+
+msgid "{authX509:X509error:certificate_text}"
+msgstr "Uwierzytelnienie certyfikatem X509 jest wymagane do uzyskania dostępu do serwisu."
+
+msgid "{authX509:X509warning:renew_url}"
+msgstr "Pamiętaj o <a href='%renewurl%'>odnowieniu</a> swojego certyfikatu zanim wygaśnie."
+
+msgid "{authX509:X509warning:warning_header}"
+msgstr "Twój certyfikat niedługo wygaśnie."
+
+msgid "{authX509:X509error:certificate_header}"
+msgstr "Uwierzytelnienie certyfikatem X509"
+
+msgid "{authX509:X509warning:warning}"
+msgstr "Twój certyfikat wygaśnie za %daysleft% dni."
+
+msgid "Please renew your certificate in time."
+msgstr "Pamiętaj o odnowieniu swojego certyfikatu zanim wygaśnie."
+
+#, python-format
+msgid "Your certificate will expire in %daysleft% days."
+msgstr "Twój certyfikat wygaśnie za %daysleft% dni."
+
+msgid "X509 certificate authentication"
+msgstr "Uwierzytelnienie certyfikatem X509"
+
+#, python-format
+msgid "Please <a href='%renewurl%'>renew your certificate</a> in time."
+msgstr "<a href='%renewurl%'>Odnów swój certyfikat</a> zanim wygaśnie."
+
+msgid "Proceed"
+msgstr "Idź"
+
+msgid "X509 certificate authentication is required to access this service."
+msgstr "Uwierzytelnienie certyfikatem X509 jest wymagane do uzyskania dostępu do serwisu."
+
+msgid "Your certificate is about to expire."
+msgstr "Twój certyfikat niedługo wygaśnie."
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authX509/phpunit.xml
new file mode 100644
index 0000000000..f747895b9c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authX509/psalm.xml
new file mode 100644
index 0000000000..fc764a9656
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/psalm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Module authX509"
+    useDocblockTypes="false"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/routing/routes/routes.yml b/vendor/simplesamlphp/simplesamlphp/modules/authX509/routing/routes/routes.yml
new file mode 100644
index 0000000000..d1db74181e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/routing/routes/routes.yml
@@ -0,0 +1,6 @@
+authx509-main:
+    path:       /expiryWarning
+    defaults:   { _controller: 'SimpleSAML\Module\authX509\Controller\ExpiryWarning::main' }
+authx509-main-legacy:
+    path:       /expirywarning.php
+    defaults:   { _controller: 'SimpleSAML\Module\authX509\Controller\ExpiryWarning::main' }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/templates/X509error.php b/vendor/simplesamlphp/simplesamlphp/modules/authX509/templates/X509error.php
index b7f8d42802..5db087b3ad 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authX509/templates/X509error.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/templates/X509error.php
@@ -1,4 +1,5 @@
 <?php
+
 $this->data['header'] = $this->t('{authX509:X509error:certificate_header}');
 
 $this->includeAtTemplateBase('includes/header.php');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authX509/tests/bootstrap.php
new file mode 100644
index 0000000000..401e0c9295
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/authX509';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authX509/www/expirywarning.php b/vendor/simplesamlphp/simplesamlphp/modules/authX509/www/expirywarning.php
index 7bd36030d4..e7685331cc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authX509/www/expirywarning.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authX509/www/expirywarning.php
@@ -14,8 +14,9 @@
 $id = $_REQUEST['StateId'];
 $state = \SimpleSAML\Auth\State::loadState($id, 'warning:expire');
 
-
-if (array_key_exists('proceed', $_REQUEST)) {
+if (is_null($state)) {
+    throw new \SimpleSAML\Error\NoState();
+} else if (array_key_exists('proceed', $_REQUEST)) {
     // The user has pressed the proceed-button
     \SimpleSAML\Auth\ProcessingChain::resumeProcessing($state);
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.php_cs.dist
new file mode 100644
index 0000000000..4453ab123e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/libextinc',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.travis.yml
new file mode 100644
index 0000000000..3c250287a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/bin/check-syntax.sh
new file mode 100755
index 0000000000..d9e8bb70e0
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib libextinc templates tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/composer.json
new file mode 100644
index 0000000000..7a7c70b37f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/composer.json
@@ -0,0 +1,45 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authyubikey",
+    "description": "A module that is able to authenticate against YubiKey",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "authyubikey"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "extra": {
+        "ssp-mixedcase-module-name": "authYubikey"
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\modules\\yubikey\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "webmozart/assert": "~1.4"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-authyubikey/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-authyubikey"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/default-disable
index fa0bd82e2d..3e99dbb6b9 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/default-disable
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/default-disable
@@ -1,3 +1,3 @@
 This file indicates that the default state of this module
-is disabled. To enable, create a file named enable in the
+is disbled. To enable, create a file named enable in the
 same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/dictionaries/yubikey.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/dictionaries/yubikey.translation.json
index 3aeb1d3db0..b2ff0632c6 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/dictionaries/yubikey.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/dictionaries/yubikey.translation.json
@@ -31,7 +31,8 @@
 		"ro": "Login cu YubiKey",
 		"cs": "P\u0159ihl\u00e1\u0161en\u00ed pomoc\u00ed YubiKey",
 		"af": "Meld aan met YubiKey",
-		"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u03bc\u03b5 YubiKey"
+		"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u03bc\u03b5 YubiKey",
+		"ca": "Inicieu sessió amb YubiKey"
 	},
 	"intro": {
 		"no": "En tjeneste har bedt om at du autentiserer deg. For \u00e5 autentisere seg, trykk p\u00e5 knappen p\u00e5 din YubiKey. Feltet under vil da bli automatisk utfylt med et sikkert engangspassord.",
@@ -65,6 +66,7 @@
 		"cs": "N\u011bkter\u00e1 slu\u017eba si vy\u017e\u00e1dala autentizaci. K p\u0159ihl\u00e1\u0161en\u00ed klikn\u011bte na v\u00e1\u0161 YubiKey. Spodn\u00ed pol\u00ed\u010dko by se pot\u00e9 m\u011blo automaticky vyplnit bezpe\u010dn\u00fdm jednor\u00e1zov\u00fdm heslem.",
 		"eu": "Zerbitzu batek kautotzeko eskatu du. Kautotzeko, klikatu zure YubiKey botoia. Behean kokatutako eremua automatikoki bete beharko litzateke erabilera bakarreko (OTP) pasahitz seguru batekin",
 		"af": "Sommige dienste vereis verifikasie. Kliek op jou YubiKey knoppie vir verifikasie. Die onderstaande veld sal dan outomaties gevul word met 'n veilige een-slag-wagwoord.",
-		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2 \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 YubiKey \u03bc\u03ad\u03c3\u03c9 \u03c4\u03bf\u03c5 \u03bf\u03c0\u03bf\u03af\u03bf\u03c5 \u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03b5\u03b4\u03af\u03bf \u03b8\u03b1 \u03c3\u03c5\u03bc\u03c0\u03bb\u03b7\u03c1\u03c9\u03b8\u03b5\u03af \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03bc\u03b5 \u03ad\u03bd\u03b1\u03bd \u03b1\u03c3\u03c6\u03b1\u03bb\u03ae \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03bc\u03b9\u03b1\u03c2 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2."
+		"el": "\u0397 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2 \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 YubiKey \u03bc\u03ad\u03c3\u03c9 \u03c4\u03bf\u03c5 \u03bf\u03c0\u03bf\u03af\u03bf\u03c5 \u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03b5\u03b4\u03af\u03bf \u03b8\u03b1 \u03c3\u03c5\u03bc\u03c0\u03bb\u03b7\u03c1\u03c9\u03b8\u03b5\u03af \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03bc\u03b5 \u03ad\u03bd\u03b1\u03bd \u03b1\u03c3\u03c6\u03b1\u03bb\u03ae \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03bc\u03b9\u03b1\u03c2 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2.",
+		"ca": "Alguns serveis han sol·licitat l’autenticació. Per autenticar, feu clic al botó del vostre YubiKey. El camp següent s’haurà de completar amb una contrasenya segura única."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Process/OTP2YubiPrefix.php b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Process/OTP2YubiPrefix.php
index 42ef300f39..b6e7896715 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Process/OTP2YubiPrefix.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Process/OTP2YubiPrefix.php
@@ -52,6 +52,7 @@ class OTP2YubiPrefix extends \SimpleSAML\Auth\ProcessingFilter
      * a 'yubiPrefix' attribute that leaves out the dynamic part.
      *
      * @param array &$state  The state we should update.
+     * @return void
      */
     public function process(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Source/YubiKey.php b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Source/YubiKey.php
index 65ddf84906..5596ecbd60 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Source/YubiKey.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/lib/Auth/Source/YubiKey.php
@@ -62,10 +62,14 @@ class YubiKey extends \SimpleSAML\Auth\Source
 
     /**
      * The client id/key for use with the Auth_Yubico PHP module.
+     * @var string
      */
     private $yubi_id;
+
+    /** @var string */
     private $yubi_key;
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -97,6 +101,7 @@ public function __construct($info, $config)
      * login page.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -130,9 +135,14 @@ public static function handleLogin($authStateId, $otp)
 
         /* Retrieve the authentication state. */
         $state = \SimpleSAML\Auth\State::loadState($authStateId, self::STAGEID);
+        if (is_null($state)) {
+            throw new \SimpleSAML\Error\NoState();
+        }
 
         /* Find authentication source. */
         assert(array_key_exists(self::AUTHID, $state));
+
+        /** @var \SimpleSAML\Module\authYubiKey\Auth\Source\YubiKey $source */
         $source = \SimpleSAML\Auth\Source::getById($state[self::AUTHID]);
         if ($source === null) {
             throw new \Exception('Could not find authentication source with id '.$state[self::AUTHID]);
@@ -162,8 +172,12 @@ public static function handleLogin($authStateId, $otp)
         return null;
     }
 
+
     /**
      * Return the user id part of a one time passord
+     *
+     * @param string $otp
+     * @return string
      */
     public static function getYubiKeyPrefix($otp)
     {
@@ -171,6 +185,7 @@ public static function getYubiKeyPrefix($otp)
         return $uid;
     }
 
+
     /**
      * Attempt to log in using the given username and password.
      *
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/libextinc/Yubico.php b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/libextinc/Yubico.php
index d6f4c709aa..d222f6b67e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/libextinc/Yubico.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/libextinc/Yubico.php
@@ -125,9 +125,11 @@ public function verify($token)
         // Support https
         $url = "https://api.yubico.com/wsapi/verify?".$parameters;
 
+        /** @var string $responseMsg */
         $responseMsg = \SimpleSAML\Utils\HTTP::fetch($url);
 
-        if (!preg_match("/status=([a-zA-Z0-9_]+)/", $responseMsg, $out)) {
+        $out = [];
+        if (preg_match("/status=([a-zA-Z0-9_]+)/", $responseMsg, $out) !== 1) {
             throw new Exception('Could not parse response');
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/psalm.xml
new file mode 100644
index 0000000000..fae732c2e1
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp YubiKey Module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="libextinc" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/templates/yubikeylogin.twig b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/templates/yubikeylogin.twig
index 8fa4385f21..cedb3f703c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/templates/yubikeylogin.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/templates/yubikeylogin.twig
@@ -2,11 +2,11 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-    <link rel="stylesheet" type="text/css" href="{{ baseurlpath }}assets/css/yubikey.css">
+    <link rel="stylesheet" href="/{{ baseurlpath }}module.php/authYubiKey/assets/css/yubikey.css">
 {% endblock %}
 
 {% block postload %}
-    <script src="{{ baseurlpath }}assets/js/autofocus.js"></script>
+    <script src="/{{ baseurlpath }}module.php/authYubiKey/assets/js/autofocus.js"></script>
 {% endblock %}
 
 {% block content %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/tests/bootstrap.php
new file mode 100644
index 0000000000..ce36e42de3
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/authyubikey';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/www/yubikeylogin.php b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/www/yubikeylogin.php
index c484282515..1f39767e13 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/www/yubikeylogin.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authYubiKey/www/yubikeylogin.php
@@ -18,13 +18,17 @@
 $t = new \SimpleSAML\XHTML\Template($globalConfig, 'authYubiKey:yubikeylogin.php');
 $translator = $t->getTranslator();
 
-$errorCode = null;
+$errorCode = [];
 if (array_key_exists('otp', $_REQUEST)) {
     // attempt to log in
-    $errorCode = \SimpleSAML\Module\authYubiKey\Auth\Source\YubiKey::handleLogin($authStateId, $_REQUEST['otp']);
+    $errorCode = \SimpleSAML\Module\authYubiKey\Auth\Source\YubiKey::handleLogin($authStateId, $_REQUEST['otp']) ?: $errorCode;
     $errorCodes = \SimpleSAML\Error\ErrorCodes::getAllErrorCodeMessages();
-    $t->data['errorTitle'] = $errorCodes['title'][$errorCode];
-    $t->data['errorDesc'] = $errorCodes['desc'][$errorCode];
+    if (array_key_exists($errorCode, $errorCodes['title'])) {
+        $t->data['errorTitle'] = $errorCodes['title'][$errorCode];
+    }
+    if (array_key_exists($errorCode, $errorCodes['desc'])) {
+        $t->data['errorDesc'] = $errorCodes['desc'][$errorCode];
+    }
 }
 
 $t->data['header'] = $translator->t('{authYubiKey:yubikey:header}');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.php_cs.dist
new file mode 100644
index 0000000000..e7d314696c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.php_cs.dist
@@ -0,0 +1,15 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.travis.yml
new file mode 100644
index 0000000000..a090b62943
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/bin/check-syntax.sh
new file mode 100755
index 0000000000..db6dc4b014
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib tests -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/composer.json
new file mode 100644
index 0000000000..ad05c24a65
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/composer.json
@@ -0,0 +1,43 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authcrypt",
+    "description": "This module provides authentication against password hashes or .htpasswd files",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "authcrypt"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\authcrypt\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "webmozart/assert": "~1.4",
+        "whitehat101/apr1-md5": "~1.0"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-authcrypt/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-authcrypt"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Hash.php b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Hash.php
index aa17adcf68..4d1ee95dad 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Hash.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Hash.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Module\authcrypt\Auth\Source;
 
+use SimpleSAML\Logger;
+use SimpleSAML\Utils\Attributes;
+use SimpleSAML\Utils\Crypto;
+
 /**
  * Authentication source for username & hashed password.
  *
@@ -55,7 +59,7 @@ public function __construct($info, $config)
             $passwordhash = $userpass[1];
 
             try {
-                $attributes = \SimpleSAML\Utils\Attributes::normalizeAttributesArray($attributes);
+                $attributes = Attributes::normalizeAttributesArray($attributes);
             } catch (\Exception $e) {
                 throw new \Exception('Invalid attributes for user '.$username.
                     ' in authentication source '.$this->authId.': '.
@@ -91,10 +95,10 @@ protected function login($username, $password)
         foreach ($this->users as $userpass => $attrs) {
             $matches = explode(':', $userpass, 2);
             if ($matches[0] === $username) {
-                if (\SimpleSAML\Utils\Crypto::pwValid($matches[1], $password)) {
+                if (Crypto::pwValid($matches[1], $password)) {
                     return $attrs;
                 } else {
-                    \SimpleSAML\Logger::debug('Incorrect password "'.$password.'" for user '.$username);
+                    Logger::debug('Incorrect password "'.$password.'" for user '.$username);
                 }
             }
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Htpasswd.php b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Htpasswd.php
index 72a1fce728..fc05800fdb 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Htpasswd.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/lib/Auth/Source/Htpasswd.php
@@ -9,6 +9,9 @@
  * @package SimpleSAMLphp
  */
 
+use SimpleSAML\Logger;
+use SimpleSAML\Utils\Attributes;
+use SimpleSAML\Utils\Crypto;
 use WhiteHat101\Crypt\APR1_MD5;
 
 class Htpasswd extends \SimpleSAML\Module\core\Auth\UserPassBase
@@ -53,7 +56,7 @@ public function __construct($info, $config)
         $this->users = explode("\n", trim($htpasswd));
 
         try {
-            $this->attributes = \SimpleSAML\Utils\Attributes::normalizeAttributesArray($config['static_attributes']);
+            $this->attributes = Attributes::normalizeAttributesArray($config['static_attributes']);
         } catch (\Exception $e) {
             throw new \Exception('Invalid static_attributes in authentication source '.
                 $this->authId.': '.$e->getMessage());
@@ -91,9 +94,9 @@ protected function login($username, $password)
                 $attributes = array_merge(['uid' => [$username]], $this->attributes);
 
                 // Traditional crypt(3)
-                if (\SimpleSAML\Utils\Crypto::secureCompare($crypted, crypt($password, $crypted))) {
-                    \SimpleSAML\Logger::debug('User '.$username.' authenticated successfully');
-                    \SimpleSAML\Logger::warning(
+                if (Crypto::secureCompare($crypted, crypt($password, $crypted))) {
+                    Logger::debug('User '.$username.' authenticated successfully');
+                    Logger::warning(
                         'CRYPT authentication is insecure. Please consider using something else.'
                     );
                     return $attributes;
@@ -101,13 +104,13 @@ protected function login($username, $password)
 
                 // Apache's custom MD5
                 if (APR1_MD5::check($password, $crypted)) {
-                    \SimpleSAML\Logger::debug('User '.$username.' authenticated successfully');
+                    Logger::debug('User '.$username.' authenticated successfully');
                     return $attributes;
                 }
 
                 // PASSWORD_BCRYPT
-                if (\SimpleSAML\Utils\Crypto::pwValid($crypted, $password)) {
-                    \SimpleSAML\Logger::debug('User '.$username.' authenticated successfully');
+                if (Crypto::pwValid($crypted, $password)) {
+                    Logger::debug('User '.$username.' authenticated successfully');
                     return $attributes;
                 }
                 throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/psalm.xml
new file mode 100644
index 0000000000..5802afa68f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/psalm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp authCrypt module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/tests/bootstrap.php
new file mode 100644
index 0000000000..603b889e57
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authcrypt/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/authcrypt';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.php_cs.dist
new file mode 100644
index 0000000000..aba775e958
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/extlibinc',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.travis.yml
new file mode 100644
index 0000000000..208a6d6c78
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/.travis.yml
@@ -0,0 +1,30 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+
+script:
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/composer.json
new file mode 100644
index 0000000000..ffee58ae49
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/composer.json
@@ -0,0 +1,45 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authfacebook",
+    "description": "A module that is able to authenticate against Facebook",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "facebook"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Andjelko Horvat",
+            "email": "comel@vingd.com"
+        },
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\authfacebook\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
+    },
+    "support": {
+        "issues": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook/issues",
+        "source": "https://github.com/simplesamlphp/simplesamlphp-module-authfacebook"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/extlibinc/base_facebook.php b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/extlibinc/base_facebook.php
index aa1a23efb2..e53c2b2769 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/extlibinc/base_facebook.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/extlibinc/base_facebook.php
@@ -102,11 +102,11 @@ public function getType()
      */
     public function __toString()
     {
-        $str = $this->getType().': ';
+        $str = $this->getType() . ': ';
         if ($this->code != 0) {
-            $str .= $this->code.': ';
+            $str .= $this->code . ': ';
         }
-        return $str.$this->message;
+        return $str . $this->message;
     }
 }
 
@@ -170,25 +170,27 @@ abstract class BaseFacebook
     /**
      * The ID of the Facebook user, or 0 if the user is logged out.
      *
-     * @var integer
+     * @var integer|null
      */
-    protected $user;
+    protected $user = null;
 
     /**
      * The data from the signed_request token.
+     * @var array|null
      */
-    protected $signedRequest;
+    protected $signedRequest = null;
 
     /**
      * A CSRF state variable to assist in the defense against CSRF attacks.
+     * @var string|null
      */
-    protected $state;
+    protected $state = null;
 
     /**
      * The OAuth access token received in exchange for a valid authorization
      * code.  null means the access token has yet to be determined.
      *
-     * @var string
+     * @var string|null
      */
     protected $accessToken = null;
 
@@ -402,7 +404,7 @@ public function setExtendedAccessToken()
      * access token if a valid user access token wasn't available.  Subsequent
      * calls return whatever the first call returned.
      *
-     * @return string The access token
+     * @return string|null The access token
      */
     public function getAccessToken()
     {
@@ -495,7 +497,7 @@ protected function getUserAccessToken()
      * Retrieve the signed request, either from a request parameter or,
      * if not present, from a cookie.
      *
-     * @return array the signed request, if available, or null otherwise.
+     * @return array|null the signed request, if available, or null otherwise.
      */
     public function getSignedRequest()
     {
@@ -517,7 +519,7 @@ public function getSignedRequest()
      * Get the UID of the connected user, or 0
      * if the Facebook user is not connected.
      *
-     * @return string the UID if available.
+     * @return int the UID if available.
      */
     public function getUser()
     {
@@ -534,7 +536,7 @@ public function getUser()
      * requests, then considering an authorization code, and then
      * falling back to any persistent store storing the user.
      *
-     * @return integer The id of the connected Facebook user,
+     * @return int The id of the connected Facebook user,
      *                 or 0 if no such user exists.
      */
     protected function getUserFromAvailableData()
@@ -560,15 +562,18 @@ protected function getUserFromAvailableData()
             return 0;
         }
 
-        $user = $this->getPersistentData('user_id', $default = 0);
+        $user = $this->getPersistentData('user_id', $default = false);
         $persisted_access_token = $this->getPersistentData('access_token');
 
         // use access_token to fetch user id if we have a user access_token, or if
         // the cached access token has changed
         $access_token = $this->getAccessToken();
-        if ($access_token &&
-            $access_token != $this->getApplicationAccessToken() &&
-            !($user && $persisted_access_token == $access_token)) {
+        if (
+            $access_token
+            && $access_token != $this->getApplicationAccessToken()
+            && !($user
+            && $persisted_access_token == $access_token)
+        ) {
             $user = $this->getUserFromAccessToken();
             if ($user) {
                 $this->setPersistentData('user_id', $user);
@@ -690,7 +695,7 @@ public function api(/* polymorphic */)
      */
     protected function getSignedRequestCookieName()
     {
-        return 'fbsr_'.$this->getAppId();
+        return 'fbsr_' . $this->getAppId();
     }
 
     /**
@@ -702,7 +707,7 @@ protected function getSignedRequestCookieName()
      */
     protected function getMetadataCookieName()
     {
-        return 'fbm_'.$this->getAppId();
+        return 'fbm_' . $this->getAppId();
     }
 
     /**
@@ -716,16 +721,19 @@ protected function getMetadataCookieName()
     protected function getCode()
     {
         if (isset($_REQUEST['code'])) {
-            if ($this->state !== null &&
-                isset($_REQUEST['state']) &&
-                $this->state === $_REQUEST['state']
+            if (
+                $this->state !== null
+                && isset($_REQUEST['state'])
+                && $this->state === $_REQUEST['state']
             ) {
                 // CSRF state has done its job, so clear it
                 $this->state = null;
                 $this->clearPersistentData('state');
                 return $_REQUEST['code'];
             } else {
-                self::errorLog('CSRF state token does not match one provided. '.$this->state.'!='.$_REQUEST['state']);
+                self::errorLog(
+                    'CSRF state token does not match one provided. ' . strval($this->state) . '!=' . $_REQUEST['state']
+                );
                 return false;
             }
         }
@@ -762,7 +770,7 @@ protected function getUserFromAccessToken()
      */
     protected function getApplicationAccessToken()
     {
-        return $this->appId.'|'.$this->appSecret;
+        return $this->appId . '|' . $this->appSecret;
     }
 
     /**
@@ -773,7 +781,7 @@ protected function getApplicationAccessToken()
     protected function establishCSRFTokenState()
     {
         if ($this->state === null) {
-            $this->state = md5(uniqid(mt_rand(), true));
+            $this->state = md5(uniqid(strval(mt_rand()), true));
             $this->setPersistentData('state', $this->state);
         }
     }
@@ -787,6 +795,7 @@ protected function establishCSRFTokenState()
      * either logged in to Facebook or has granted an offline access permission.
      *
      * @param string $code An authorization code.
+     * @param string|null $redirect_uri
      * @return mixed An access token exchanged for the authorization code, or
      *               false if an access token could not be generated.
      */
@@ -828,7 +837,7 @@ protected function getAccessTokenFromCode($code, $redirect_uri = null)
 
         $response_params = json_decode($access_token_response, true);
         if (!isset($response_params['access_token'])) {
-            self::errorLog('No access token in response. '.$access_token_response);
+            self::errorLog('No access token in response. ' . $access_token_response);
             return false;
         }
 
@@ -849,14 +858,13 @@ protected function _restserver($params)
         $params['api_key'] = $this->getAppId();
         $params['format'] = 'json-strings';
 
-        $result = json_decode(
-            $this->_oauthRequest(
-                $this->getApiUrl($params['method']),
-                $params
-            ),
-            true
+        $result = $this->_oauthRequest(
+            $this->getApiUrl($params['method']),
+            $params
         );
 
+        $result = json_decode($result, true);
+
         // results are returned, errors are thrown
         if (is_array($result) && isset($result['error_code'])) {
             $this->throwAPIException($result);
@@ -865,8 +873,10 @@ protected function _restserver($params)
         // @codeCoverageIgnoreEnd
 
         $method = strtolower($params['method']);
-        if ($method === 'auth.expiresession' ||
-            $method === 'auth.revokeauthorization') {
+        if (
+            $method === 'auth.expiresession'
+            || $method === 'auth.revokeauthorization'
+        ) {
             $this->destroySession();
         }
 
@@ -893,7 +903,7 @@ protected function isVideoPost($path, $method = 'GET')
      * Invoke the Graph API.
      *
      * @param string $path The path (required)
-     * @param string $method The http method (default 'GET')
+     * @param array|string $method The http method (default 'GET')
      * @param array $params The query/post data
      *
      * @return mixed The decoded response object
@@ -905,6 +915,8 @@ protected function _graph($path, $method = 'GET', $params = [])
             $params = $method;
             $method = 'GET';
         }
+
+        /** @var string $method */
         $params['method'] = $method; // method override as we always do a POST
 
         if ($this->isVideoPost($path, $method)) {
@@ -913,14 +925,13 @@ protected function _graph($path, $method = 'GET', $params = [])
             $domainKey = 'graph';
         }
 
-        $result = json_decode(
-            $this->_oauthRequest(
-                $this->getUrl($domainKey, $path),
-                $params
-            ),
-            true
+        $result = $this->_oauthRequest(
+            $this->getUrl($domainKey, $path),
+            $params
         );
 
+        $result = json_decode($result, true);
+
         // results are returned, errors are thrown
         if (is_array($result) && isset($result['error'])) {
             $this->throwAPIException($result);
@@ -963,13 +974,13 @@ protected function _oauthRequest($url, $params)
      *
      * @param string $url The URL to make the request to
      * @param array $params The parameters to use for the POST body
-     * @param CurlHandler $ch Initialized curl handle
+     * @param resource|null $ch Initialized curl handle
      *
      * @return string The response text
      */
     protected function makeRequest($url, $params, $ch = null)
     {
-        if (!$ch) {
+        if ($ch === null) {
             $ch = curl_init();
         }
 
@@ -997,7 +1008,7 @@ protected function makeRequest($url, $params, $ch = null)
         if (curl_errno($ch) == 60) {
             // CURLE_SSL_CACERT
             self::errorLog('Invalid or no certificate authority found, using bundled information');
-            curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__).'/fb_ca_chain_bundle.crt');
+            curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
             $result = curl_exec($ch);
         }
 
@@ -1011,7 +1022,7 @@ protected function makeRequest($url, $params, $ch = null)
             $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
             if (preg_match($regex, curl_error($ch), $matches)) {
                 if (strlen(@inet_pton($matches[1])) === 16) {
-                    self::errorLog('Invalid IPv6 configuration on server, '.
+                    self::errorLog('Invalid IPv6 configuration on server, ' .
                             'Please disable or get native IPv6 on your server.');
                     self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
                     curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
@@ -1032,6 +1043,7 @@ protected function makeRequest($url, $params, $ch = null)
             throw $e;
         }
         curl_close($ch);
+        /** @var string $result */
         return $result;
     }
 
@@ -1039,7 +1051,7 @@ protected function makeRequest($url, $params, $ch = null)
      * Parses a signed_request and validates the signature.
      *
      * @param string $signed_request A signed token
-     * @return array The payload inside it or null if the sig is wrong
+     * @return array|null The payload inside it or null if the sig is wrong
      */
     protected function parseSignedRequest($signed_request)
     {
@@ -1050,7 +1062,7 @@ protected function parseSignedRequest($signed_request)
         $data = json_decode(self::base64UrlDecode($payload), true);
 
         if (strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM) {
-            self::errorLog('Unknown algorithm. Expected '.self::SIGNED_REQUEST_ALGORITHM);
+            self::errorLog('Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM);
             return null;
         }
 
@@ -1067,29 +1079,24 @@ protected function parseSignedRequest($signed_request)
     /**
      * Makes a signed_request blob using the given data.
      *
-     * @param $data array The data array.
+     * @param array $data The data array.
      * @return string The signed request.
      */
-    protected function makeSignedRequest($data)
+    protected function makeSignedRequest(array $data)
     {
-        if (!is_array($data)) {
-            throw new InvalidArgumentException(
-                'makeSignedRequest expects an array. Got: '.print_r($data, true)
-            );
-        }
         $data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM;
         $data['issued_at'] = time();
         $json = json_encode($data);
         $b64 = self::base64UrlEncode($json);
         $raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true);
         $sig = self::base64UrlEncode($raw_sig);
-        return $sig.'.'.$b64;
+        return $sig . ' . ' . $b64;
     }
 
     /**
      * Build the URL for api given parameters.
      *
-     * @param $method String the method name.
+     * @param string $method String the method name.
      * @return string The URL for the given parameters
      */
     protected function getApiUrl($method)
@@ -1169,9 +1176,9 @@ protected function getApiUrl($method)
     /**
      * Build the URL for given domain alias, path and parameters.
      *
-     * @param $name string The name of the domain
-     * @param $path string Optional path (without a leading slash)
-     * @param $params array Optional query parameters
+     * @param string $name The name of the domain
+     * @param string $path Optional path (without a leading slash)
+     * @param array $params Optional query parameters
      *
      * @return string The URL for the given parameters
      */
@@ -1184,13 +1191,16 @@ protected function getUrl($name, $path = '', $params = [])
             }
             $url .= $path;
         }
-        if ($params) {
-            $url .= '?'.http_build_query($params, null, '&');
+        if (!empty($params)) {
+            $url .= '?' . http_build_query($params, null, '&');
         }
 
         return $url;
     }
 
+    /**
+     * @return string
+     */
     protected function getHttpHost()
     {
         if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
@@ -1199,6 +1209,9 @@ protected function getHttpHost()
         return $_SERVER['HTTP_HOST'];
     }
 
+    /**
+     * @return string
+     */
     protected function getHttpProtocol()
     {
         if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
@@ -1220,6 +1233,7 @@ protected function getHttpProtocol()
 
     /**
      * Get the base domain used for the cookie.
+     * @return string
      */
     protected function getBaseDomain()
     {
@@ -1240,9 +1254,9 @@ protected function getBaseDomain()
      */
     protected function getCurrentUrl()
     {
-        $protocol = $this->getHttpProtocol().'://';
+        $protocol = $this->getHttpProtocol() . '://';
         $host = $this->getHttpHost();
-        $currentUrl = $protocol.$host.$_SERVER['REQUEST_URI'];
+        $currentUrl = $protocol . $host . $_SERVER['REQUEST_URI'];
         $parts = parse_url($currentUrl);
 
         // use port if non default
@@ -1250,10 +1264,10 @@ protected function getCurrentUrl()
             isset($parts['port']) &&
             (($protocol === 'http://' && $parts['port'] !== 80) ||
             ($protocol === 'https://' && $parts['port'] !== 443))
-            ? ':'.$parts['port'] : '';
+            ? ':' . $parts['port'] : '';
 
         // rebuild
-        return $protocol.$parts['host'].$port.$parts['path'];
+        return $protocol . $parts['host'] . $port . $parts['path'];
     }
 
     /**
@@ -1261,8 +1275,9 @@ protected function getCurrentUrl()
      * because the access token is no longer valid.  If that is
      * the case, then we destroy the session.
      *
-     * @param $result array A record storing the error message returned
+     * @param array $result A record storing the error message returned
      *                      by a failed API call.
+     * @return void
      */
     protected function throwAPIException($result)
     {
@@ -1275,7 +1290,8 @@ protected function throwAPIException($result)
             // REST server errors are just Exceptions
             case 'Exception':
                 $message = $e->getMessage();
-                if ((strpos($message, 'Error validating access token') !== false) ||
+                if (
+                    (strpos($message, 'Error validating access token') !== false) ||
                     (strpos($message, 'Invalid OAuth access token') !== false) ||
                     (strpos($message, 'An active access token must be used') !== false)
                 ) {
@@ -1292,6 +1308,7 @@ protected function throwAPIException($result)
      * Prints to the error log if you aren't in command line mode.
      *
      * @param string $msg Log message
+     * @return void
      */
     protected static function errorLog($msg)
     {
@@ -1336,6 +1353,7 @@ protected static function base64UrlEncode($input)
 
     /**
      * Destroy the current session
+     * @return void
      */
     public function destroySession()
     {
@@ -1351,12 +1369,12 @@ public function destroySession()
             unset($_COOKIE[$cookie_name]);
             if (!headers_sent()) {
                 $base_domain = $this->getBaseDomain();
-                setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
+                setcookie($cookie_name, '', 1, '/', '.' . $base_domain);
             } else {
                 // @codeCoverageIgnoreStart
                 self::errorLog(
-                    'There exists a cookie that we wanted to clear that we couldn\'t '.
-                    'clear because headers was already sent. Make sure to do the first '.
+                    'There exists a cookie that we wanted to clear that we couldn\'t ' .
+                    'clear because headers was already sent. Make sure to do the first ' .
                     'API call before outputing anything.'
                 );
                 // @codeCoverageIgnoreEnd
@@ -1395,14 +1413,24 @@ protected function getMetadataCookie()
         return $metadata;
     }
 
+    /**
+     * @param string $big
+     * @param string $small
+     * @return string|bool
+     */
     protected static function isAllowedDomain($big, $small)
     {
         if ($big === $small) {
             return true;
         }
-        return self::endsWith($big, '.'.$small);
+        return self::endsWith($big, '.' . $small);
     }
 
+    /**
+     * @param string $big
+     * @param string $small
+     * @return string|bool
+     */
     protected static function endsWith($big, $small)
     {
         $len = strlen($small);
@@ -1427,7 +1455,7 @@ protected static function endsWith($big, $small)
      * getPersistentData($key) return $value. This call may be in another request.
      *
      * @param string $key
-     * @param array $value
+     * @param mixed $value
      *
      * @return void
      */
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Auth/Source/Facebook.php b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Auth/Source/Facebook.php
index a2bee6a7a3..b4a0c1ea94 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Auth/Source/Facebook.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Auth/Source/Facebook.php
@@ -2,7 +2,12 @@
 
 namespace SimpleSAML\Module\authfacebook\Auth\Source;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
 use SimpleSAML\Module;
+use SimpleSAML\Utils;
 
 /**
  * Authenticate using Facebook Platform.
@@ -72,9 +77,9 @@ public function __construct($info, $config)
         // Call the parent constructor first, as required by the interface
         parent::__construct($info, $config);
 
-        $cfgParse = \SimpleSAML\Configuration::loadFromArray(
+        $cfgParse = Configuration::loadFromArray(
             $config,
-            'authsources['.var_export($this->authId, true).']'
+            'authsources[' . var_export($this->authId, true) . ']'
         );
 
         $this->api_key = $cfgParse->getString('api_key');
@@ -88,6 +93,7 @@ public function __construct($info, $config)
      * Log-in using Facebook platform
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -95,7 +101,7 @@ public function authenticate(&$state)
 
         // We are going to need the authId in order to retrieve this authentication source later
         $state[self::AUTHID] = $this->authId;
-        \SimpleSAML\Auth\State::saveState($state, self::STAGE_INIT);
+        Auth\State::saveState($state, self::STAGE_INIT);
 
         $facebook = new Module\authfacebook\Facebook(
             ['appId' => $this->api_key, 'secret' => $this->secret],
@@ -105,12 +111,16 @@ public function authenticate(&$state)
 
         $linkback = Module::getModuleURL('authfacebook/linkback.php');
         $url = $facebook->getLoginUrl(['redirect_uri' => $linkback, 'scope' => $this->req_perms]);
-        \SimpleSAML\Auth\State::saveState($state, self::STAGE_INIT);
+        Auth\State::saveState($state, self::STAGE_INIT);
 
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url);
+        Utils\HTTP::redirectTrustedURL($url);
     }
 
 
+    /**
+     * @param array &$state
+     * @return void
+     */
     public function finalStep(&$state)
     {
         assert(is_array($state));
@@ -121,35 +131,36 @@ public function finalStep(&$state)
         );
         $uid = $facebook->getUser();
 
-        if (isset($uid) && $uid) {
+        $info = null;
+        if ($uid > 0) {
             try {
-                $info = $facebook->api("/".$uid.($this->user_fields ? "?fields=".$this->user_fields : ""));
+                $info = $facebook->api("/" . $uid . ($this->user_fields ? "?fields=" . $this->user_fields : ""));
             } catch (\FacebookApiException $e) {
-                throw new \SimpleSAML\Error\AuthSource($this->authId, 'Error getting user profile.', $e);
+                throw new Error\AuthSource($this->authId, 'Error getting user profile.', $e);
             }
         }
 
         if (!isset($info)) {
-            throw new \SimpleSAML\Error\AuthSource($this->authId, 'Error getting user profile.');
+            throw new Error\AuthSource($this->authId, 'Error getting user profile.');
         }
 
         $attributes = [];
         foreach ($info as $key => $value) {
             if (is_string($value) && !empty($value)) {
-                $attributes['facebook.'.$key] = [(string) $value];
+                $attributes['facebook.' . $key] = [(string) $value];
             }
         }
 
         if (array_key_exists('third_party_id', $info)) {
-            $attributes['facebook_user'] = [$info['third_party_id'].'@facebook.com'];
+            $attributes['facebook_user'] = [$info['third_party_id'] . '@facebook.com'];
         } else {
-            $attributes['facebook_user'] = [$uid.'@facebook.com'];
+            $attributes['facebook_user'] = [$uid . '@facebook.com'];
         }
 
-        $attributes['facebook_targetedID'] = ['http://facebook.com!'.$uid];
+        $attributes['facebook_targetedID'] = ['http://facebook.com!' . $uid];
         $attributes['facebook_cn'] = [$info['name']];
 
-        \SimpleSAML\Logger::debug('Facebook Returned Attributes: '.implode(", ", array_keys($attributes)));
+        Logger::debug('Facebook Returned Attributes: ' . implode(", ", array_keys($attributes)));
 
         $state['Attributes'] = $attributes;
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Facebook.php b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Facebook.php
index cf68d348a5..308bb6e6aa 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Facebook.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/lib/Facebook.php
@@ -2,7 +2,7 @@
 
 namespace SimpleSAML\Module\authfacebook;
 
-require_once(dirname(dirname(__FILE__)).'/extlibinc/base_facebook.php');
+require_once(dirname(dirname(__FILE__)) . '/extlibinc/base_facebook.php');
 
 /**
  * Extends the BaseFacebook class with the intent of using
@@ -17,14 +17,24 @@ class Facebook extends \BaseFacebook
     // expiration will trump this
     const FBSS_COOKIE_EXPIRE = 31556926; // 1 year
 
-    // Stores the shared session ID if one is set
-    protected $sharedSessionID;
+    /**
+     * Stores the shared session ID if one is set
+     * @var string
+     */
+    protected $sharedSessionID = '';
 
-    // SimpleSAMLphp state array
-    protected $ssp_state;
+    /**
+     * SimpleSAMLphp state array
+     * @var array
+     */
+    protected $ssp_state = [];
+
+    /** @var string|null */
+    protected $state = null;
+
+    /** @var array */
+    protected static $kSupportedKeys = ['state', 'code', 'access_token', 'user_id'];
 
-    // \SimpleSAML\Auth\State
-    protected $state;
 
     /**
      * Identical to the parent constructor, except that
@@ -32,7 +42,8 @@ class Facebook extends \BaseFacebook
      * access token if during the course of execution
      * we discover them.
      *
-     * @param Array $config the application configuration. Additionally
+     * @param array $config the application configuration. Additionally
+     * @param array &$ssp_state
      * accepts "sharedSession" as a boolean to turn on a secondary
      * cookie for environments with a shared session (that is, your app
      * shares the domain with other apps).
@@ -48,15 +59,20 @@ public function __construct(array $config, &$ssp_state)
         }
     }
 
-    protected static $kSupportedKeys = ['state', 'code', 'access_token', 'user_id'];
 
+    /**
+     * @return void
+     */
     protected function initSharedSession()
     {
         $cookie_name = $this->getSharedSessionCookieName();
         if (isset($_COOKIE[$cookie_name])) {
             $data = $this->parseSignedRequest($_COOKIE[$cookie_name]);
-            if (!empty($data) && !empty($data['domain']) &&
-                self::isAllowedDomain($this->getHttpHost(), $data['domain'])) {
+            if (
+                !empty($data)
+                && !empty($data['domain'])
+                && self::isAllowedDomain($this->getHttpHost(), $data['domain'])
+            ) {
                 // good case
                 $this->sharedSessionID = $data['id'];
                 return;
@@ -65,7 +81,7 @@ protected function initSharedSession()
         }
         // evil/corrupt/missing case
         $base_domain = $this->getBaseDomain();
-        $this->sharedSessionID = md5(uniqid(mt_rand(), true));
+        $this->sharedSessionID = md5(uniqid(strval(mt_rand()), true));
         $cookie_value = $this->makeSignedRequest(
             [
                 'domain' => $base_domain,
@@ -75,28 +91,33 @@ protected function initSharedSession()
         $_COOKIE[$cookie_name] = $cookie_value;
         if (!headers_sent()) {
             $expire = time() + self::FBSS_COOKIE_EXPIRE;
-            setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain);
+            setcookie($cookie_name, $cookie_value, $expire, '/', '.' . $base_domain);
         } else {
             // @codeCoverageIgnoreStart
             \SimpleSAML\Logger::debug(
-                'Shared session ID cookie could not be set! You must ensure you '.
-                'create the Facebook instance before headers have been sent. This '.
+                'Shared session ID cookie could not be set! You must ensure you ' .
+                'create the Facebook instance before headers have been sent. This ' .
                 'will cause authentication issues after the first request.'
             );
             // @codeCoverageIgnoreEnd
         }
     }
 
+
     /**
      * Provides the implementations of the inherited abstract
      * methods.  The implementation uses PHP sessions to maintain
      * a store for authorization codes, user ids, CSRF states, and
      * access tokens.
+     *
+     * @param string $key
+     * @param mixed $value
+     * @return void
      */
     protected function setPersistentData($key, $value)
     {
         if (!in_array($key, self::$kSupportedKeys)) {
-            \SimpleSAML\Logger::debug("Unsupported key passed to setPersistentData: ".var_export($key, true));
+            \SimpleSAML\Logger::debug("Unsupported key passed to setPersistentData: " . var_export($key, true));
             return;
         }
 
@@ -104,10 +125,16 @@ protected function setPersistentData($key, $value)
         $this->ssp_state[$session_var_name] = $value;
     }
 
+
+    /**
+     * @param string $key
+     * @param bool $default
+     * @return mixed
+     */
     protected function getPersistentData($key, $default = false)
     {
         if (!in_array($key, self::$kSupportedKeys)) {
-            \SimpleSAML\Logger::debug("Unsupported key passed to getPersistentData: ".var_export($key, true));
+            \SimpleSAML\Logger::debug("Unsupported key passed to getPersistentData: " . var_export($key, true));
             return $default;
         }
 
@@ -115,10 +142,15 @@ protected function getPersistentData($key, $default = false)
         return isset($this->ssp_state[$session_var_name]) ? $this->ssp_state[$session_var_name] : $default;
     }
 
+
+    /**
+     * @param string $key
+     * @return void
+     */
     protected function clearPersistentData($key)
     {
         if (!in_array($key, self::$kSupportedKeys)) {
-            \SimpleSAML\Logger::debug("Unsupported key passed to clearPersistentData: ".var_export($key, true));
+            \SimpleSAML\Logger::debug("Unsupported key passed to clearPersistentData: " . var_export($key, true));
             return;
         }
 
@@ -128,6 +160,10 @@ protected function clearPersistentData($key)
         }
     }
 
+
+    /**
+     * @return void
+     */
     protected function clearAllPersistentData()
     {
         foreach (self::$kSupportedKeys as $key) {
@@ -138,19 +174,32 @@ protected function clearAllPersistentData()
         }
     }
 
+
+    /**
+     * @return void
+     */
     protected function deleteSharedSessionCookie()
     {
         $cookie_name = $this->getSharedSessionCookieName();
         unset($_COOKIE[$cookie_name]);
         $base_domain = $this->getBaseDomain();
-        setcookie($cookie_name, '', 1, '/', '.'.$base_domain);
+        setcookie($cookie_name, '', 1, '/', '.' . $base_domain);
     }
 
+
+    /**
+     * @return string
+     */
     protected function getSharedSessionCookieName()
     {
-        return self::FBSS_COOKIE_NAME.'_'.$this->getAppId();
+        return self::FBSS_COOKIE_NAME . '_' . $this->getAppId();
     }
 
+
+    /**
+     * @param string $key
+     * @return string
+     */
     protected function constructSessionVariableName($key)
     {
         $parts = ['authfacebook:authdata:fb', $this->getAppId(), $key];
@@ -160,6 +209,10 @@ protected function constructSessionVariableName($key)
         return implode('_', $parts);
     }
 
+
+    /**
+     * @return void
+     */
     protected function establishCSRFTokenState()
     {
         if ($this->state === null) {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/phpunit.xml
new file mode 100644
index 0000000000..cfe86d3ec5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/phpunit.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>./vendor/simplesamlphp/simplesamlphp-test-framework/tests/</directory>
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+            <directory suffix=".php">./extlibinc</directory>
+            <directory suffix=".php">./tests</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/psalm.xml
new file mode 100644
index 0000000000..b670a64a6d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Module for Facebook Authentication"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="extlibinc" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/tests/bootstrap.php
new file mode 100644
index 0000000000..0436c472c9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/authfacebook';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/www/linkback.php b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/www/linkback.php
index 6a24590194..84e5e32c5d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/www/linkback.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authfacebook/www/linkback.php
@@ -20,17 +20,18 @@
 }
 
 // Find authentication source
-if (!array_key_exists(\SimpleSAML\Module\authfacebook\Auth\Source\Facebook::AUTHID, $state)) {
+if (is_null($state) || !array_key_exists(\SimpleSAML\Module\authfacebook\Auth\Source\Facebook::AUTHID, $state)) {
     throw new \SimpleSAML\Error\BadRequest(
-        'No data in state for '.\SimpleSAML\Module\authfacebook\Auth\Source\Facebook::AUTHID
+        'No data in state for ' . \SimpleSAML\Module\authfacebook\Auth\Source\Facebook::AUTHID
     );
 }
 $sourceId = $state[\SimpleSAML\Module\authfacebook\Auth\Source\Facebook::AUTHID];
 
+/** @var \SimpleSAML\Module\authfacebook\Auth\Source\Facebook|null $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId);
 if ($source === null) {
     throw new \SimpleSAML\Error\BadRequest(
-        'Could not find authentication source with id '.var_export($sourceId, true)
+        'Could not find authentication source with id ' . var_export($sourceId, true)
     );
 }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authorize/.php_cs.dist
new file mode 100644
index 0000000000..59267ee96c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/templates',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authorize/.travis.yml
new file mode 100644
index 0000000000..3c250287a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/authorize/bin/check-syntax.sh
new file mode 100755
index 0000000000..8fc2e8e342
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib templates tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authorize/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json
new file mode 100644
index 0000000000..2e2194e354
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authorize",
+    "description": "This module provides a user authorization filter based on attribute matching",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "authorize"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Ernesto Revilla",
+            "email": "erny@yaco.es"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\authorize\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Module\\Authorize\\Tests\\Utils\\": "tests/Utils",
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-authorize/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-authorize"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/dictionaries/Authorize.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/authorize/dictionaries/Authorize.translation.json
index d3611a83f5..fa87780cfa 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/dictionaries/Authorize.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/dictionaries/Authorize.translation.json
@@ -33,7 +33,9 @@
 		"pt-br": "Acesso proibido",
 		"el": "\u0394\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7",
 		"xh": "Ufikelelo luthintelwe",
-		"zu": "Ukufinyelela kwenqatshelwe"
+		"zu": "Ukufinyelela kwenqatshelwe",
+		"st": "Phihlello e thibetswe",
+		"ca": "Accés prohibit"
 	},
 	"403_text": {
 		"es": "No tiene los privilegios necesarios para acceder a esta aplicaci\u00f3n. Si considera que esto no es correcto, consulte el administrador.",
@@ -68,6 +70,8 @@
 		"pt-br": "Voc\u00ea n\u00e3o tem privil\u00e9gios necess\u00e1rios para acessar esta aplica\u00e7\u00e3o. Entre em contato com o administrador se voc\u00ea achar que isso seja incorreto.",
 		"el": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03c4\u03b1 \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03b1 \u03b4\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03ba\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae \u03b1\u03bd \u03b8\u03b5\u03c9\u03c1\u03b5\u03af\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03b1\u03c5\u03c4\u03cc \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03b1\u03bd\u03b8\u03b1\u03c3\u03bc\u03ad\u03bd\u03bf.",
 		"zu": "Awunawo amalungelo adingekile okufinyelela lolu hlelo. Sicela uthinte umlawuli uma uthola ukuthi lokhu akulona iqiniso.",
-		"xh": "Awunawo amalungelo afunekayo ukuze ufikelele olu setyenziso. Nceda uqhagamshelane nomlawuli ukuba ngaba ukufumanisa oku kungachanekanga."
+		"xh": "Awunawo amalungelo afunekayo ukuze ufikelele olu setyenziso. Nceda uqhagamshelane nomlawuli ukuba ngaba ukufumanisa oku kungachanekanga.",
+		"st": "Ha o na makgabane a lokelang ho fihlella tshebediso ena. Ka kopo ikopanye le motsamaisi haeba o fumana sena se sa nepahala.",
+		"ca": "No teniu els privilegis necessaris per accedir a aquesta aplicació. Si us plau, poseu-vos en contacte amb l’administrador si penseu que això no és correcte."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/docs/authorize.md b/vendor/simplesamlphp/simplesamlphp/modules/authorize/docs/authorize.md
index 36ac30c90b..d18964d63c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/docs/authorize.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/docs/authorize.md
@@ -50,14 +50,17 @@ Note: If regex is enabled, you must use the preg_match format, i.e. you have to
    (as far as I know), you have to close the browser.
 
 ### Examples ###
-To use this filter configure it in `config/config.php`:
+To use this filter configure it in `config/config.php`.
+For unstructured attributes use `^` and `$` to anchor your regex as necessary:
+
 ```php
 'authproc.sp' => [
     60 => [
         'class' => 'authorize:Authorize',
         'uid'   =>  [
-            '/.*@example.com/',
-            '/(user1|user2|user3)@example.edu/',
+            '/^.*@example.com$/',
+            // Use anchors to prevent matching 'wronguser1@example.edu.attacker.com'
+            '/^(user1|user2|user3)@example.edu$/',
         ],
         'schacUserStatus' => '@urn:mace:terena.org:userStatus:' .
         'example.org:service:active.*@',
@@ -72,10 +75,10 @@ An alternate way of using this filter is to deny certain users. Or even use mult
 'authproc.sp' => [
     60 => array[
         'class' => 'authorize:Authorize',
-        'deny'  => TRUE,
+        'deny'  => true,
         'uid'   =>  [
-            '/.*@students.example.edu/',
-            '/(stu1|stu2|stu3)@example.edu/',
+            '/.*@students.example.edu$/',
+            '/^(stu1|stu2|stu3)@example.edu$/',
         ]
     ]
 ]
@@ -89,7 +92,7 @@ Additionally, some helpful instructions are shown.
 'authproc.sp' => [
     60 => [
         'class' => 'authorize:Authorize',
-        'regex' => FALSE,
+        'regex' => false,
         'group' => [
             'CN=SimpleSAML Students,CN=Users,DC=example,DC=edu',
             'CN=All Teachers,OU=Staff,DC=example,DC=edu',
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/lib/Auth/Process/Authorize.php b/vendor/simplesamlphp/simplesamlphp/modules/authorize/lib/Auth/Process/Authorize.php
index e40cbaf362..5d57b36f6c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/lib/Auth/Process/Authorize.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/lib/Auth/Process/Authorize.php
@@ -2,6 +2,13 @@
 
 namespace SimpleSAML\Module\authorize\Auth\Process;
 
+use SimpleSAML\Auth\State;
+use SimpleSAML\Module;
+use SimpleSAML\Utils\Arrays;
+use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Module\Authorize\Tests\Utils;
+use Webmozart\Assert\Assert;
+
 /**
  * Filter to authorize only certain users.
  * See docs directory.
@@ -53,36 +60,35 @@ public function __construct($config, $reserved)
 
         assert(is_array($config));
 
-        // Check for the deny option, get it and remove it
-        // Must be bool specifically, if not, it might be for a attrib filter below
+        // Check for the deny option
+        // Must be bool specifically, if not, it might be for an attrib filter below
         if (isset($config['deny']) && is_bool($config['deny'])) {
             $this->deny = $config['deny'];
-            unset($config['deny']);
         }
 
-        // Check for the regex option, get it and remove it
-        // Must be bool specifically, if not, it might be for a attrib filter below
+        // Check for the regex option
+        // Must be bool specifically, if not, it might be for an attrib filter below
         if (isset($config['regex']) && is_bool($config['regex'])) {
             $this->regex = $config['regex'];
-            unset($config['regex']);
         }
 
-        // Check for the reject_msg option, get it and remove it
-        // Must be array of languages
+        // Check for the reject_msg option; Must be array of languages
         if (isset($config['reject_msg']) && is_array($config['reject_msg'])) {
             $this->reject_msg = $config['reject_msg'];
-            unset($config['reject_msg']);
         }
 
+        // Remove all above options
+        unset($config['deny'], $config['regex'], $config['reject_msg']);
+
         foreach ($config as $attribute => $values) {
             if (is_string($values)) {
-                $values = [$values];
-            }
-            if (!is_array($values)) {
+                $values = Arrays::arrayize($values);
+            } else if (!is_array($values)) {
                 throw new \Exception(
                     'Filter Authorize: Attribute values is neither string nor array: '.var_export($attribute, true)
                 );
             }
+
             foreach ($values as $value) {
                 if (!is_string($value)) {
                     throw new \Exception(
@@ -99,26 +105,24 @@ public function __construct($config, $reserved)
      * Apply filter to validate attributes.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
-        $authorize = $this->deny;
         assert(is_array($request));
         assert(array_key_exists('Attributes', $request));
 
+        $authorize = $this->deny;
         $attributes = &$request['Attributes'];
         // Store the rejection message array in the $request
-        if(!empty($this->reject_msg)) {
+        if (!empty($this->reject_msg)) {
             $request['authprocAuthorize_reject_msg'] = $this->reject_msg;
         }
 
         foreach ($this->valid_attribute_values as $name => $patterns) {
             if (array_key_exists($name, $attributes)) {
                 foreach ($patterns as $pattern) {
-                    $values = $attributes[$name];
-                    if (!is_array($values)) {
-                        $values = [$values];
-                    }
+                    $values = Arrays::arrayize($attributes[$name]);
                     foreach ($values as $value) {
                         if ($this->regex) {
                             $matched = preg_match($pattern, $value);
@@ -149,12 +153,13 @@ public function process(&$request)
      * permission logic.
      *
      * @param array $request
+     * @return void
      */
-    protected function unauthorized(&$request)
+    protected function unauthorized(array &$request)
     {
         // Save state and redirect to 403 page
-        $id = \SimpleSAML\Auth\State::saveState($request, 'authorize:Authorize');
-        $url = \SimpleSAML\Module::getModuleURL('authorize/authorize_403.php');
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
+        $id = State::saveState($request, 'authorize:Authorize');
+        $url = Module::getModuleURL('authorize/authorize_403.php');
+        HTTP::redirectTrustedURL($url, ['StateId' => $id]);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/locales/st/LC_MESSAGES/authorize.po b/vendor/simplesamlphp/simplesamlphp/modules/authorize/locales/st/LC_MESSAGES/authorize.po
new file mode 100644
index 0000000000..3150151250
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/locales/st/LC_MESSAGES/authorize.po
@@ -0,0 +1,35 @@
+
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: SimpleSAMLphp 1.15\n"
+"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
+"POT-Creation-Date: 2016-10-12 09:23+0200\n"
+"PO-Revision-Date: 2016-10-14 12:14+0200\n"
+"Last-Translator: \n"
+"Language: st\n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.3.4\n"
+
+msgid "{authorize:Authorize:403_text}"
+msgstr ""
+"Ha o na makgabane a lokelang ho fihlella tshebediso ena. Ka kopo ikopanye "
+"le motsamaisi haeba o fumana sena se sa nepahala."
+
+msgid "{authorize:Authorize:403_header}"
+msgstr "Phihlello e thibetswe"
+
+msgid "Access forbidden"
+msgstr "Phihlello e thibetswe"
+
+msgid ""
+"You don't have the needed privileges to access this application. Please "
+"contact the administrator if you find this to be incorrect."
+msgstr ""
+"Ha o na makgabane a lokelang ho fihlella tshebediso ena. Ka kopo ikopanye "
+"le motsamaisi haeba o fumana sena se sa nepahala."
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authorize/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authorize/psalm.xml
new file mode 100644
index 0000000000..c65291ecd7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp authCrypt module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="templates" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.php b/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.php
index d4d5b79a09..8de2696b21 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/templates/authorize_403.php
@@ -9,13 +9,14 @@
  * @package SimpleSAMLphp
  */
 
+$translator = $this->getTranslator();
 
-$this->data['403_header'] = $this->t('{authorize:Authorize:403_header}');
-$this->data['403_text'] = $this->t('{authorize:Authorize:403_text}');
+$this->data['403_header'] = $translator->t('{authorize:Authorize:403_header}');
+$this->data['403_text'] = $translator->t('{authorize:Authorize:403_text}');
 
 if (array_key_exists('reject_msg', $this->data)) {
-    if(isset($this->data['reject_msg'][$this->getLanguage()])) {
-        $this->data['403_text'] = $this->data['reject_msg'][$this->getLanguage()];
+    if (isset($this->data['reject_msg'][$translator->getLanguage()->getLanguage()])) {
+        $this->data['403_text'] = $this->data['reject_msg'][$translator->getLanguage()->getLanguage()];
     }
 }
 $this->includeAtTemplateBase('includes/header.php');
@@ -23,7 +24,7 @@
 echo '<h1>'.$this->data['403_header'].'</h1>';
 echo '<p>'.$this->data['403_text'].'</p>';
 if (isset($this->data['logoutURL'])) {
-    echo '<p><a href="'.htmlspecialchars($this->data['logoutURL']).'">'.$this->t('{status:logout}').'</a></p>';
+    echo '<p><a href="'.htmlspecialchars($this->data['logoutURL']).'">'.$translator->t('{status:logout}').'</a></p>';
 }
 
 $this->includeAtTemplateBase('includes/footer.php');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/Utils/TestableAuthorize.php b/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/Utils/TestableAuthorize.php
new file mode 100644
index 0000000000..236f8888a0
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/Utils/TestableAuthorize.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Subclass authorize filter to make it unit testable.
+ */
+
+namespace SimpleSAML\Module\Authorize\Tests\Utils;
+
+use SimpleSAML\Module\authorize\Auth\Process\Authorize;
+
+class TestableAuthorize extends Authorize
+{
+    /**
+     * Override the redirect behavior since its difficult to test
+     * @param array $request the state
+     */
+    protected function unauthorized(array &$request)
+    {
+        $request['NOT_AUTHORIZED'] = true;
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/bootstrap.php
new file mode 100644
index 0000000000..296f70baac
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/authorize';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/lib/Auth/Process/AuthorizeTest.php b/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/lib/Auth/Process/AuthorizeTest.php
new file mode 100644
index 0000000000..025bc88a97
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authorize/tests/lib/Auth/Process/AuthorizeTest.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Test for the authorize:Authorize authproc filter.
+ */
+
+namespace SimpleSAML\Module\authorize\Auth\Process;
+
+use PHPUnit\Framework\TestCase;
+use SimpleSAML\Module\Authorize\Tests\Utils\TestableAuthorize;
+use SimpleSAML\Utils\Attributes;
+
+class AuthorizeTest extends TestCase
+{
+    /**
+     * Helper function to run the filter with a given configuration.
+     *
+     * @param array $config The filter configuration.
+     * @param array $request The request state.
+     * @return array  The state array after processing.
+     */
+    private function processFilter(array $config, array $request)
+    {
+        $filter = new TestableAuthorize($config, null);
+        $filter->process($request);
+        return $request;
+    }
+
+    /**
+     * Test that having a matching attribute grants access
+     * @dataProvider allowScenarioProvider
+     * @param array $userAttributes The attributes to test
+     * @param bool $isAuthorized Should the user be authorized
+     */
+    public function testAllowScenarios($userAttributes, $isAuthorized)
+    {
+        $userAttributes = Attributes::normalizeAttributesArray($userAttributes);
+        $config = [
+            'uid' => [
+                '/^.*@example.com$/',
+                '/^(user1|user2|user3)@example.edu$/',
+            ],
+            'schacUserStatus' => '@urn:mace:terena.org:userStatus:example.org:service:active.*@',
+        ];
+
+        $resultState = $this->processFilter($config, ['Attributes' => $userAttributes]);
+
+        $resultAuthorized = isset($resultState['NOT_AUTHORIZED']) ? false : true;
+        $this->assertEquals($isAuthorized, $resultAuthorized);
+    }
+
+    public function allowScenarioProvider()
+    {
+        return [
+            // Should be allowed
+            [['uid' => 'anything@example.com'], true],
+            [['uid' => 'user2@example.edu'], true],
+            [['schacUserStatus' => 'urn:mace:terena.org:userStatus:example.org:service:active.my.service'], true],
+            [
+                [
+                    'uid' => ['wrongValue', 'user2@example.edu', 'wrongValue2'],
+                    'schacUserStatus' => 'incorrectstatus'
+                ],
+                true
+            ],
+
+            //Should be denied
+            [['wrongAttributes' => ['abc']], false],
+            [
+                [
+                    'uid' => [
+                        'anything@example.com.wrong',
+                        'wronguser@example.edu',
+                        'user2@example.edu.wrong',
+                        'prefixuser2@example.edu'
+                    ]
+                ],
+                false
+            ],
+        ];
+    }
+
+    /**
+     * Test that having a matching attribute prevents access
+     * @dataProvider invertScenarioProvider
+     * @param array $userAttributes The attributes to test
+     * @param bool $isAuthorized Should the user be authorized
+     */
+    public function testInvertAllowScenarios($userAttributes, $isAuthorized)
+    {
+        $userAttributes = Attributes::normalizeAttributesArray($userAttributes);
+        $config = [
+            'deny' => true,
+            'uid' => [
+                '/.*@students.example.edu$/',
+                '/^(stu1|stu2|stu3)@example.edu$/',
+            ],
+            'schacUserStatus' => '@urn:mace:terena.org:userStatus:example.org:service:blocked.*@',
+        ];
+
+        $resultState = $this->processFilter($config, ['Attributes' => $userAttributes]);
+
+        $resultAuthorized = isset($resultState['NOT_AUTHORIZED']) ? false : true;
+        $this->assertEquals($isAuthorized, $resultAuthorized);
+    }
+
+    public function invertScenarioProvider()
+    {
+        return [
+            // Should be allowed
+            [['noMatch' => 'abc'], true],
+            [['uid' => 'anything@example.edu'], true],
+
+            //Should be denied
+            [['uid' => 'anything@students.example.edu'], false],
+            [['uid' => 'stu3@example.edu'], false],
+            [['schacUserStatus' => 'urn:mace:terena.org:userStatus:example.org:service:blocked'], false],
+            // Matching any of the attributes results in denial
+            [
+                [
+                    'uid' => ['noMatch', 'abc@students.example.edu', 'noMatch2'],
+                    'schacUserStatus' => 'noMatch'
+                ],
+                false
+            ],
+        ];
+    }
+
+    /**
+     * Test that having a matching attribute prevents access
+     * @dataProvider noregexScenarioProvider
+     * @param array $userAttributes The attributes to test
+     * @param bool $isAuthorized Should the user be authorized
+     */
+    public function testDisableRegex($userAttributes, $isAuthorized)
+    {
+        $userAttributes = Attributes::normalizeAttributesArray($userAttributes);
+        $config = [
+            'regex' => false,
+            'group' => [
+                'CN=SimpleSAML Students,CN=Users,DC=example,DC=edu',
+                'CN=All Teachers,OU=Staff,DC=example,DC=edu',
+            ],
+        ];
+
+        $resultState = $this->processFilter($config, ['Attributes' => $userAttributes]);
+
+        $resultAuthorized = isset($resultState['NOT_AUTHORIZED']) ? false : true;
+        $this->assertEquals($isAuthorized, $resultAuthorized);
+    }
+
+    public function noregexScenarioProvider()
+    {
+        return [
+            // Should be allowed
+            [['group' => 'CN=SimpleSAML Students,CN=Users,DC=example,DC=edu'], true],
+
+            //Should be denied
+            [['wrongAttribute' => 'CN=SimpleSAML Students,CN=Users,DC=example,DC=edu'], false],
+            [['group' => 'CN=wrongCN=SimpleSAML Students,CN=Users,DC=example,DC=edu'], false],
+        ];
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.php_cs.dist
new file mode 100644
index 0000000000..33467ebed8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.travis.yml
new file mode 100644
index 0000000000..fec43ab41a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/jaimeperez/twig-configurable-i18n/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/bin/check-syntax.sh
similarity index 84%
rename from vendor/jaimeperez/twig-configurable-i18n/bin/check-syntax.sh
rename to vendor/simplesamlphp/simplesamlphp/modules/authtwitter/bin/check-syntax.sh
index 15cc4389d6..c49a8b6419 100755
--- a/vendor/jaimeperez/twig-configurable-i18n/bin/check-syntax.sh
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/bin/check-syntax.sh
@@ -4,7 +4,7 @@
 RETURN=0
 
 # check PHP files
-for FILE in `find src -name "*.php"`; do
+for FILE in `find lib www -name "*.php"`; do
     $PHP -l $FILE > /dev/null 2>&1
     if [ $? -ne 0 ]; then
         echo "Syntax check failed for ${FILE}"
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/composer.json
new file mode 100644
index 0000000000..c216641967
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/composer.json
@@ -0,0 +1,46 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authtwitter",
+    "description": "A module that is able to perform authentication against Twitter",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "twitter"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        },
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\authtwitter\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.5",
+        "simplesamlphp/composer-module-installer": "~1.0",
+        "simplesamlphp/simplesamlphp-module-oauth": "^0.9"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~4.8.35"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-authtwitter/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-authtwitter"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/lib/Auth/Source/Twitter.php b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/lib/Auth/Source/Twitter.php
index 19ff725800..59fab27f90 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/lib/Auth/Source/Twitter.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/lib/Auth/Source/Twitter.php
@@ -2,7 +2,16 @@
 
 namespace SimpleSAML\Module\authtwitter\Auth\Source;
 
-require_once(dirname(dirname(dirname(dirname(dirname(__FILE__))))).'/oauth/libextinc/OAuth.php');
+$default = dirname(dirname(dirname(dirname(dirname(__FILE__))))).'/oauth/libextinc/OAuth.php';
+$travis = dirname(dirname(dirname(dirname(__FILE__)))).'/vendor/simplesamlphp/simplesamlphp/modules/oauth/libextinc/OAuth.php';
+
+if (file_exists($default)) {
+    require_once($default);
+} else if (file_exists($travis)) {
+    require_once($travis);
+} else {
+    // Probably codecov, but we can't raise an exception here or Travis will fail
+}
 
 /**
  * Authenticate using Twitter.
@@ -72,6 +81,7 @@ public function __construct($info, $config)
      * Log-in using Twitter platform
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -103,6 +113,11 @@ public function authenticate(&$state)
         $consumer->getAuthorizeRequest($url, $requestToken);
     }
 
+
+    /**
+     * @param array &$state
+     * @return void
+     */
     public function finalStep(&$state)
     {
         $requestToken = $state['authtwitter:authdata:requestToken'];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/psalm.xml
new file mode 100644
index 0000000000..c7b2d2fa72
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/psalm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Module for Twitter authentication"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/tests/bootstrap.php
new file mode 100644
index 0000000000..513443b008
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/authtwitter';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/www/linkback.php b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/www/linkback.php
index cbeed68a7b..cc4b274c77 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/www/linkback.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authtwitter/www/linkback.php
@@ -13,13 +13,14 @@
 );
 
 // Find authentication source
-if (!array_key_exists(\SimpleSAML\Module\authtwitter\Auth\Source\Twitter::AUTHID, $state)) {
+if (is_null($state) || !array_key_exists(\SimpleSAML\Module\authtwitter\Auth\Source\Twitter::AUTHID, $state)) {
     throw new \SimpleSAML\Error\BadRequest(
         'No data in state for '.\SimpleSAML\Module\authtwitter\Auth\Source\Twitter::AUTHID
     );
 }
 $sourceId = $state[\SimpleSAML\Module\authtwitter\Auth\Source\Twitter::AUTHID];
 
+/** @var \SimpleSAML\Module\authtwitter\Auth\Source\Twitter|null $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId);
 if ($source === null) {
     throw new \SimpleSAML\Error\BadRequest(
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.php_cs.dist
new file mode 100644
index 0000000000..33467ebed8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.travis.yml
new file mode 100644
index 0000000000..fec43ab41a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/bin/check-syntax.sh
new file mode 100755
index 0000000000..96dfbb9f55
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/composer.json
new file mode 100644
index 0000000000..484f420145
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/composer.json
@@ -0,0 +1,47 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-authwindowslive",
+    "description": "A module that is able to perform authentication against Windows Live",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "windowslive", "windows", "live"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        },
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\authwindowslive\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Tests\\SimpleSAML\\modules\\authwindowslive\\TestFiles\\": "tests/files",
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-authwindowslive"
+    }
+}
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/lib/Auth/Source/LiveID.php b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/lib/Auth/Source/LiveID.php
index 3f4dc5446d..5a1ef32018 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/lib/Auth/Source/LiveID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/lib/Auth/Source/LiveID.php
@@ -21,9 +21,13 @@ class LiveID extends \SimpleSAML\Auth\Source
      */
     const AUTHID = 'authwindowslive:AuthId';
 
+    /** @var string */
     private $key;
+
+    /** @var string */
     private $secret;
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -57,6 +61,7 @@ public function __construct($info, $config)
      * Log-in using LiveID platform
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -85,8 +90,8 @@ public function authenticate(&$state)
     }
 
     /**
-     * @param $state
-     *
+     * @param array &$state
+     * @return void
      * @throws \Exception
      */
     public function finalStep(&$state)
@@ -113,7 +118,8 @@ public function finalStep(&$state)
             ],
         ];
 
-        $result = \SimpleSAML\Utils\HTTP::fetch('https://login.microsoftonline.com/common/oauth2/v2.0/token', $context);
+        /** @var string $result */
+        $result = \SimpleSAML\Utils\HTTP::fetch('https://login.microsoftonline.com/common/oauth2/v2.0/token', $context, false);
 
         $response = json_decode($result, true);
 
@@ -134,6 +140,8 @@ public function finalStep(&$state)
             'http' => ['header' => "Accept: application/json\r\nAuthorization: Bearer ".
                 $response['access_token']."\r\n"]
         ];
+
+        /** @var string $data */
         $data = \SimpleSAML\Utils\HTTP::fetch('https://graph.microsoft.com/v1.0/me', $opts);
         $userdata = json_decode($data, true);
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/psalm.xml
new file mode 100644
index 0000000000..0d86dfe3c1
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/psalm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Authentication Module for Windows Live"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/tests/bootstrap.php
new file mode 100644
index 0000000000..60d182a767
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/simplesamlphp-module-authwindowslive';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/www/linkback.php b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/www/linkback.php
index 758bdd215f..a87c7b0978 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/www/linkback.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/authwindowslive/www/linkback.php
@@ -26,7 +26,7 @@
     // newer API, but the parameter name has changed to error. It doesn't hurt
     // to preserve support for this, so this is left in as a placeholder.
     // redirect them to their original page so they can choose another auth mechanism
-    if ($_REQUEST['error'] === 'user_denied') {
+    if (($_REQUEST['error'] === 'user_denied') && ($state !== null)) {
         $e = new \SimpleSAML\Error\UserAborted();
         \SimpleSAML\Auth\State::throwException($state, $e);
     }
@@ -35,10 +35,12 @@
     throw new \Exception('Authentication failed: ['.$_REQUEST['error'].'] '.$_REQUEST['error_description']);
 }
 
-// find authentication source
 assert(array_key_exists(\SimpleSAML\Module\authwindowslive\Auth\Source\LiveID::AUTHID, $state));
+
+// find authentication source
 $sourceId = $state[\SimpleSAML\Module\authwindowslive\Auth\Source\LiveID::AUTHID];
 
+/** @var \SimpleSAML\Module\authwindowslive\Auth\Source\LiveID|null $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId);
 if ($source === null) {
     throw new \Exception('Could not find authentication source with id '.$sourceId);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/cas/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/cas/.php_cs.dist
new file mode 100644
index 0000000000..e7d314696c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/.php_cs.dist
@@ -0,0 +1,15 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/cas/.travis.yml
new file mode 100644
index 0000000000..a090b62943
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/cas/bin/check-syntax.sh
new file mode 100755
index 0000000000..db6dc4b014
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib tests -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/cas/composer.json
new file mode 100644
index 0000000000..23e4b0943c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/composer.json
@@ -0,0 +1,43 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-cas",
+    "description": "A module that provides CAS authentication",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "cas"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\cas\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+        "webmozart/assert": "~1.4"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-cas/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-cas"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/docs/cas.md b/vendor/simplesamlphp/simplesamlphp/modules/cas/docs/cas.md
index 5bfd50cadc..c4c6ba72d9 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cas/docs/cas.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/docs/cas.md
@@ -7,10 +7,6 @@ the only diffrence is this is authentication module and not a script.
 Setting up the CAS authentication module
 ----------------------------------
 
-The first thing you need to do is to enable the cas module:
-
-    touch modules/cas/enable
-
 Adding a authentication source
 
 example authsource.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/lib/Auth/Source/CAS.php b/vendor/simplesamlphp/simplesamlphp/modules/cas/lib/Auth/Source/CAS.php
index 08f153c130..0b0d23460f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cas/lib/Auth/Source/CAS.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/lib/Auth/Source/CAS.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\cas\Auth\Source;
 
+use Webmozart\Assert\Assert;
+
 /**
  * Authenticate using CAS.
  *
@@ -29,7 +31,7 @@ class CAS extends \SimpleSAML\Auth\Source
     private $ldapConfig;
 
     /**
-     * @var cas configuration
+     * @var array cas configuration
      */
     private $casConfig;
 
@@ -52,8 +54,8 @@ class CAS extends \SimpleSAML\Auth\Source
      */
     public function __construct($info, $config)
     {
-        assert(is_array($info));
-        assert(is_array($config));
+        Assert::isArray($info);
+        Assert::isArray($config);
 
         // Call the parent constructor first, as required by the interface
         parent::__construct($info, $config);
@@ -100,6 +102,8 @@ private function casValidate($ticket, $service)
             'service' => $service,
         ]);
         $result = \SimpleSAML\Utils\HTTP::fetch($url);
+
+        /** @var string $result */
         $res = preg_split("/\r?\n/", $result);
 
         if (strcmp($res[0], "yes") == 0) {
@@ -129,6 +133,7 @@ private function casServiceValidate($ticket, $service)
         );
         $result = \SimpleSAML\Utils\HTTP::fetch($url);
 
+        /** @var string $result */
         $dom = \SAML2\DOMDocumentFactory::fromString($result);
         $xPath = new \DOMXpath($dom);
         $xPath->registerNamespace("cas", 'http://www.yale.edu/tp/cas');
@@ -147,7 +152,12 @@ private function casServiceValidate($ticket, $service)
                     }
                 }
             }
-            $casusername = $success->item(0)->textContent;
+
+            $item = $success->item(0);
+            if (is_null($item)) {
+                throw new \Exception("Error parsing serviceResponse.");
+            }
+            $casusername = $item->textContent;
 
             return [$casusername, $attributes];
         }
@@ -178,6 +188,7 @@ protected function casValidation($ticket, $service)
     /**
      * Called by linkback, to finish validate/ finish logging in.
      * @param array $state
+     * @return void
      */
     public function finalStep(&$state)
     {
@@ -192,7 +203,7 @@ public function finalStep(&$state)
             'Authentication source '.var_export($this->authId, true)
         );
         if ($this->ldapConfig['servers']) {
-            $ldap = new \SimpleSAML\Auth\LDAP(
+            $ldap = new \SimpleSAML\Module\ldap\Auth\Ldap(
                 $config->getString('servers'),
                 $config->getBoolean('enable_tls', false),
                 $config->getBoolean('debug', false),
@@ -201,6 +212,9 @@ public function finalStep(&$state)
                 $config->getBoolean('referrals', true)
             );
             $ldapattributes = $ldap->validate($this->ldapConfig, $username);
+            if ($ldapattributes === false) {
+                throw new \Exception("Failed to authenticate against LDAP-server.");
+            }
         }
         $attributes = array_merge_recursive($casattributes, $ldapattributes);
         $state['Attributes'] = $attributes;
@@ -213,10 +227,11 @@ public function finalStep(&$state)
      * Log-in using cas
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
-        assert(is_array($state));
+        Assert::isArray($state);
 
         // We are going to need the authId in order to retrieve this authentication source later
         $state[self::AUTHID] = $this->authId;
@@ -241,10 +256,11 @@ public function authenticate(&$state)
      * showing the user a page, or redirecting, this function should return.
      *
      * @param array &$state  Information about the current logout operation.
+     * @return void
      */
     public function logout(&$state)
     {
-        assert(is_array($state));
+        Assert::isArray($state);
         $logoutUrl = $this->casConfig['logout'];
 
         \SimpleSAML\Auth\State::deleteState($state);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/cas/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/cas/psalm.xml
new file mode 100644
index 0000000000..4340e105df
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/psalm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp CAS module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/cas/tests/bootstrap.php
new file mode 100644
index 0000000000..f0c4e8c00a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/cas';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cas/www/linkback.php b/vendor/simplesamlphp/simplesamlphp/modules/cas/www/linkback.php
index 366583c8a7..15bae662e7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cas/www/linkback.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cas/www/linkback.php
@@ -1,5 +1,9 @@
 <?php
 
+use Webmozart\Assert\Assert;
+
+use \SimpleSAML\Module\cas\Auth\Source\CAS;
+
 /**
  * Handle linkback() response from CAS.
  */
@@ -7,7 +11,7 @@
 if (!isset($_GET['stateID'])) {
     throw new \SimpleSAML\Error\BadRequest('Missing stateID parameter.');
 }
-$state = \SimpleSAML\Auth\State::loadState($_GET['stateID'], \SimpleSAML\Module\cas\Auth\Source\CAS::STAGE_INIT);
+$state = \SimpleSAML\Auth\State::loadState($_GET['stateID'], CAS::STAGE_INIT);
 
 if (!isset($_GET['ticket'])) {
     throw new \SimpleSAML\Error\BadRequest('Missing ticket parameter.');
@@ -15,9 +19,10 @@
 $state['cas:ticket'] = (string) $_GET['ticket'];
 
 // Find authentication source
-assert(array_key_exists(\SimpleSAML\Module\cas\Auth\Source\CAS::AUTHID, $state));
-$sourceId = $state[\SimpleSAML\Module\cas\Auth\Source\CAS::AUTHID];
+Assert::keyExists($state, CAS::AUTHID);
+$sourceId = $state[CAS::AUTHID];
 
+/** @var \SimpleSAML\Module\cas\Auth\Source\CAS|null $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId);
 if ($source === null) {
     throw new \Exception('Could not find authentication source with id '.$sourceId);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/cdc/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/cdc/.travis.yml
new file mode 100644
index 0000000000..4d93b5f789
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+  # - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/cdc/bin/check-syntax.sh
new file mode 100755
index 0000000000..f1c63bd69c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates lib tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/cdc/composer.json
new file mode 100644
index 0000000000..0a373bebd0
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/composer.json
@@ -0,0 +1,45 @@
+{
+  "name": "simplesamlphp/simplesamlphp-module-cdc",
+  "description": "A SimpleSAMLphp module that allows integration with CDC",
+  "type": "simplesamlphp-module",
+  "keywords": [ "SimpleSAMLphp", "CDC"],
+  "homepage": "https://simplesamlphp.org/",
+  "license": "LGPL-3.0-or-later",
+  "authors": [
+    {
+      "name": "Olav Morken",
+      "email": "olav.morken@uninett.no"
+    },
+    {
+      "name": "Jaime Perez Crespo",
+      "email": "jaime.perez@uninett.no"
+    }
+  ],
+  "config": {
+    "preferred-install": {
+      "simplesamlphp/simplesamlphp": "source",
+      "*": "dist"
+    }
+  },
+  "autoload": {
+    "psr-4": {
+      "SimpleSAML\\Module\\cdc\\": "lib/"
+    }
+  },
+  "autoload-dev": {
+    "psr-4": {
+      "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+    }
+  },
+  "require": {
+    "simplesamlphp/composer-module-installer": ">=1.1.6"
+  },
+  "require-dev": {
+    "simplesamlphp/simplesamlphp": "^1.17",
+    "phpunit/phpunit": "~5.7"
+  },
+  "support": {
+    "issues": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/issues",
+    "source": "https://github.com/simplesamlphp/simplesamlphp-module-cdc/"
+  }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Auth/Process/CDC.php b/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Auth/Process/CDC.php
index bf2a669d67..425f5c451b 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Auth/Process/CDC.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Auth/Process/CDC.php
@@ -50,6 +50,7 @@ public function __construct($config, $reserved)
      * Redirect to page setting CDC.
      *
      * @param array &$state  The request state.
+     * @return void
      */
     public function process(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Client.php b/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Client.php
index 609aef63f4..05acfa3b98 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Client.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Client.php
@@ -21,7 +21,7 @@ class Client
     /**
      * The CDC server we send requests to.
      *
-     * @var Server|NULL
+     * @var Server
      */
     private $server;
 
@@ -43,7 +43,7 @@ public function __construct($domain)
     /**
      * Receive a CDC response.
      *
-     * @return array|NULL  The response, or NULL if no response is received.
+     * @return array|null  The response, or NULL if no response is received.
      */
     public function getResponse()
     {
@@ -57,6 +57,7 @@ public function getResponse()
      * @param string $returnTo  The URL we should return to afterwards.
      * @param string $op  The operation we are performing.
      * @param array $params  Additional parameters.
+     * @return void
      */
     public function sendRequest($returnTo, $op, array $params = [])
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Server.php b/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Server.php
index affcf668ac..839d333f90 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Server.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/lib/Server.php
@@ -48,6 +48,7 @@ class Server
      * Initialize a CDC server.
      *
      * @param string $domain  The domain we are a server for.
+     * @throws \SimpleSAML\Error\Exception
      */
     public function __construct($domain)
     {
@@ -77,6 +78,7 @@ public function __construct($domain)
      * Send a request to this CDC server.
      *
      * @param array $request  The CDC request.
+     * @return void
      */
     public function sendRequest(array $request)
     {
@@ -91,7 +93,8 @@ public function sendRequest(array $request)
     /**
      * Parse and validate response received from a CDC server.
      *
-     * @return array|NULL  The response, or NULL if no response is received.
+     * @return array|null  The response, or NULL if no response is received.
+     * @throws \SimpleSAML\Error\Exception
      */
     public function getResponse()
     {
@@ -112,6 +115,8 @@ public function getResponse()
 
     /**
      * Parse and process a CDC request.
+     * @throws \SimpleSAML\Error\BadRequest
+     * @return void
      */
     public static function processRequest()
     {
@@ -132,6 +137,8 @@ public static function processRequest()
      * Handle a parsed CDC requst.
      *
      * @param array $request
+     * @throws \SimpleSAML\Error\Exception
+     * @return void
      */
     private function handleRequest(array $request)
     {
@@ -181,6 +188,7 @@ private function handleRequest(array $request)
      * Handle an append request.
      *
      * @param array $request  The request.
+     * @throws \SimpleSAML\Error\BadRequest
      * @return string The response.
      */
     private function handleAppend(array $request)
@@ -245,7 +253,8 @@ private function handleRead(array $request)
      * Helper function for parsing and validating a CDC message.
      *
      * @param string $parameter  The name of the query parameter.
-     * @return array|NULL  The response, or NULL if no response is received.
+     * @throws \SimpleSAML\Error\BadRequest
+     * @return array|null  The response, or NULL if no response is received.
      */
     private static function get($parameter)
     {
@@ -292,6 +301,8 @@ private static function get($parameter)
      * Will throw an exception if the message is invalid.
      *
      * @param string $parameter  The name of the query parameter.
+     * @throws \SimpleSAML\Error\BadRequest
+     * @return void
      */
     private function validate($parameter)
     {
@@ -318,6 +329,7 @@ private function validate($parameter)
      * @param string $to  The URL the message should be delivered to.
      * @param string $parameter  The query parameter the message should be sent in.
      * @param array $message  The CDC message.
+     * @return void
      */
     private function send($to, $parameter, array $message)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/cdc/phpunit.xml
new file mode 100644
index 0000000000..16ca579962
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/phpunit.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/cdc/psalm.xml
new file mode 100644
index 0000000000..7ca2f8c71b
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Monitor"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-templates" />
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/cdc/tests/bootstrap.php
new file mode 100644
index 0000000000..ccfe7de727
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/cdc';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cdc/www/resume.php b/vendor/simplesamlphp/simplesamlphp/modules/cdc/www/resume.php
index ebe6b1cc9f..078964248e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cdc/www/resume.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cdc/www/resume.php
@@ -15,6 +15,10 @@
 if (!isset($response['id'])) {
     throw new \SimpleSAML\Error\BadRequest('CDCResponse without id.');
 }
-$state = \SimpleSAML\Auth\State::loadState($response['id'], 'cdc:resume');
 
-\SimpleSAML\Auth\ProcessingChain::resumeProcessing($state);
+$state = \SimpleSAML\Auth\State::loadState($response['id'], 'cdc:resume');
+if (!is_null($state)) {
+    \SimpleSAML\Auth\ProcessingChain::resumeProcessing($state);
+} else {
+    throw new \SimpleSAML\Error\NoState();
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/consent/.php_cs.dist
new file mode 100644
index 0000000000..33467ebed8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/consent/.travis.yml
new file mode 100644
index 0000000000..fec43ab41a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/consent/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/consent/bin/check-syntax.sh
new file mode 100755
index 0000000000..db41fee32b
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib www templates -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/consent/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/consent/composer.json
new file mode 100644
index 0000000000..bde251e4bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-consent",
+    "description": "A module that will ask for user consent before releasing attributes",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "consent"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "lavmrk@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\consent\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7",
+        "webmozart/assert": "<1.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-consent/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-consent"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/consent/default-disable
index fa0bd82e2d..3e99dbb6b9 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/default-disable
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/default-disable
@@ -1,3 +1,3 @@
 This file indicates that the default state of this module
-is disabled. To enable, create a file named enable in the
+is disbled. To enable, create a file named enable in the
 same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/dictionaries/consent.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/consent/dictionaries/consent.translation.json
index 9901beb5a2..8e7cb1bfa0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/dictionaries/consent.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/dictionaries/consent.translation.json
@@ -32,10 +32,11 @@
         "sr": "Da, nastavi",
         "ro": "Da, continu\u0103",
         "eu": "Bai, jarraitu",
-        "af": "Ja, voortgaan",
+        "af": "Ja, gaan voort",
         "el": "\u0391\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae",
         "zu": "Yebo, qhubeka",
-        "xh": "Ewe, qhubeka"
+        "xh": "Ewe, qhubeka",
+        "st": "E, tswela pele"
     },
     "no": {
         "no": "Nei, avbryt",
@@ -73,7 +74,8 @@
         "af": "Nee, kanselleer",
         "el": "\u0391\u03c0\u03cc\u03c1\u03c1\u03b9\u03c8\u03b7",
         "xh": "Hayi, rhoxisa",
-        "zu": "Cha, khansela"
+        "zu": "Cha, khansela",
+        "st": "Tjhe, hlakola"
     },
     "remember": {
         "no": "Godta ogs\u00e5 for fremtiden",
@@ -111,7 +113,8 @@
         "af": "Onthou",
         "el": "\u039d\u03b1 \u03b8\u03c5\u03bc\u03ac\u03c3\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bc\u03bf\u03c5",
         "zu": "Khumbula",
-        "xh": "Khumbula"
+        "xh": "Khumbula",
+        "st": "Hopola"
     },
     "consent_accept": {
         "no": "For \u00e5 fullf\u00f8re innloggingen m\u00e5 du godta at opplysningene nedenfor sendes til SPNAME.",
@@ -139,7 +142,7 @@
         "et": "SPNAME n\u00f5uab allpool oleva info edastamist.",
         "he": "SPNAME \u05d3\u05d5\u05e8\u05e9 \u05e9\u05de\u05d9\u05d3\u05e2 \u05d4\u05e0\"\u05dc \u05d9\u05d5\u05e2\u05d1\u05e8",
         "ru": "SPNAME \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0438\u0436\u0435, \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430.",
-        "zh": "SPNAME\u8bf7\u6c42\u7684\u4fe1\u606f\u5df2\u7ecf\u88ab\u4f20\u8f93\u51fa\u53bb",
+        "zh": "SPNAME\u8bf7\u6c42\u4ee5\u4e0b\u4fe1\u606f\u88ab\u4f20\u9001\u3002",
         "ar": "\u064a\u062d\u062a\u0627\u062c SPNAME \u062a\u062d\u0648\u064a\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0623\u062f\u0646\u0627\u0647 ",
         "lv": "SPNAME prasa p\u0101rraid\u012bt pa t\u012bklu zem\u0101k eso\u0161o inform\u0101ciju.",
         "id": "SPNAME mensyaratkan informasi dibawah ini harus ditransder.",
@@ -149,7 +152,8 @@
         "af": "SPNAME vereis dat die inligting hieronder oorgedra word.",
         "el": "\u0395\u03ac\u03bd \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03ae\u03c3\u03b5\u03c4\u03b5\u002c \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03c0\u03bf\u03c5 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03bf\u03cd\u03bd \u03b8\u03b1 \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03c4\u03bf\u03cd\u03bd \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 <b>SPNAME<\/b>. \u03a3\u03c5\u03bc\u03c6\u03c9\u03bd\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c0\u03b5\u03bb\u03b5\u03c5\u03b8\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd \u03b1\u03c5\u03c4\u03ce\u03bd \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03ba\u03ac\u03b8\u03b5 \u03c6\u03bf\u03c1\u03ac \u03c0\u03bf\u03c5 \u03b5\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae\u003b",
         "xh": "I-SPNAME idinga ukuba inkcazelo engezantsi idluliselwe.",
-        "zu": "I-SPNAME idinga ukuthi ulwazi olungezansi ludluliswe."
+        "zu": "I-SPNAME idinga ukuthi ulwazi olungezansi ludluliswe.",
+        "st": "SPNAME e hloka hore tlhahisoleseding e ka tlase mona e fetiswe."
     },
     "login": {
         "no": "innlogging",
@@ -187,7 +191,8 @@
         "af": "meld aan",
         "el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2",
         "xh": "ngena",
-        "zu": "ngena"
+        "zu": "ngena",
+        "st": "keno"
     },
     "service_providers_for": {
         "no": "Tjenesteleverand\u00f8r for",
@@ -225,7 +230,8 @@
         "af": "Diens Verskaffers vir",
         "el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03b9 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd \u03b3\u03b9\u03b1",
         "zu": "Abahlinzeki Besevisi bokuthi",
-        "xh": "Umboneleli enkonzo we-"
+        "xh": "Umboneleli enkonzo we-",
+        "st": "Bafani ba Tshebeletso bakeng sa"
     },
     "service_provider_header": {
         "no": "Tjenesteleverand\u00f8r",
@@ -263,7 +269,8 @@
         "af": "Diens Verskaffer",
         "el": "\u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2",
         "zu": "Umhlinzeki Wesevisi",
-        "xh": "Umboneleli Wenkonzo"
+        "xh": "Umboneleli Wenkonzo",
+        "st": "Mofani wa Tshebeletso"
     },
     "status_header": {
         "no": "Samtykke-status",
@@ -301,7 +308,8 @@
         "af": "Toestemming status",
         "el": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c3\u03c5\u03b3\u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2",
         "zu": "Isimo semvume",
-        "xh": "Ubume bemvume"
+        "xh": "Ubume bemvume",
+        "st": "Boemo ba tumelo"
     },
     "show_hide_attributes": {
         "no": "Vis\/skjul opplysninger",
@@ -339,7 +347,8 @@
         "af": "vertoon\/verberg eienskappe",
         "el": "\u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7\/\u03b1\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd",
         "xh": "bonisa/fihla iimpawu",
-        "zu": "bonisa/fihla izici"
+        "zu": "bonisa/fihla izici",
+        "st": "bontsha/pata makgabane"
     },
     "consent_privacypolicy": {
         "no": "Personvern for tjenesten",
@@ -376,7 +385,8 @@
         "af": "Privaatheidsbeleid vir die diens",
         "el": "\u03a0\u03bf\u03bb\u03b9\u03c4\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03c3\u03c4\u03b1\u03c3\u03af\u03b1\u03c2 \u03b1\u03c0\u03bf\u03c1\u03c1\u03ae\u03c4\u03bf\u03c5 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2",
         "zu": "Inqubomgomo yobumfihlo yesevisi",
-        "xh": "Ipolisi yokugcinwa kwemfihlelo yenkonzo"
+        "xh": "Ipolisi yokugcinwa kwemfihlelo yenkonzo",
+        "st": "Leano la sephiri bakeng sa tshebeletso"
     },
     "noconsent_title": {
         "no": "Ikke akseptert overf\u00f8ring av informasjon",
@@ -413,7 +423,8 @@
         "af": "Geen toestemming is gegee nie",
         "el": "\u039c\u03b7 \u03b1\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae \u03c3\u03c5\u03b3\u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2",
         "zu": "Ayikho imvume enikeziwe",
-        "xh": "Akukho mvume inikelweyo"
+        "xh": "Akukho mvume inikelweyo",
+        "st": "Ha ho tumello e fanweng"
     },
     "noconsent_text": {
         "no": "Du har ikke akseptert \u00e5 overlevere opplysninger til SPNAME.",
@@ -440,7 +451,7 @@
         "et": "Sa ei andnud n\u00f5usolekut sinu atribuutide teenusepakkujale edastamiseks.",
         "he": "\u05dc\u05d0 \u05e0\u05ea\u05e0\u05ea \u05d4\u05e1\u05db\u05de\u05d4 \u05dc\u05d4\u05e2\u05d1\u05e8\u05ea \u05d4\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd \u05dc\u05e1\u05e4\u05e7 \u05d4\u05e9\u05d9\u05e8\u05d5\u05ea.",
         "ru": "\u0412\u044b \u043d\u0435 \u0434\u0430\u043b\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u0430\u0448\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043a \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0443 \u0443\u0441\u043b\u0443\u0433.",
-        "zh": "\u4f60\u6ca1\u6709\u540c\u610f\u4f20\u8f93\u4f60\u7684\u76f8\u5173\u5c5e\u6027\u7ed9\u670d\u52a1\u63d0\u4f9b\u8005",
+        "zh": "\u4f60\u6ca1\u6709\u540c\u610f\u4f20\u8f93\u4f60\u7684\u76f8\u5173\u5c5e\u6027\u7ed9SPNAME",
         "ar": "\u0644\u0645 \u062a\u0648\u0627\u0641\u0642 \u0639\u0644\u064a \u062a\u062d\u0648\u064a\u0644 \u0633\u0645\u0627\u062a\u0643 \u0644\u0645\u0642\u062f\u0645 \u0627\u0644\u062e\u062f\u0645\u0629",
         "lv": "J\u016bs neesat devis at\u013cauju p\u0101rraid\u012bt inform\u0101ciju servisa pieg\u0101d\u0101t\u0101jam.",
         "id": "Anda tidak memberikan persetujuan untuk mentransfer atribut-atribute Anda ke service provider.",
@@ -450,7 +461,8 @@
         "af": "Jy het nie toestemming gegee vir die oordrag van jou eienskappe na SPNAME nie.",
         "el": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b4\u03ce\u03c3\u03b5\u03b9 \u03c3\u03c5\u03b3\u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03bc\u03cc \u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b9\u03ba\u03ce\u03bd \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 SPNAME",
         "xh": "Awuyinikelanga imvume yokudluliselwa iimpawu zakho kwi-SPNAME.",
-        "zu": "Awuzange uyinikeze imvume yokudlulisa izici zakho ku-SPNAME."
+        "zu": "Awuzange uyinikeze imvume yokudlulisa izici zakho ku-SPNAME.",
+        "st": "Ha o a fana ka tumello bakeng sa ho fetisetsa makgabane a hao ho SPNAME."
     },
     "noconsent_return": {
         "no": "G\u00e5 tilbake til samtykkesiden",
@@ -487,7 +499,8 @@
         "af": "Keer terug na die toestemmingsbladsy",
         "el": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b4\u03ae\u03bb\u03c9\u03c3\u03b7\u03c2 \u03c3\u03c5\u03b3\u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2",
         "xh": "Buyela kwikhasi lemvume",
-        "zu": "Buyela ekhasini lemvume"
+        "zu": "Buyela ekhasini lemvume",
+        "st": "Kgutlela leqepheng la tumello"
     },
     "consent_header": {
         "no": "Samtykke om overf\u00f8ring av personinformasjon",
@@ -513,7 +526,7 @@
         "et": "N\u00f5usolek isikuandmete edastamiseks",
         "he": "\u05d4\u05e1\u05db\u05de\u05d4 \u05dc\u05d4\u05e2\u05d1\u05e8\u05ea \u05de\u05d9\u05d3\u05e2 \u05d0\u05d9\u05e9\u05d9",
         "pt-br": "Consentimento sobre a libera\u00e7\u00e3o de informa\u00e7\u00f5es pessoais",
-        "zh": "\u540c\u610f\u5f00\u653e\u4e2a\u4eba\u4fe1\u606f",
+        "zh": "\u540c\u610f\u91ca\u653e\u4e2a\u4eba\u4fe1\u606f",
         "ar": "\u0627\u0648\u0627\u0641\u0642 \u0639\u0644\u064a \u0646\u0634\u0631 \u0633\u0645\u0627\u062a\u064a \u0627\u0644\u0634\u062e\u0635\u064a\u0629",
         "lv": "Noteikumi par person\u012bg\u0101s inform\u0101cijas nodo\u0161anu",
         "id": "Persetujuan tentang melepas informasi personal",
@@ -524,7 +537,8 @@
         "af": "Toestemming mbt. die vrystelling van persoonlike informasie",
         "el": "\u0394\u03ae\u03bb\u03c9\u03c3\u03b7 \u03c3\u03c5\u03b3\u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03bc\u03cc \u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b9\u03ba\u03ce\u03bd \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
         "xh": "Imvume malunga nokukhutshwa kwenkcazelo yobuqu",
-        "zu": "Imvume mayelana nokukhulula ulwazi lomuntu siqu"
+        "zu": "Imvume mayelana nokukhulula ulwazi lomuntu siqu",
+        "st": "Tumello e mabapi le tlhahisoleseding ya botho"
     },
     "consent_attributes_header": {
         "no": "Opplysninger som vil bli sendt til SPNAME",
@@ -549,7 +563,7 @@
         "zh-tw": "\u8cc7\u8a0a\u5c07\u88ab\u50b3\u9001\u81f3 SPNAME",
         "et": "Andmed saadetakse SPNAME-le",
         "he": "\u05d4\u05de\u05d9\u05d3\u05e2 \u05d9\u05e9\u05dc\u05d7 \u05dc SPNAME",
-        "zh": "\u4fe1\u606f\u5c06\u4f1a\u53d1\u9001\u7ed9SPNAME",
+        "zh": "\u5c06\u4f1a\u53d1\u9001\u7ed9SPNAME\u7684\u4fe1\u606f",
         "ar": "\u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u062a\u064a \u0633\u064a\u062a\u0645 \u0625\u0631\u0633\u0627\u0644\u0647\u0627 \u0644 SPNAME",
         "lv": "Inform\u0101cija, kas tiks s\u016bt\u012bta SPNAME",
         "id": "Informasi yang akan dikirim ke SPNAME",
@@ -560,7 +574,8 @@
         "af": "Informasie wat gestuur sal word na SPNAME",
         "el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03c4\u03bf\u03cd\u03bd \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 SPNAME",
         "xh": "Inkcazelo eza kuthunyelwa ku-SPNAME",
-        "zu": "Ulwazi oluzothunyelwa ku-SPNAME"
+        "zu": "Ulwazi oluzothunyelwa ku-SPNAME",
+        "st": "Tlhahisoleseding e tla romelwa ho SPNAME"
     },
     "show_attributes": {
         "no": "Vis opplysninger",
@@ -596,7 +611,8 @@
         "eu": "Erakutsi atributuak",
         "af": "Vertoon eienskappe",
         "zu": "Bonisa okuqukethwe",
-        "xh": "Bonisa isiqulatho"
+        "xh": "Bonisa isiqulatho",
+        "st": "Bontsha makgabane"
     },
     "noconsent_goto_about": {
         "no": "G\u00e5 til informasjonsside om tjenesten",
@@ -622,7 +638,7 @@
         "et": "Mine teenuse infolehele",
         "he": "\u05dc\u05da \u05d0\u05dc \u05d3\u05e3 \u05d4\u05de\u05d9\u05d3\u05e2 \u05e9\u05dc \u05d4\u05e9\u05d9\u05e8\u05d5\u05ea",
         "pt-br": "Ir para a P\u00e1gina de Informa\u00e7\u00e3o do servi\u00e7o",
-        "zh": "\u83b7\u53d6\u8be5\u670d\u52a1\u7684\u4fe1\u606f",
+        "zh": "\u8f6c\u5230\u8be5\u670d\u52a1\u7684\u4fe1\u606f\u9875\u9762",
         "ar": "\u0627\u0630\u0647\u0628 \u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0639\u0646 \u0627\u0644\u062e\u062f\u0645\u0629",
         "lv": "Iet uz servisa inform\u0101cijas lapu",
         "id": "Pergi ke halaman informasi untul layanan",
@@ -633,7 +649,8 @@
         "af": "Gaan na die informasie bladsy vir die diens",
         "el": "\u0395\u03c0\u03b9\u03c0\u03bb\u03ad\u03bf\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1",
         "xh": "Yiya kwikhasi lenkcazelo ukuze ufumane inkonzo",
-        "zu": "Iya ekhasini lolwazi lesevisi"
+        "zu": "Iya ekhasini lolwazi lesevisi",
+        "st": "Eya leqepheng la tlhahisoleseding bakeng sa tshebeletso"
     },
     "consent_purpose": {
         "no": "Form\u00e5let med SPNAME er SPDESC",
@@ -669,7 +686,8 @@
         "af": "Die doel van SPNAME is SPDESC",
         "el": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03cc\u03c0\u03c9\u03c2 \u03c0\u03b1\u03c1\u03ad\u03c7\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u003a SPDESC",
         "zu": "Injongo ye-SPNAME yi-SPDESC",
-        "xh": "Injongo ye-SPNAME yi-SPDESC"
+        "xh": "Injongo ye-SPNAME yi-SPDESC",
+        "st": "Sepheo sa SPNAME ke SPDESC"
     },
     "table_caption": {
         "no": "Bruker innformasjon",
@@ -705,7 +723,8 @@
         "af": "Gebruiker informasie",
         "el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7",
         "xh": "Inkcazelo yomsebenzisi",
-        "zu": "Ulwazi lomsebenzisi"
+        "zu": "Ulwazi lomsebenzisi",
+        "st": "Tlhahisoleseding ya mosebedisi"
     },
     "table_summary": {
         "no": "Her listes den innformasjonen om deg som blir send til den tjenesten du er i ferd med \u00e5 logge p\u00e5",
@@ -741,7 +760,8 @@
         "af": "Lys die informasie mbt. jou wat op die punt is om gestuur te word vir die diens waarby jy wil aanmeld.",
         "el": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03c4\u03bf\u03cd\u03bd \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae",
         "zu": "Enza uhlu olumayelana nolwazi lwakho oluzodluliselwa kusevisi ozongena kuyo",
-        "xh": "Dwelisa inkcazelo engawe eza kudluliselwa kwinkonzo oza kungena kuyo"
+        "xh": "Dwelisa inkcazelo engawe eza kudluliselwa kwinkonzo oza kungena kuyo",
+        "st": "Hlahlamisa tlhahisoleseding e mabapi le wena e haufi le ho fetisetswa tshebeletsong eo o tlo kena ho yona"
     },
     "show_attribute": {
         "no": "Vis innhold",
@@ -802,6 +822,7 @@
         "el": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5 \u03c3\u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 SPNAME",
         "xh": "Yeka ungeno kwi-SPNAME",
         "zu": "Yeka ukungena ku-SPNAME",
-        "sl": "Prekini prijavo na SPNAME"
+        "sl": "Prekini prijavo na SPNAME",
+        "st": "Kgaotsa keno ho SPNAME"
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Auth/Process/Consent.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Auth/Process/Consent.php
index f5b6bfc810..6af1b63dd8 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Auth/Process/Consent.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Auth/Process/Consent.php
@@ -383,7 +383,7 @@ public static function getTargetedID($userid, $source, $destination)
      * Create a hash value for the attributes that changes when attributes are added or removed. If the attribute
      * values are included in the hash, the hash will change if the values change.
      *
-     * @param string $attributes The attributes.
+     * @param array  $attributes The attributes.
      * @param bool   $includeValues Whether or not to include the attribute value in the generation of the hash.
      *
      * @return string SHA1 of the user id, source id, destination id and salt.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Cookie.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Cookie.php
index 1a87807352..f12e7071c4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Cookie.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Cookie.php
@@ -89,7 +89,7 @@ public function hasConsent($userId, $destinationId, $attributeSet)
      * @param string $destinationId A string which identifies the destination.
      * @param string $attributeSet  A hash which identifies the attributes.
      *
-     * @return void
+     * @return bool
      */
     public function saveConsent($userId, $destinationId, $attributeSet)
     {
@@ -103,7 +103,7 @@ public function saveConsent($userId, $destinationId, $attributeSet)
         \SimpleSAML\Logger::debug('Consent cookie - Set ['.$value.']');
 
         $value = self::sign($value);
-        $this->setConsentCookie($name, $value);
+        return $this->setConsentCookie($name, $value);
     }
 
 
@@ -269,12 +269,12 @@ private static function getCookieName($userId, $destinationId)
      * @param string      $name  Name of the cookie.
      * @param string|null $value Value of the cookie. Set this to null to delete the cookie.
      *
-     * @return void
+     * @return bool
      */
     private function setConsentCookie($name, $value)
     {
         assert(is_string($name));
-        assert(is_string($value) || $value === null);
+        assert(is_string($value) || is_null($value));
 
         $globalConfig = \SimpleSAML\Configuration::getInstance();
         $params = [
@@ -284,6 +284,11 @@ private function setConsentCookie($name, $value)
             'secure' => \SimpleSAML\Utils\HTTP::isHTTPS(),
         ];
 
-        \SimpleSAML\Utils\HTTP::setCookie($name, $value, $params, false);
+        try {
+            \SimpleSAML\Utils\HTTP::setCookie($name, $value, $params, false);
+            return true;
+        } catch (\SimpleSAML\Error\CannotSetCookie $e) {
+            return false;
+        }
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Database.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Database.php
index ba1975bc5b..1e64104db0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Database.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Consent/Store/Database.php
@@ -202,7 +202,7 @@ public function hasConsent($userId, $destinationId, $attributeSet)
      * @param string $destinationId A string which identifies the destination.
      * @param string $attributeSet  A hash which identifies the attributes.
      *
-     * @return void|true True if consent is deleted.
+     * @return bool True if consent is deleted, false otherwise.
      */
     public function saveConsent($userId, $destinationId, $attributeSet)
     {
@@ -219,13 +219,13 @@ public function saveConsent($userId, $destinationId, $attributeSet)
         );
 
         if ($st === false) {
-            return;
+            return false;
         }
 
         if ($st->rowCount() > 0) {
             // Consent has already been stored in the database
             \SimpleSAML\Logger::debug('consent:Database - Updated old consent.');
-            return;
+            return false;
         }
 
         // Add new consent
@@ -348,7 +348,7 @@ public function getConsents($userId)
      * @param string $statement  The statement which should be executed.
      * @param array  $parameters Parameters for the statement.
      *
-     * @return \PDOStatement|bool  The statement, or false if execution failed.
+     * @return \PDOStatement|false  The statement, or false if execution failed.
      */
     private function execute($statement, $parameters)
     {
@@ -360,6 +360,7 @@ private function execute($statement, $parameters)
             return false;
         }
 
+        /** @var \PDOStatement|false $st */
         $st = $db->prepare($statement);
         if ($st === false) {
             \SimpleSAML\Logger::error(
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Logout.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Logout.php
index f82961ee3d..0bfcf33852 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Logout.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Logout.php
@@ -10,6 +10,11 @@
 
 class Logout
 {
+    /**
+     * @param \SimpleSAML\IdP $idp
+     * @param array $state
+     * @return void
+     */
     public static function postLogout(\SimpleSAML\IdP $idp, array $state)
     {
         $url = \SimpleSAML\Module::getModuleURL('consent/logout_completed.php');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Store.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Store.php
index 5e14d37720..b69f9a4c2a 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Store.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/lib/Store.php
@@ -144,6 +144,11 @@ public static function parseStoreConfig($config)
         );
 
         unset($config[0]);
-        return new $className($config);
+        /**
+         * @psalm-suppress InvalidStringClass
+         * @var \SimpleSAML\Module\consent\Store $retval
+         */
+        $retval = new $className($config);
+        return $retval;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/af/LC_MESSAGES/consent.po b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/af/LC_MESSAGES/consent.po
index b5cb9cd85d..100d201770 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/af/LC_MESSAGES/consent.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/af/LC_MESSAGES/consent.po
@@ -80,7 +80,7 @@ msgid "{consent:consent:noconsent_return}"
 msgstr "Keer terug na die toestemmingsbladsy"
 
 msgid "{consent:consent:yes}"
-msgstr "Ja, voortgaan"
+msgstr "Ja, gaan voort"
 
 msgid "{consent:consent:consent_attributes_header}"
 msgstr "Informasie wat gestuur sal word na SPNAME"
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/st/LC_MESSAGES/consent.po b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/st/LC_MESSAGES/consent.po
new file mode 100644
index 0000000000..c62a6c1f53
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/st/LC_MESSAGES/consent.po
@@ -0,0 +1,148 @@
+
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: SimpleSAMLphp 1.15\n"
+"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
+"POT-Creation-Date: 2019-12-12 08:47+0200\n"
+"PO-Revision-Date: 2019-12-12 08:47+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+msgid "Yes, continue"
+msgstr "E, tswela pele"
+
+msgid "{consent:consent:abort}"
+msgstr "Kgaotsa keno ho SPNAME"
+
+msgid "Show attributes"
+msgstr "Bontsha makgabane"
+
+msgid "{consent:consent:noconsent_return}"
+msgstr "Kgutlela leqepheng la tumello"
+
+msgid "{consent:consent:consent_header}"
+msgstr "Tumello e mabapi le tlhahisoleseding ya botho"
+
+msgid "{consent:consent:show_attributes}"
+msgstr "Bontsha makgabane"
+
+msgid "{consent:consent:consent_attributes_header}"
+msgstr "Tlhahisoleseding e tla romelwa ho SPNAME"
+
+msgid "{consent:consent:show_hide_attributes}"
+msgstr "bontsha/pata makgabane"
+
+msgid "The purpose of SPNAME is SPDESC"
+msgstr "Sepheo sa SPNAME ke SPDESC"
+
+msgid "You did not give consent for transfering your attributes to SPNAME."
+msgstr "Ha o a fana ka tumello bakeng sa ho fetisetsa makgabane a hao ho SPNAME."
+
+msgid ""
+"List the information about you that is about to be transmitted to the "
+"service you are going to login to"
+msgstr ""
+"Hlahlamisa tlhahisoleseding e mabapi le wena e haufi le ho fetisetswa "
+"tshebeletsong eo o tlo kena ho yona"
+
+msgid "Abort login to SPNAME"
+msgstr "Kgaotsa keno ho SPNAME"
+
+msgid "Privacy policy for the service"
+msgstr "Leano la sephiri bakeng sa tshebeletso"
+
+msgid "Consent about releasing personal information"
+msgstr "Tumello e mabapi le tlhahisoleseding ya botho"
+
+msgid "Service Provider"
+msgstr "Mofani wa Tshebeletso"
+
+msgid "{consent:consent:consent_accept}"
+msgstr "SPNAME e hloka hore tlhahisoleseding e ka tlase mona e fetiswe."
+
+msgid "{consent:consent:noconsent_text}"
+msgstr "Ha o a fana ka tumello bakeng sa ho fetisetsa makgabane a hao ho SPNAME."
+
+msgid "Return to consent page"
+msgstr "Kgutlela leqepheng la tumello"
+
+msgid "{consent:consent:service_provider_header}"
+msgstr "Mofani wa Tshebeletso"
+
+msgid "{consent:consent:table_caption}"
+msgstr "Tlhahisoleseding ya mosebedisi"
+
+msgid "{consent:consent:consent_privacypolicy}"
+msgstr "Leano la sephiri bakeng sa tshebeletso"
+
+msgid "{consent:consent:remember}"
+msgstr "Hopola"
+
+msgid "{consent:consent:login}"
+msgstr "keno"
+
+msgid "Service Providers for"
+msgstr "Bafani ba Tshebeletso bakeng sa"
+
+msgid "{consent:consent:consent_purpose}"
+msgstr "Sepheo sa SPNAME ke SPDESC"
+
+msgid "{consent:consent:no}"
+msgstr "Tjhe, hlakola"
+
+msgid "{consent:consent:table_summary}"
+msgstr ""
+"Hlahlamisa tlhahisoleseding e mabapi le wena e haufi le ho fetisetswa "
+"tshebeletsong eo o tlo kena ho yona"
+
+msgid "show/hide attributes"
+msgstr "bontsha/pata makgabane"
+
+msgid "{consent:consent:noconsent_goto_about}"
+msgstr "Eya leqepheng la tlhahisoleseding bakeng sa tshebeletso"
+
+msgid "No, cancel"
+msgstr "Tjhe, hlakola"
+
+msgid "{consent:consent:status_header}"
+msgstr "Boemo ba tumelo"
+
+msgid "No consent given"
+msgstr "Ha ho tumello e fanweng"
+
+msgid "User information"
+msgstr "Tlhahisoleseding ya mosebedisi"
+
+msgid "Consent status"
+msgstr "Boemo ba tumelo"
+
+msgid "Remember"
+msgstr "Hopola"
+
+msgid "login"
+msgstr "keno"
+
+msgid "SPNAME requires that the information below is transferred."
+msgstr "SPNAME e hloka hore tlhahisoleseding e ka tlase mona e fetiswe."
+
+msgid "{consent:consent:service_providers_for}"
+msgstr "Bafani ba Tshebeletso bakeng sa"
+
+msgid "Go to information page for the service"
+msgstr "Eya leqepheng la tlhahisoleseding bakeng sa tshebeletso"
+
+msgid "{consent:consent:noconsent_title}"
+msgstr "Ha ho tumello e fanweng"
+
+msgid "{consent:consent:yes}"
+msgstr "E, tswela pele"
+
+msgid "Information that will be sent to SPNAME"
+msgstr "Tlhahisoleseding e tla romelwa ho SPNAME"
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/xh/LC_MESSAGES/consent.po b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/xh/LC_MESSAGES/consent.po
index dc5d79f5eb..a44c03ddc5 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/xh/LC_MESSAGES/consent.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/xh/LC_MESSAGES/consent.po
@@ -5,7 +5,7 @@ msgstr ""
 "Project-Id-Version: SimpleSAMLphp 1.15\n"
 "Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
 "POT-Creation-Date: 2018-11-15 14:49+0200\n"
-"PO-Revision-Date: 2018-11-15 14:49+0200\n"
+"PO-Revision-Date: 2019-12-12 08:47+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -80,3 +80,71 @@ msgstr "Dwelisa inkcazelo engawe eza kudluliselwa kwinkonzo oza kungena kuyo"
 msgid "{consent:consent:remember}"
 msgstr "Khumbula"
 
+msgid "Consent about releasing personal information"
+msgstr "Imvume malunga nokukhutshwa kwenkcazelo yobuqu"
+
+msgid "Show attributes"
+msgstr "Bonisa isiqulatho"
+
+msgid "show/hide attributes"
+msgstr "bonisa/fihla iimpawu"
+
+msgid "Yes, continue"
+msgstr "Ewe, qhubeka"
+
+msgid "No consent given"
+msgstr "Akukho mvume inikelweyo"
+
+msgid "Information that will be sent to SPNAME"
+msgstr "Inkcazelo eza kuthunyelwa ku-SPNAME"
+
+msgid "Service Providers for"
+msgstr "Umboneleli enkonzo we-"
+
+msgid "Consent status"
+msgstr "Ubume bemvume"
+
+msgid "Go to information page for the service"
+msgstr "Yiya kwikhasi lenkcazelo ukuze ufumane inkonzo"
+
+msgid "Return to consent page"
+msgstr "Buyela kwikhasi lemvume"
+
+msgid "Service Provider"
+msgstr "Umboneleli Wenkonzo"
+
+msgid "No, cancel"
+msgstr "Hayi, rhoxisa"
+
+msgid "Show content"
+msgstr "Bonisa iimpawu"
+
+msgid "Privacy policy for the service"
+msgstr "Ipolisi yokugcinwa kwemfihlelo yenkonzo"
+
+msgid "The purpose of SPNAME is SPDESC"
+msgstr "Injongo ye-SPNAME yi-SPDESC"
+
+msgid "Abort login to SPNAME"
+msgstr "Yeka ungeno kwi-SPNAME"
+
+msgid "Remember"
+msgstr "Khumbula"
+
+msgid "SPNAME requires that the information below is transferred."
+msgstr "I-SPNAME idinga ukuba inkcazelo engezantsi idluliselwe."
+
+msgid "User information"
+msgstr "Inkcazelo yomsebenzisi"
+
+msgid ""
+"List the information about you that is about to be transmitted to the "
+"service you are going to login to"
+msgstr "Dwelisa inkcazelo engawe eza kudluliselwa kwinkonzo oza kungena kuyo"
+
+msgid "login"
+msgstr "ngena"
+
+msgid "You did not give consent for transfering your attributes to SPNAME."
+msgstr "Awuyinikelanga imvume yokudluliselwa iimpawu zakho kwi-SPNAME."
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zh/LC_MESSAGES/consent.po b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zh/LC_MESSAGES/consent.po
index 62429e2e34..03e8daa2c9 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zh/LC_MESSAGES/consent.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zh/LC_MESSAGES/consent.po
@@ -31,10 +31,10 @@ msgid "{consent:consent:consent_purpose}"
 msgstr "SPNAME的目的是SPDESC"
 
 msgid "{consent:consent:noconsent_goto_about}"
-msgstr "获取该服务的信息"
+msgstr "转到该服务的信息页面"
 
 msgid "{consent:consent:consent_header}"
-msgstr "同意开放个人信息"
+msgstr "同意释放个人信息"
 
 msgid "{consent:consent:show_hide_attributes}"
 msgstr "显示/隐藏属性"
@@ -49,7 +49,7 @@ msgid "{consent:consent:noconsent_title}"
 msgstr "未同意"
 
 msgid "{consent:consent:consent_accept}"
-msgstr "SPNAME请求的信息已经被传输出去"
+msgstr "SPNAME请求以下信息被传送。"
 
 msgid "{consent:consent:table_summary}"
 msgstr "当你登录时将要传输给服务的信息列表"
@@ -70,7 +70,7 @@ msgid "{consent:consent:consent_privacypolicy}"
 msgstr "该服务的隐私策略"
 
 msgid "{consent:consent:noconsent_text}"
-msgstr "你没有同意传输你的相关属性给服务提供者"
+msgstr "你没有同意传输你的相关属性给SPNAME"
 
 msgid "{consent:consent:noconsent_return}"
 msgstr "返回同意界面"
@@ -79,7 +79,7 @@ msgid "{consent:consent:yes}"
 msgstr "是的,继续"
 
 msgid "{consent:consent:consent_attributes_header}"
-msgstr "信息将会发送给SPNAME"
+msgstr "将会发送给SPNAME的信息"
 
 msgid "Service Providers for"
 msgstr "服务提供者给"
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zu/LC_MESSAGES/consent.po b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zu/LC_MESSAGES/consent.po
index 2738559d80..61bb392af1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zu/LC_MESSAGES/consent.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/locales/zu/LC_MESSAGES/consent.po
@@ -5,7 +5,7 @@ msgstr ""
 "Project-Id-Version: SimpleSAMLphp 1.15\n"
 "Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
 "POT-Creation-Date: 2018-11-15 14:49+0200\n"
-"PO-Revision-Date: 2018-11-15 14:49+0200\n"
+"PO-Revision-Date: 2019-12-12 08:47+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -82,3 +82,73 @@ msgstr ""
 msgid "{consent:consent:remember}"
 msgstr "Khumbula"
 
+msgid "Consent about releasing personal information"
+msgstr "Imvume mayelana nokukhulula ulwazi lomuntu siqu"
+
+msgid "Show attributes"
+msgstr "Bonisa okuqukethwe"
+
+msgid "show/hide attributes"
+msgstr "bonisa/fihla izici"
+
+msgid "Yes, continue"
+msgstr "Yebo, qhubeka"
+
+msgid "No consent given"
+msgstr "Ayikho imvume enikeziwe"
+
+msgid "Information that will be sent to SPNAME"
+msgstr "Ulwazi oluzothunyelwa ku-SPNAME"
+
+msgid "Service Providers for"
+msgstr "Abahlinzeki Besevisi bokuthi"
+
+msgid "Consent status"
+msgstr "Isimo semvume"
+
+msgid "Go to information page for the service"
+msgstr "Iya ekhasini lolwazi lesevisi"
+
+msgid "Return to consent page"
+msgstr "Buyela ekhasini lemvume"
+
+msgid "Service Provider"
+msgstr "Umhlinzeki Wesevisi"
+
+msgid "No, cancel"
+msgstr "Cha, khansela"
+
+msgid "Show content"
+msgstr "Bonisa izici"
+
+msgid "Privacy policy for the service"
+msgstr "Inqubomgomo yobumfihlo yesevisi"
+
+msgid "The purpose of SPNAME is SPDESC"
+msgstr "Injongo ye-SPNAME yi-SPDESC"
+
+msgid "Abort login to SPNAME"
+msgstr "Yeka ukungena ku-SPNAME"
+
+msgid "Remember"
+msgstr "Khumbula"
+
+msgid "SPNAME requires that the information below is transferred."
+msgstr "I-SPNAME idinga ukuthi ulwazi olungezansi ludluliswe."
+
+msgid "User information"
+msgstr "Ulwazi lomsebenzisi"
+
+msgid ""
+"List the information about you that is about to be transmitted to the "
+"service you are going to login to"
+msgstr ""
+"Enza uhlu olumayelana nolwazi lwakho oluzodluliselwa kusevisi ozongena "
+"kuyo"
+
+msgid "login"
+msgstr "ngena"
+
+msgid "You did not give consent for transfering your attributes to SPNAME."
+msgstr "Awuzange uyinikeze imvume yokudlulisa izici zakho ku-SPNAME."
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/consent/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/consent/psalm.xml
new file mode 100644
index 0000000000..fc3303ddce
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/psalm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp consent module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.php
index 90907e0ed2..d87a8ba8bc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Template form for giving consent.
  *
@@ -9,6 +10,7 @@
  *
  * @package SimpleSAMLphp
  */
+
 assert(is_string($this->data['yesTarget']));
 assert(is_string($this->data['noTarget']));
 assert($this->data['sppp'] === false || is_string($this->data['sppp']));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.twig b/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.twig
index b1433046a9..c755ba001f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/templates/consentform.twig
@@ -2,7 +2,7 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-<link rel="stylesheet" type="text/css" href="{{ baseurlpath }}assets/css/consent.css" />
+<link rel="stylesheet" href="/{{ baseurlpath }}module.php/consent/assets/css/consent.css">
 {% endblock %}
 
 {% block content %}
@@ -19,17 +19,17 @@
     {% endif %}
 
     <input type="hidden" name="StateId" value="{{ stateId }}" />
-    <button type="submit" name="yes" class="btn" id="yesbutton"{%- if autofocus == 'yesbutton' %} autofocus{% endif -%}>{{ '{consent:consent:yes}'|trans }}</button>
+    <button type="submit" name="yes" class="btn" id="yesbutton"{%- if autofocus is defined and autofocus == 'yesbutton' %} autofocus{% endif -%}>{{ '{consent:consent:yes}'|trans }}</button>
 </form>
 
 <form id="consent_no" action="{{ noTarget }}">
     <input type="hidden" name="StateId" value="{{ stateId }}" />
-    <button type="submit" class="btn" name="no" id="nobutton"{%- if autofocus == 'nobutton' %} autofocus{% endif -%}>{{ '{consent:consent:no}'|trans }}</button>
+    <button type="submit" class="btn" name="no" id="nobutton"{%- if autofocus is defined and autofocus == 'nobutton' %} autofocus{% endif -%}>{{ '{consent:consent:no}'|trans }}</button>
 </form>
 
 {% if sppp != false %}
 <p>{{ '{consent:consent:consent_privacypolicy}'|trans }}
-    <a target='_blank' href='{{ sppp|escape('url') }} '>{{ dstName }}</a>
+    <a target='_blank' href='{{ sppp|escape('html') }} '>{{ dstName }}</a>
 </p>
 {% endif %}
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/tests/bootstrap.php
new file mode 100644
index 0000000000..ec0d0cf0d5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/consent';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/tests/lib/Auth/Process/ConsentTest.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/tests/lib/Auth/Process/ConsentTest.php
new file mode 100644
index 0000000000..8cc5b2034d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/tests/lib/Auth/Process/ConsentTest.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Test for the consent:Consent authproc filter.
+ *
+ * @author Vincent Rioux <vrioux@ctech.ca>
+ * @package SimpleSAMLphp
+ */
+
+namespace SimpleSAML\Test\Module\consent\Auth\Process;
+
+use PHPUnit\Framework\TestCase;
+use SimpleSAML\Configuration;
+use SimpleSAML\Module\consent\Auth\Process\Consent;
+
+class ConsentTest extends TestCase
+{
+    /**
+     * @return void
+     */
+    public function setUp()
+    {
+        $this->config = Configuration::loadFromArray(['module.enable' => ['consent' => true]], '[ARRAY]', 'simplesaml');
+        Configuration::setPreLoadedConfig($this->config, 'config.php');
+    }
+
+
+    /**
+     * Helper function to run the filter with a given configuration.
+     *
+     * @param array $config  The filter configuration.
+     * @param array $request  The request state.
+     * @return array  The state array after processing.
+     */
+    private function processFilter(array $config, array $request)
+    {
+        $filter = new Consent($config, null);
+        $filter->process($request);
+        return $request;
+    }
+
+
+    /**
+     * Test for the private checkDisable() method.
+     *
+     * @return void
+     */
+    public function testCheckDisable()
+    {
+        // test consent disable regex with match
+        $config = [];
+
+        // test consent disable with match on specific SP entityid
+        $request = [
+            'Source'     => [
+                'entityid' => 'https://idp.example.org',
+                'metadata-set' => 'saml20-idp-local',
+                'consent.disable' => [
+                    'https://valid.flatstring.example.that.does.not.match',
+                ],
+                'SingleSignOnService' => [
+                    [
+                        'Binding'  => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
+                        'Location' => 'https://idp.example.org/saml2/idp/SSOService.php',
+                    ],
+                ],
+            ],
+            'Destination' => [
+                // valid entityid equal to the last one in the consent.disable array
+                'entityid' => 'https://sp.example.org/my-sp',
+                'metadata-set' => 'saml20-sp-remote',
+                'consent.disable' => [
+                    ['type' => 'regex', 'pattern' => '/invalid/i'],
+                    'https://sp.example.org/my-sp', // accept the SP that has this specific entityid
+                    'https://idp.example.org',
+                ],
+            ],
+            'UserID' => 'jdoe',
+            'Attributes' => [
+                'eduPersonPrincipalName' => ['jdoe@example.com'],
+            ],
+        ];
+        $result = $this->processFilter($config, $request);
+        // the state should NOT have changed because NO consent should be necessary (match)
+        $this->assertEquals($request, $result);
+
+        // test consent disable with match on SP through regular expression
+        $request = [
+            'Source'     => [
+                'entityid' => 'https://idp.example.org',
+                'metadata-set' => 'saml20-idp-local',
+                'consent.disable' => [
+                    [], // invalid consent option array should be ignored
+                    1234, // bad option
+                    [''], // no type
+                    ['type'=>'invalid'], // invalid consent option type should be ignored
+                    ['type'=>'regex'], // regex consent option without pattern should be ignored
+                    ['type'=>'regex', 'pattern'=>'/.*\.valid.regex\.that\.does\.not\.match.*/i'],
+                    // accept any SP that has an entityid that contains the string ".example.org"
+                    ['type'=>'regex', 'pattern'=>'/.*\.example\.org\/.*/i'],
+                ],
+                'SingleSignOnService' => [
+                    [
+                        'Binding'  => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
+                        'Location' => 'https://idp.example.org/saml2/idp/SSOService.php',
+                    ],
+                ],
+            ],
+            'Destination' => [
+                'entityid' => 'https://sp.example.org/my-sp', // sp contains the string ".example.org"
+                'metadata-set' => 'saml20-sp-remote',
+            ],
+            'UserID' => 'jdoe',
+            'Attributes' => [
+                'eduPersonPrincipalName' => ['jdoe@example.com'],
+            ],
+        ];
+        $result = $this->processFilter($config, $request);
+        // the state should NOT have changed because NO consent should be necessary (match)
+        $this->assertEquals($request, $result);
+
+        // test corner cases
+        $request['Source']['consent.disable'] = [
+            'https://valid.flatstring.example.that.does.not.match',
+            ['foo' => 'bar'],
+        ];
+        $request['Destination']['consent.disable'] = 1;
+        $result = $this->processFilter($config, $request);
+        // the state should NOT have changed because NO consent should be necessary (match)
+        $this->assertEquals($request, $result);
+    }
+
+
+    /**
+     * @return void
+     */
+    public function testAttributeHashIsConsistentWhenOrderOfValuesChange()
+    {
+        $attributes1 = [
+            'attribute1' => ['val1', 'val2'],
+            'attribute2' => ['val1', 'val2']
+        ];
+        $attributeHash1 = Consent::getAttributeHash($attributes1, true);
+
+        $attributes2 = [
+            'attribute1' => ['val1', 'val2'],
+            'attribute2' => ['val2', 'val1']
+        ];
+        $attributeHash2 = Consent::getAttributeHash($attributes2, true);
+
+        $this->assertEquals($attributeHash1, $attributeHash2, "Hash is not the same when the order of values changes");
+    }
+
+
+    /**
+     * @return void
+     */
+    public function testAttributeHashIsConsistentWhenOrderOfAttributesChange()
+    {
+        $attributes1 = [
+            'attribute2' => ['val1', 'val2'],
+            'attribute1' => ['val1', 'val2']
+        ];
+        $attributeHash1 = Consent::getAttributeHash($attributes1, true);
+
+        $attributes2 = [
+            'attribute1' => ['val1', 'val2'],
+            'attribute2' => ['val1', 'val2']
+        ];
+        $attributeHash2 = Consent::getAttributeHash($attributes2, true);
+
+        $this->assertEquals(
+            $attributeHash1,
+            $attributeHash2,
+            "Hash is not the same when the order of the attributs changes"
+        );
+    }
+
+
+    /**
+     * @return void
+     */
+    public function testAttributeHashIsConsistentWithoutValuesWhenOrderOfAttributesChange()
+    {
+        $attributes1 = [
+            'attribute2' => ['val1', 'val2'],
+            'attribute1' => ['val1', 'val2']
+        ];
+        $attributeHash1 = Consent::getAttributeHash($attributes1);
+
+        $attributes2 = [
+            'attribute1' => ['val1', 'val2'],
+            'attribute2' => ['val1', 'val2']
+        ];
+        $attributeHash2 = Consent::getAttributeHash($attributes2);
+
+        $this->assertEquals(
+            $attributeHash1,
+            $attributeHash2,
+            "Hash is not the same when the order of the attributs changes and the values are not included"
+        );
+    }
+
+
+    /**
+     * @return void
+     */
+    public function testConstructorSetsInstancePrivateVars()
+    {
+        $reflection = new \ReflectionClass(Consent::class);
+
+        $values = [
+            'includeValues',
+            'checked',
+            'focus',
+            'hiddenAttributes',
+            'noconsentattributes',
+            'showNoConsentAboutService'
+        ];
+        foreach ($values as $v) {
+            $instanceVars[$v] = $reflection->getProperty($v);
+            $instanceVars[$v]->setAccessible(true);
+        }
+
+        /* these just need to be different to the default values */
+        $config = [
+            'includeValues' => true,
+            'checked' => true,
+            'focus' => 'yes',
+            'hiddenAttributes' => ['attribute1', 'attribute2'],
+            'attributes.exclude' => ['attribute1', 'attribute2'],
+            'showNoConsentAboutService' => false,
+        ];
+
+        ob_start();
+        $testcase = $reflection->newInstance($config, null);
+        ob_end_clean();
+
+        $this->assertEquals($instanceVars['includeValues']->getValue($testcase), $config['includeValues']);
+        $this->assertEquals($instanceVars['checked']->getValue($testcase), $config['checked']);
+        $this->assertEquals($instanceVars['focus']->getValue($testcase), $config['focus']);
+        $this->assertEquals($instanceVars['hiddenAttributes']->getValue($testcase), $config['hiddenAttributes']);
+        $this->assertEquals($instanceVars['noconsentattributes']->getValue($testcase), $config['attributes.exclude']);
+        $this->assertEquals(
+            $instanceVars['showNoConsentAboutService']->getValue($testcase),
+            $config['showNoConsentAboutService']
+        );
+
+        $deprecated = $reflection->newInstance(['noconsentattributes' => $config['attributes.exclude']], null);
+        $this->assertEquals($instanceVars['noconsentattributes']->getValue($deprecated), $config['attributes.exclude']);
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/www/getconsent.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/www/getconsent.php
index 2da2fc870e..cf393c396f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/www/getconsent.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/www/getconsent.php
@@ -31,7 +31,9 @@
 $id = $_REQUEST['StateId'];
 $state = \SimpleSAML\Auth\State::loadState($id, 'consent:request');
 
-if (array_key_exists('core:SP', $state)) {
+if (is_null($state)) {
+    throw new \SimpleSAML\Error\NoState;
+} elseif (array_key_exists('core:SP', $state)) {
     $spentityid = $state['core:SP'];
 } elseif (array_key_exists('saml:sp:State', $state)) {
     $spentityid = $state['saml:sp:State']['core:SP'];
@@ -158,8 +160,12 @@
 $t->data['dstName'] = $dstName;
 
 // Fetch privacypolicy
-if (array_key_exists('privacypolicy', $state['Destination'])) {
+if (array_key_exists('UIInfo', $state['Destination']) && array_key_exists('PrivacyStatementURL', $state['Destination']['UIInfo']) && (!empty($state['Destination']['UIInfo']['PrivacyStatementURL']))) {
+    $privacypolicy = reset($state['Destination']['UIInfo']['PrivacyStatementURL']);
+} elseif (array_key_exists('privacypolicy', $state['Destination'])) {
     $privacypolicy = $state['Destination']['privacypolicy'];
+} elseif (array_key_exists('UIInfo', $state['Source']) && array_key_exists('PrivacyStatementURL', $state['Source']['UIInfo']) && (!empty($state['Source']['UIInfo']['PrivacyStatementURL']))) {
+    $privacypolicy = reset($state['Source']['UIInfo']['PrivacyStatementURL']);
 } elseif (array_key_exists('privacypolicy', $state['Source'])) {
     $privacypolicy = $state['Source']['privacypolicy'];
 } else {
@@ -209,7 +215,7 @@
  *
  * @return string HTML representation of the attributes
  */
-function present_attributes($t, $attributes, $nameParent)
+function present_attributes(\SimpleSAML\XHTML\Template $t, array $attributes, $nameParent)
 {
     $translator = $t->getTranslator();
 
@@ -248,6 +254,7 @@ function present_attributes($t, $attributes, $nameParent)
                 $hiddenId = \SimpleSAML\Utils\Random::generateID();
                 $str .= '<td><span class="attrvalue hidden" id="hidden_'.$hiddenId.'">';
             } else {
+                $hiddenId = '';
                 $str .= '<td><span class="attrvalue">';
             }
 
@@ -279,7 +286,7 @@ function present_attributes($t, $attributes, $nameParent)
                 $str .= '... ';
                 $str .= '<a class="consent_showattributelink" href="javascript:SimpleSAML_show(\'hidden_'.$hiddenId;
                 $str .= '\'); SimpleSAML_hide(\'visible_'.$hiddenId.'\');">';
-                $str .= $t->t('{consent:consent:show_attribute}');
+                $str .= $translator->t('{consent:consent:show_attribute}');
                 $str .= '</a>';
                 $str .= '</div>';
             }
@@ -287,6 +294,6 @@ function present_attributes($t, $attributes, $nameParent)
             $str .= '</td></tr>';
         }       // end else: not child table
     }   // end foreach
-    $str .= isset($attributes) ? '</table>' : '';
+    $str .= '</table>';
     return $str;
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consent/www/logout.php b/vendor/simplesamlphp/simplesamlphp/modules/consent/www/logout.php
index f84a51bb24..36224787d2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consent/www/logout.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consent/www/logout.php
@@ -14,4 +14,4 @@
 
 $idp = \SimpleSAML\IdP::getByState($state);
 $idp->handleLogoutRequest($state, null);
-assert(false);
+throw new \Exception('Should never happen');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.php_cs.dist
new file mode 100644
index 0000000000..6a85976937
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/config-templates',
+        __DIR__ . '/hooks',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.travis.yml
new file mode 100644
index 0000000000..fec43ab41a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/bin/check-syntax.sh
new file mode 100755
index 0000000000..718d5d51b6
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates hooks tests templates www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/composer.json
new file mode 100644
index 0000000000..f83c8b3edd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/composer.json
@@ -0,0 +1,45 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-consentadmin",
+    "description": "A module that allows users to manage their consent",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "consentadmin"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Jacob Christiansen",
+            "email": "jach@wayf.dk"
+        },
+        {
+            "name": "Olav Morken",
+            "email": "olav.morken@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "simplesamlphp/simplesamlphp-module-consent": "^0.9",
+        "webmozart/assert": "~1.4"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "extra": {
+        "ssp-mixedcase-module-name": "consentAdmin"
+    },
+    "support": {
+        "issues": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin/issues",
+        "source": "https://github.com/simplesamlphp/simplesamlphp-module-consentadmin"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_configpage.php b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_configpage.php
index 2ea75afb11..fc9384f983 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_configpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_configpage.php
@@ -3,8 +3,8 @@
  * Hook to add the consentAdmin module to the config page.
  *
  * @param \SimpleSAML\XHTML\Template $template The template that we should alter in this hook.
+ * @return void
  */
-
 function consentAdmin_hook_configpage(\SimpleSAML\XHTML\Template &$template)
 {
     $template->data['links']['consentAdmin'] = [
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_frontpage.php
index b1903a580a..5059384b6e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/hooks/hook_frontpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add the consentAdmin module to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
-
 function consentAdmin_hook_frontpage(&$links)
 {
     assert(is_array($links));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/psalm.xml
new file mode 100644
index 0000000000..072745148a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/psalm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp consent admin module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="hooks" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/templates/consentadmin.twig b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/templates/consentadmin.twig
index b3197b5304..aa1e81ff42 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/templates/consentadmin.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/templates/consentadmin.twig
@@ -77,6 +77,6 @@
 <p>{{ '{consentAdmin:consentadmin:consentadmin_description2}'|trans|raw }}</p>
 
 <h2>Logout</h2>
-<p><a href="{{ baseurlpath }}consentAdmin.php?logout=1">Logout</a></p>
+<p><a href="/{{ baseurlpath }}module.php/consentAdmin/consentAdmin.php?logout=1">Logout</a></p>
 
 {% endblock %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/tests/bootstrap.php
new file mode 100644
index 0000000000..1c94a497a1
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/consentadmin';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/assets/js/consentAdmin.js b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/assets/js/consentAdmin.js
index 59cf4e17b4..83248d3f5e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/assets/js/consentAdmin.js
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/assets/js/consentAdmin.js
@@ -6,7 +6,7 @@ function checkConsent()
     var checkbox = document.getElementById("checkbox_"+show_spid);
 
     xmlHttp = GetXmlHttpObject()
-    if (xmlHttp == null) {
+    if (xmlHttp === null) {
         alert("Browser does not support HTTP Request")
         return
     }
@@ -69,8 +69,8 @@ document.addEventListener(
         }
 
         var checkbox = document.getElementsByClassName("checkbox");
-        for (var i = 0; i < checkbox.length; i++) {
-            checkbox[i].addEventListener(
+        for (var j = 0; j < checkbox.length; j++) {
+            checkbox[j].addEventListener(
                 'click',
                 checkConsent
             );
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/consentAdmin.php b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/consentAdmin.php
index 17a091d087..7029afa966 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/consentAdmin.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/consentAdmin/www/consentAdmin.php
@@ -11,9 +11,19 @@
  * Author: Mads Freek <freek@ruc.dk>, Jacob Christiansen <jach@wayf.dk>
  */
 
-/*
+/**
  * Runs the processing chain and ignores all filter which have user
  * interaction.
+ *
+ * @param array $idp_metadata
+ * @param string $source
+ * @param array $sp_metadata
+ * @param string $sp_entityid
+ * @param array $attributes
+ * @param string $userid
+ * @param bool $hashAttributes
+ * @param array $excludeAttributes
+ * @return array
  */
 function driveProcessingChain(
     $idp_metadata,
@@ -44,7 +54,9 @@ function driveProcessingChain(
     ];
     /* we're being bridged, so add that info to the state */
     if (strpos($source, '-idp-remote|') !== false) {
-        $authProcState['saml:sp:IdP'] = substr($source, strpos($source, '|') + 1);
+        /** @var int $i */
+        $i = strpos($source, '|');
+        $authProcState['saml:sp:IdP'] = substr($source, $i + 1);
     }
 
     /*
@@ -107,7 +119,6 @@ function driveProcessingChain(
  * Get IdP id and metadata
  */
 
-
 $idp_entityid = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
 $idp_metadata = $metadata->getMetaData($idp_entityid, 'saml20-idp-hosted');
 
@@ -176,6 +187,7 @@ function driveProcessingChain(
         'consentAdmin:consentadminajax.php',
         'consentAdmin:consentadmin'
     );
+    $translator = $template->getTranslator();
 
     // Get SP metadata
     $sp_metadata = $metadata->getMetaData($sp_entityid, 'saml20-sp-remote');
@@ -207,8 +219,9 @@ function driveProcessingChain(
             $rowcount = $consent_storage->deleteConsent($hashed_user_id, $targeted_id);
             if ($rowcount > 0) {
                 $res = $translator->t("removed");
+            } else {
+                throw new \Exception("Unknown action (should not happen)");
             }
-            // Unknown action (should not happen)
         } else {
             \SimpleSAML\Logger::info('consentAdmin: unknown action');
             $res = $translator->t("unknown");
@@ -236,6 +249,7 @@ function driveProcessingChain(
 $translator->includeLanguageFile('attributes'); // attribute listings translated by this dictionary
 
 $sp_empty_description = $translator->getTag('sp_empty_description');
+$sp_list = [];
 
 // Process consents for all SP
 foreach ($all_sp_metadata as $sp_entityid => $sp_values) {
@@ -274,7 +288,7 @@ function driveProcessingChain(
             \SimpleSAML\Logger::info('consentAdmin: ok');
             $sp_status = "ok";
         }
-        // Consent does not exists
+        // Consent does not exist
     } else {
         SimpleSAML\Logger::info('consentAdmin: none');
         $sp_status = "none";
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/cardinality.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/cardinality.translation.json
index a0a31ded62..0a23c76ccb 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/cardinality.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/cardinality.translation.json
@@ -5,7 +5,8 @@
     "es": "Atributos inválidos",
     "no": "Ugyldige atributter",
     "zu": "Izici Ezingalungile",
-    "xh": "Iimpawu Ezingachanekanga"
+    "xh": "Iimpawu Ezingachanekanga",
+    "ca": "Atributs incorrectes"
   },
   "cardinality_text": {
     "af": "Een of meer van die eienskappe wat deur u identiteits-verskaffer voorsien was, bevat nie die verwagte aantal waardes nie.",
@@ -13,7 +14,8 @@
     "es": "Uno o más atributos proporcionados por su proveedor de identidad no contiene la cantidad de valores esperada.",
     "no": "Én eller flere atributter levert av din identitetsleverandør har ikke så mange verdier som forventes.",
     "zu": "Isici esisodwa noma ngaphezulu esinikezwe umhlinzeki wakho kamazisi asizange siqukathe inani lezinombolo ezilindelwe.",
-    "xh": "Uphawu olunye okanye olungakumbi olunikelwe ngumboonelei wesazisi sakho aluqulethanga inani lamaxabiso alindelekileyo."
+    "xh": "Uphawu olunye okanye olungakumbi olunikelwe ngumboonelei wesazisi sakho aluqulethanga inani lamaxabiso alindelekileyo.",
+    "ca": "Un o més dels atributs facilitats pel vostre proveïdor d’identitat no contenia el nombre de valors esperat."
   },
   "problematic_attributes": {
     "af": "Die problematiese eienskap(pe) is:",
@@ -21,7 +23,8 @@
     "es": "Los atributos problemáticos son:",
     "no": "De ugyldige atributter er:",
     "zu": "Isici(izici) esiyinkinga sithi:",
-    "xh": "Iimpawu eziyingxaki zezi:"
+    "xh": "Iimpawu eziyingxaki zezi:",
+    "ca": "Els atributs problemàtics són:"
   },
   "got_want": {
     "af": "%GOT% waarde ontvang, %WANT% nodig",
@@ -29,6 +32,7 @@
     "es": "contiene %GOT% valores, se esperaban %WANT%",
     "no": "har %GOT% verdier, forventer %WANT%",
     "zu": "uthole amanani angu-%GOT%, ufuna %WANT%",
-    "xh": "kukho amaxabiso e-%GOT%, sifuna %WANT%"
+    "xh": "kukho amaxabiso e-%GOT%, sifuna %WANT%",
+    "ca": "tens %GOT% valors, desitjats %WANT%"
   }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/frontpage.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/frontpage.translation.json
index 0cb5eed172..19508a65b0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/frontpage.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/frontpage.translation.json
@@ -32,7 +32,8 @@
 		"sr": "<strong>\u010cestitamo<\/strong>, uspe\u0161no ste instalirali SimpleSAMLphp. Ovo je po\u010detna stranica na kojoj mo\u017eete prona\u0107i primere, dijagnostiku, metapodatke i linkove na relevantnu dokumentaciju.",
 		"ro": "<strong>Felciit\u0103ri<\/strong>, a\u021bi instalat cu succes SimpleSAMLphp. Aceasta este pagina de start unde g\u0103si\u021bi link-uri c\u0103tre exemple, diagnostic\u0103ri, metadate, documenta\u021bie.",
 		"eu": "<strong>&iexcl;Zorionak!<\/strong> SimpleSAMLphp zuzen instalatu duzu. Hau instalazioaren hasiera orria da, hemen, aurkituko dituzu loturak froga, metadatu edo dokumentu garrantzitsuetan sartzeko.",
-		"el": "<strong>\u03a3\u03c5\u03b3\u03c7\u03b1\u03c1\u03b7\u03c4\u03ae\u03c1\u03b9\u03b1<\/strong>, \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03b9 \u03bc\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1 \u03c4\u03bf SimpleSAMLphp. \u0391\u03c5\u03c4\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03b1\u03c1\u03c7\u03b9\u03ba\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2, \u03cc\u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b2\u03c1\u03b5\u03af\u03c4\u03b5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5\u03c2 \u03c3\u03b5 \u03b4\u03b9\u03b1\u03b3\u03bd\u03c9\u03c3\u03c4\u03b9\u03ba\u03ac\u002c \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1\u002c \u03c0\u03b1\u03c1\u03b1\u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03b3\u03b9\u03b1 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae\u002c \u03ba\u03b1\u03b8\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ae \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7."
+		"el": "<strong>\u03a3\u03c5\u03b3\u03c7\u03b1\u03c1\u03b7\u03c4\u03ae\u03c1\u03b9\u03b1<\/strong>, \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03b9 \u03bc\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1 \u03c4\u03bf SimpleSAMLphp. \u0391\u03c5\u03c4\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03b1\u03c1\u03c7\u03b9\u03ba\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2, \u03cc\u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b2\u03c1\u03b5\u03af\u03c4\u03b5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5\u03c2 \u03c3\u03b5 \u03b4\u03b9\u03b1\u03b3\u03bd\u03c9\u03c3\u03c4\u03b9\u03ba\u03ac\u002c \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1\u002c \u03c0\u03b1\u03c1\u03b1\u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03b3\u03b9\u03b1 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae\u002c \u03ba\u03b1\u03b8\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ae \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7.",
+		"ca": "<strong>Felicitats<\/strong>, heu instal·lat correctament SimpleSAMLphp. Aquesta és la pàgina d'inici de la vostra instal·lació, on trobareu enllaços per provar exemples, diagnòstics, les metadades i documentació rellevant."
 	},
 	"useful_links_header": {
 		"no": "Nyttige lenker for denne installasjonen",
@@ -67,7 +68,8 @@
 		"lv": "Der\u012bgas saites instal\u0101cijai",
 		"sr": "Korisni linkovi",
 		"ro": "Link-uri utile pentru instalare",
-		"el": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae \u03c3\u03b1\u03c2"
+		"el": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae \u03c3\u03b1\u03c2",
+		"ca": "Enllaços útils per a la vostra instal·lació"
 	},
 	"metadata_header": {
 		"no": "Metadata",
@@ -102,7 +104,8 @@
 		"lv": "Metadati",
 		"sr": "Medapodaci",
 		"ro": "Metadate",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",
+		"ca": "Metadades"
 	},
 	"doc_header": {
 		"no": "Dokumentasjon",
@@ -137,7 +140,8 @@
 		"lv": "Dokument\u0101cija",
 		"sr": "Dokumentacija",
 		"ro": "Documenta\u021bie",
-		"el": "\u03a4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7"
+		"el": "\u03a4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7",
+		"ca": "Documentació"
 	},
 	"checkphp": {
 		"no": "Sjekker din PHP installasjon",
@@ -172,7 +176,8 @@
 		"lv": "P\u0101rbauda J\u016bsu PHP instal\u0101ciju",
 		"sr": "Provera va\u0161e PHP instalacije",
 		"ro": "Verificarea instal\u0103rii PHP",
-		"el": "\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 PHP"
+		"el": "\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 PHP",
+		"ca": "Comprovant la vostra instal·lació de PHP"
 	},
 	"required": {
 		"no": "P\u00e5krevd",
@@ -207,7 +212,8 @@
 		"id": "Diperlukan",
 		"sr": "Obavezno",
 		"ro": "Necesar",
-		"el": "\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9"
+		"el": "\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9",
+		"ca": "Necessari"
 	},
 	"required_ldap": {
 		"no": "P\u00e5krevd for LDAP",
@@ -242,7 +248,8 @@
 		"id": "Diperlukan untuk LDAP",
 		"sr": "Obavezno za LDAP",
 		"ro": "Necesar pentru LDAP",
-		"el": "\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c5\u03c0\u03bf\u03c3\u03c4\u03ae\u03c1\u03b9\u03be\u03b7 LDAP"
+		"el": "\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c5\u03c0\u03bf\u03c3\u03c4\u03ae\u03c1\u03b9\u03be\u03b7 LDAP",
+		"ca": "Necessari per LDAP"
 	},
 	"required_radius": {
 		"no": "P\u00e5krevd for Radius",
@@ -277,7 +284,8 @@
 		"id": "Diperlukan untuk Radius",
 		"sr": "Obavezno za Radius",
 		"ro": "Necesar pentru RADIUS",
-		"el": "\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c5\u03c0\u03bf\u03c3\u03c4\u03ae\u03c1\u03b9\u03be\u03b7 RADIUS"
+		"el": "\u0391\u03c0\u03b1\u03b9\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c5\u03c0\u03bf\u03c3\u03c4\u03ae\u03c1\u03b9\u03be\u03b7 RADIUS",
+		"ca": "Necessari per a Radius"
 	},
 	"optional": {
 		"no": "Valgfritt",
@@ -312,7 +320,8 @@
 		"sr": "Opciono",
 		"ro": "Op\u021bional",
 		"eu": "Hautazkoa",
-		"el": "\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc"
+		"el": "\u03a0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc",
+		"ca": "Opcional"
 	},
 	"recommended": {
 		"no": "Anbefalt",
@@ -347,7 +356,8 @@
 		"sr": "Preporu\u010deno",
 		"ro": "Recomandat",
 		"eu": "Gomendatua",
-		"el": "\u03a0\u03c1\u03bf\u03c4\u03b5\u03af\u03bd\u03b5\u03c4\u03b1\u03b9"
+		"el": "\u03a0\u03c1\u03bf\u03c4\u03b5\u03af\u03bd\u03b5\u03c4\u03b1\u03b9",
+		"ca": "Recomanat"
 	},
 	"warnings": {
 		"no": "Advarsler",
@@ -382,7 +392,8 @@
 		"sr": "Upozorenja",
 		"ro": "Aten\u021bion\u0103ri",
 		"eu": "Oharrak",
-		"el": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2"
+		"el": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2",
+		"ca": "Advertències"
 	},
 	"warnings_https": {
 		"no": "<strong>Du bruker ikke HTTPS<\/strong> - kryptert kommunikasjon med brukeren. HTTP fungerer utmerket til testform\u00e5l, men  i et produksjonsmilj\u00f8 anbefales sterkt \u00e5 skru p\u00e5 sikker kommunikasjon med HTTPS. [ <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">Les mer i dokumentet: SimpleSAMLphp maintenance<\/a> ]",
@@ -417,7 +428,8 @@
 		"sr": "<strong>Ne koristite HTTPS<\/strong> - kriptovanu komunikaciju s korisnikom. HTTP se mo\u017ee koristiti za potrebe testiranja, ali u produkcionom okru\u017eenju trebali biste koristiti HTTPS. [ <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">Pro\u010ditajte vi\u0161e o SimpleSAMLphp pode\u0161avanjima<\/a> ]",
 		"ro": "<strong>Aten\u021bie, nu utiliza\u021bi HTTPS<\/strong> - comunicare criptat\u0103 cu utilizatorul. HTTP func\u021bioneaza bine pentru teste, dar \u00een produc\u021bie trebuie folosit HTTPS. [<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">Citi\u021bi mai multe despre \u00eentre\u021binerea SimpleSAMLphp<\/a> ]",
 		"eu": "<strong>Ez zara erabiltzen ari HTTPSak<\/strong> - erabiltzailearekin zifratutako komunikazioak. HTTP zuzen ibiltzen da ebaluaketa ingurunetan, baina ustiapenean erabili behar baduzu, HTTPS erabili beharko zenuke. [ <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">Irakur ezazu gehiago SimpleSAMLphp-ren mantentze-lanei buruz <\/a> ]",
-		"el": "\u0394\u03b5\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 <strong>HTTPS<\/strong> \u03b3\u03b9\u03b1 \u03ba\u03c1\u03c5\u03c0\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03b7\u03bc\u03ad\u03bd\u03b7 \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7. \u03a4\u03bf HTTP \u03b5\u03c0\u03b1\u03c1\u03ba\u03b5\u03af \u03b3\u03b9\u03b1 \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd\u03c2 \u03c3\u03ba\u03bf\u03c0\u03bf\u03cd\u03c2, \u03c9\u03c3\u03c4\u03cc\u03c3\u03bf \u03c3\u03b5 \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2 \u03b8\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u0048\u0054\u0054\u0050\u0053. [ <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">\u0394\u03b9\u03b1\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...<\/a> ]"
+		"el": "\u0394\u03b5\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 <strong>HTTPS<\/strong> \u03b3\u03b9\u03b1 \u03ba\u03c1\u03c5\u03c0\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03b7\u03bc\u03ad\u03bd\u03b7 \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7. \u03a4\u03bf HTTP \u03b5\u03c0\u03b1\u03c1\u03ba\u03b5\u03af \u03b3\u03b9\u03b1 \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd\u03c2 \u03c3\u03ba\u03bf\u03c0\u03bf\u03cd\u03c2, \u03c9\u03c3\u03c4\u03cc\u03c3\u03bf \u03c3\u03b5 \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2 \u03b8\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u0048\u0054\u0054\u0050\u0053. [ <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">\u0394\u03b9\u03b1\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...<\/a> ]",
+		"ca": "<strong>No utilitzeu HTTPS<\/strong> - comunicació xifrada amb l'usuari. HTTP funciona bé per a proves, però en un entorn de producció, heu d’utilitzar HTTPS. [ <a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-maintenance\">Llegiu més sobre el manteniment de SimpleSAMLphp<\/a> ]"
 	},
 	"link_saml2example": {
 		"no": "SAML 2.0 SP eksempel - test innlogging med SAML 2.0 via din IdP",
@@ -452,7 +464,8 @@
 		"sr": "SAML 2.0 SP primer - testirajte autentifikaciju kroz va\u0161 Davalac Identieta",
 		"ro": "Exemplu furnizor de servicii SAML 2.0 - testarea autentific\u0103rii prin furnizorul dumneavoastr\u0103 de identitate",
 		"eu": "SPren adibidea SAML 2.0rekin - saiakera zure IdP erabiliz sartzen",
-		"el": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 - \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5 \u03bc\u03ad\u03c3\u03c9 \u03c4\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03ac\u03c2 \u03c3\u03b1\u03c2"
+		"el": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 - \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5 \u03bc\u03ad\u03c3\u03c9 \u03c4\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03ac\u03c2 \u03c3\u03b1\u03c2",
+		"ca": "Exemple de SAML 2.0 SP: proveu el registre a través del vostre IdP"
 	},
 	"link_shib13example": {
 		"no": "Shibboleth 1.3 SP eksempel - test innlogging med Shibboleth 1.3 via din IdP",
@@ -487,7 +500,8 @@
 		"sr": "Shibboleth 1.3 SP primer - testirajte autentifikaciju kroz va\u0161 Shib Davalac Servisa",
 		"ro": "Exemplu furnizor de servicii Shibboleth 1.3 - testarea autentific\u0103rii prin furnizorul dumneavoastr\u0103 de identitate Shib",
 		"eu": "SPren adibidea Shibboleth 1.3 erabiliz - saikera zure IdP Shibboleth erabiliz sartzen",
-		"el": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth 1.3 - \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5 \u03bc\u03ad\u03c3\u03c9 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shibboleth 1.3"
+		"el": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth 1.3 - \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5 \u03bc\u03ad\u03c3\u03c9 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shibboleth 1.3",
+		"ca": "Exemple de Shibboleth 1.3 SP: proveu el registre a través del vostre IdP"
 	},
 	"link_openidprovider": {
 		"no": "OpenID Provider side - Alpha versjon (testkode)",
@@ -522,7 +536,8 @@
 		"sr": "Davalac OpenID digitalnih identiteta - razvojna verzija (test)",
 		"ro": "Furnizor OpenID - versiune alpha (cod de test)",
 		"eu": "OpenID hornitzailearen gunea - Alfa bertsioa (proba kodea)",
-		"el": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 OpenID - \u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Alpha (\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2)"
+		"el": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 OpenID - \u0388\u03ba\u03b4\u03bf\u03c3\u03b7 Alpha (\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2)",
+		"ca": "Lloc del proveïdor d'OpenID: versió Alpha (codi de prova)"
 	},
 	"link_diagnostics": {
 		"no": "Diagnostiser hostnavn, port og protokoll",
@@ -557,7 +572,8 @@
 		"sr": "Dijagnostika vezana za naziv servera (hostname), port i protokol ",
 		"ro": "Diagnostic despre numele de host, port \u0219i protocol",
 		"eu": "Host, ataka eta protokoloen gaineko diagnostikoa",
-		"el": "\u0394\u03b9\u03b1\u03b3\u03bd\u03c9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u002c \u03b8\u03cd\u03c1\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03c0\u03c1\u03c9\u03c4\u03bf\u03ba\u03cc\u03bb\u03bb\u03bf\u03c5"
+		"el": "\u0394\u03b9\u03b1\u03b3\u03bd\u03c9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u002c \u03b8\u03cd\u03c1\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03c0\u03c1\u03c9\u03c4\u03bf\u03ba\u03cc\u03bb\u03bb\u03bf\u03c5",
+		"ca": "Diagnòstic sobre el nom de host, el port i el protocol"
 	},
 	"link_phpinfo": {
 		"no": "PHPinfo",
@@ -592,7 +608,8 @@
 		"id": "PHP info",
 		"sr": "Informacije o PHP instalaciji",
 		"ro": "Informa\u021bii despre PHP",
-		"el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 PHP"
+		"el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 PHP",
+		"ca": "PHP info"
 	},
 	"link_meta_overview": {
 		"no": "Oversikt over metadata for din installasjon. Diagnostiser metadatafilene her.",
@@ -627,7 +644,8 @@
 		"sr": "Pregled metapodataka o va\u0161oj instalaciji. Proverite ispravnost sadr\u017eaja fajlova sa metapodacima.",
 		"ro": "Privire de ansamblu a metadatelor pentru instalarea dumneavoastr\u0103. Diagnostica\u021bi fi\u0219ierele cu metadate",
 		"eu": "Zure instalazioko metadatuen ikuspegi orokorra. Egiaztatu zure metadatu fitxategiak",
-		"el": "\u0395\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae \u03c3\u03b1\u03c2. \u0394\u03b9\u03ac\u03b3\u03bd\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03c3\u03b1\u03c2"
+		"el": "\u0395\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03ae \u03c3\u03b1\u03c2. \u0394\u03b9\u03ac\u03b3\u03bd\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03c3\u03b1\u03c2",
+		"ca": "Visió general de metadades per a la vostra instal·lació. Comprova els teus fitxers de metadades"
 	},
 	"link_meta_saml2sphosted": {
 		"no": "Hosted SAML 2.0 Service Provider Metadata (automatisk generert)",
@@ -662,7 +680,8 @@
 		"sr": "Metapodaci za lokalni SAML 2.0 Davalac Servisa (automatski generisani)",
 		"ro": "Metadate pentru furnizorul de servicii SAML 2.0 g\u0103zduit (generate automat)",
 		"eu": "SP SAML 2.0ren ostatatutako metadatuak (automatikoki sortuak)",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd SAML 2.0 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)",
+		"ca": "Metadades del proveïdor de serveis SAML 2.0 allotjades (generades automàticament)"
 	},
 	"link_meta_saml2idphosted": {
 		"no": "Hosted SAML 2.0 Identity Provider Metadata (automatisk generert)",
@@ -697,7 +716,8 @@
 		"sr": "Metapodaci za lokalni SAML 2.0 Davalac Identiteta (automatski generisani) ",
 		"ro": "Metadate pentru furnizorul de identitate SAML 2.0 g\u0103zduit (generate automat)",
 		"eu": "IdP SAML 2.0ren ostatatutako metadatuak (automatikoki sortuak)",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SAML 2.0 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)",
+		"ca": "Metadades de proveïdors d'identitat SAML 2.0 allotjades (generats automàticament)"
 	},
 	"link_meta_shib13sphosted": {
 		"no": "Hosted Shibboleth 1.3 Service Provider Metadata (automatisk generert)",
@@ -732,7 +752,8 @@
 		"sr": "Metapodaci za lokalni Shibboleth 1.3 Davalac Servisa (automatski generisani)",
 		"ro": "Metadate pentru furnizorul de servicii Shibboleth 1.3 g\u0103zduit (generate automat)",
 		"eu": "SP Shibooleth 1.3ren ostatatutako metadatuak (automatikoki sortuak)",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth 1.3 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth 1.3 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)",
+		"ca": "Metadades del proveïdor de serveis Shibboleth 1.3 allotjades (generades automàticament)"
 	},
 	"link_meta_shib13idphosted": {
 		"no": "Hosted Shibboleth 1.3 Identity Provider Metadata (automatisk generert)",
@@ -767,7 +788,8 @@
 		"sr": "Metapodaci za lokalni Shibboleth 1.3 Davalac Identiteta (automatski generisani)",
 		"ro": "Metadate pentru furnizorul de identitate Shibboleth 1.3 g\u0103zduit (generate automat)",
 		"eu": "IdP Shibooleth 1.3ren ostatatutako metadatuak (automatikoki sortuak)",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shibboleth 1.3 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c6\u03b9\u03bb\u03bf\u03be\u03b5\u03bd\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 Shibboleth 1.3 (\u03c0\u03b1\u03c1\u03ac\u03b3\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1)",
+		"ca": "Metadades del proveïdor d’identitat Shibboleth 1.3 allotjades (generades automàticament)"
 	},
 	"link_xmlconvert": {
 		"no": "XML til SimpleSAMLphp metadata-oversetter",
@@ -802,7 +824,8 @@
 		"sr": "Pretvaranje metapodataka iz XML formata u SimpleSAMLphp format",
 		"ro": "Convertor metadate din XML \u00een SimpleSAMLphp",
 		"eu": "XML-tik SimpleSAMLphp metadatuetara bihurgailua",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b1\u03c0\u03cc XML \u03c3\u03b5 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 SimpleSAMLphp"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b1\u03c0\u03cc XML \u03c3\u03b5 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 SimpleSAMLphp",
+		"ca": "Convertidor d'XML a metadades de SimpleSAMLphp"
 	},
 	"link_doc_install": {
 		"no": "Installerer SimpleSAMLphp",
@@ -837,7 +860,8 @@
 		"id": "Instalasi SimpleSAMLphp",
 		"sr": "Instalacija SimpleSAMLphp-a",
 		"ro": "Se instaleaz\u0103 SimpleSAMLphp",
-		"el": "\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 SimpleSAMLphp"
+		"el": "\u0395\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 SimpleSAMLphp",
+		"ca": "Instal·lació de SimpleSAMLphp"
 	},
 	"link_doc_sp": {
 		"no": "Bruk SimpleSAMLphp som Service Provider",
@@ -872,7 +896,8 @@
 		"id": "Menggunakan SimpleSAMLphp sebagai Service Provider",
 		"sr": "Kako iskoristiti SimpleSAMLphp kao autentifikacioni modul kod Davaoca Servisa",
 		"ro": "Utilizarea SimpleSAMLphp ca furnizor de servicii",
-		"el": "\u03a7\u03c1\u03ae\u03c3\u03b7 SimpleSAMLphp \u03b3\u03b9\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd"
+		"el": "\u03a7\u03c1\u03ae\u03c3\u03b7 SimpleSAMLphp \u03b3\u03b9\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5\u03c2 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd",
+		"ca": "Ús de SimpleSAMLphp com a proveïdor de serveis"
 	},
 	"link_doc_idp": {
 		"no": "Bruk SimpleSAMLphp som identitetstjeneste",
@@ -907,7 +932,8 @@
 		"id": "Menggunakan SimpleSAMLphp sebagai Identity Provider",
 		"sr": "Kako iskoristiti SimpleSAMLphp za implementaciju Davaoca Identiteta",
 		"ro": "Utilizarea SimpleSAMLphp ca furnizor de identitate",
-		"el": "\u03a7\u03c1\u03ae\u03c3\u03b7 SimpleSAMLphp \u03b3\u03b9\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2"
+		"el": "\u03a7\u03c1\u03ae\u03c3\u03b7 SimpleSAMLphp \u03b3\u03b9\u03b1 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
+		"ca": "Ús de SimpleSAMLphp com a proveïdor d’identitat"
 	},
 	"link_doc_shibsp": {
 		"no": "Konfigurer Shibboleth 1.3 SP for \u00e5 fungere sammen med SimpleSAMLphp identitetstjeneste",
@@ -942,7 +968,8 @@
 		"id": "Mengkonfigurasi Shibboleth 1.3 SP untuk bekerja dengan SimpleSAMLphp IdP",
 		"sr": "Podesite Shibboleth 1.3 SP za rad sa SimpleSAMLphp Davaocem Identeteta",
 		"ro": "Configurare furnizor de servicii Shibboleth 1.3 care s\u0103 func\u021bioneze cu furnizor de identitate SimpleSAMLphp",
-		"el": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth 1.3 \u0053\u0068\u0069\u0062\u0062\u006f\u006c\u0065\u0074\u0068 \u0031\u002e\u0033 \u03b3\u03b9\u03b1 \u03c3\u03c5\u03bc\u03b2\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u03bc\u03b5 \u03a0\u03ac\u03c1\u03bf\u03c7\u03bf \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SimpleSAMLphp"
+		"el": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd Shibboleth 1.3 \u0053\u0068\u0069\u0062\u0062\u006f\u006c\u0065\u0074\u0068 \u0031\u002e\u0033 \u03b3\u03b9\u03b1 \u03c3\u03c5\u03bc\u03b2\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u03bc\u03b5 \u03a0\u03ac\u03c1\u03bf\u03c7\u03bf \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 SimpleSAMLphp",
+		"ca": "Configureu Shibboleth 1.3 SP per treballar amb SimpleSAMLphp IdP"
 	},
 	"link_doc_googleapps": {
 		"no": "SimpleSAMLphp som identitetstjeneste for Google Apps for Education",
@@ -977,7 +1004,8 @@
 		"id": "SimpleSAMLphp sebagai IdP untuk Google Apps for Education",
 		"sr": "SimpleSAMLphp kao autentifikacioni servis za Google Apps for Education",
 		"ro": "Furnizor de identitate cu SimpleSAMLphp pentru GoogleApps \u00een educa\u021bie",
-		"el": "\u03a4\u03bf SimpleSAMLphp \u03c9\u03c2 \u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b3\u03b9\u03b1 Google Apps"
+		"el": "\u03a4\u03bf SimpleSAMLphp \u03c9\u03c2 \u03a0\u03ac\u03c1\u03bf\u03c7\u03bf\u03c2 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b3\u03b9\u03b1 Google Apps",
+		"ca": "SimpleSAMLphp com a IdP per a Google Apps for Education"
 	},
 	"link_doc_advanced": {
 		"no": "SimpleSAMLphp avansert funksjonalitet",
@@ -1012,7 +1040,8 @@
 		"id": "Fitur Lanjutan SimpleSAMLphp",
 		"sr": "Napredne mogu\u0107nosti SimpleSAMLphp-a",
 		"ro": "Caracteristici avansate ale SimpleSAMLphp",
-		"el": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bc\u03ad\u03bd\u03b1 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c4\u03bf\u03c5 SimpleSAMLphp"
+		"el": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bc\u03ad\u03bd\u03b1 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03b7\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c4\u03bf\u03c5 SimpleSAMLphp",
+		"ca": "Característiques avançades de SimpleSAMLphp"
 	},
 	"link_doc_maintenance": {
 		"no": "SimpleSAMLphp vedlikehold og konfigurasjon",
@@ -1047,7 +1076,8 @@
 		"id": "Konfigurasi dan Pemeliharaan SimpleSAMLphp",
 		"sr": "Odr\u017eavanje i pode\u0161avanja SimpleSAMLphp-a",
 		"ro": "\u00centre\u021binerea \u0219i configurarea SimpleSAMLphp",
-		"el": "\u03a3\u03c5\u03bd\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 SimpleSAMLphp"
+		"el": "\u03a3\u03c5\u03bd\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 SimpleSAMLphp",
+		"ca": "Manteniment i configuració de SimpleSAMLphp"
 	},
 	"link_configcheck": {
 		"no": "Sjekk av SimpleSAMLphp konfigurasjonsfiler",
@@ -1081,7 +1111,8 @@
 		"id": "Pemeriksaan konfigurasi SimpleSAMLphp",
 		"sr": "Provera SimpleSAMLphp pode\u0161avanja",
 		"ro": "Verificarea configura\u021biei SimpleSAMLphp",
-		"el": "\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd SimpleSAMLphp"
+		"el": "\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd SimpleSAMLphp",
+		"ca": "Verificació de la configuració de SimpleSAMLphp"
 	},
 	"link_cleardiscochoices": {
 		"no": "Slett mitt valg av IdP i IdP discovery tjenestene",
@@ -1115,7 +1146,8 @@
 		"sr": "Poni\u0161ti moj izbor za Davaoca Identiteta u servisima za pronala\u017eenje Davaoca Identiteta ",
 		"ro": "\u0218terge furnizorii de identitate ale\u0219i de mine din serviciile de c\u0103utare a furnizorilor de identitate",
 		"eu": "Nire IdP aukerak ezabatu IdP aurkikuntza zerbitzuetan",
-		"el": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae\u03c2 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2"
+		"el": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae\u03c2 \u03a0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03a4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
+		"ca": "Elimineu les meves opcions d'IdP als serveis de descoberta d'IdP"
 	},
 	"welcome": {
 		"no": "Velkommen",
@@ -1149,7 +1181,8 @@
 		"id": "Selamat Datang",
 		"sr": "Dobrodo\u0161li",
 		"ro": "Bine a\u021bi venit",
-		"el": "\u039a\u03b1\u03bb\u03ce\u03c2 \u03bf\u03c1\u03af\u03c3\u03b1\u03c4\u03b5"
+		"el": "\u039a\u03b1\u03bb\u03ce\u03c2 \u03bf\u03c1\u03af\u03c3\u03b1\u03c4\u03b5",
+		"ca": "Benvingut"
 	},
 	"configuration": {
 		"no": "Konfigurasjon",
@@ -1183,7 +1216,8 @@
 		"id": "Konfigurasi",
 		"sr": "Pode\u0161avanja",
 		"ro": "Configurare",
-		"el": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2"
+		"el": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2",
+		"ca": "Configuració"
 	},
 	"metadata": {
 		"no": "Metadata",
@@ -1217,7 +1251,8 @@
 		"id": "Metadata",
 		"sr": "Metapodaci",
 		"ro": "Metadate",
-		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1"
+		"el": "\u039c\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",
+		"ca": "Metadades"
 	},
 	"tools": {
 		"no": "Verkt\u00f8y",
@@ -1251,7 +1286,8 @@
 		"id": "Peralatan",
 		"sr": "Alati",
 		"ro": "Unelte",
-		"el": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1"
+		"el": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1",
+		"ca": "Eines"
 	},
 	"show_metadata": {
 		"no": "Vis metadata",
@@ -1285,7 +1321,8 @@
 		"id": "Perlihatkan metadata",
 		"sr": "Prika\u017ei metapodatke",
 		"ro": "Vizualizare metadate",
-		"el": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd"
+		"el": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
+		"ca": "Mostra les metadades"
 	},
 	"login_as_admin": {
 		"no": "Login som administrator",
@@ -1319,7 +1356,8 @@
 		"id": "Login sebagai administrator",
 		"sr": "Prijavite se kao administrator",
 		"ro": "Autentificare ca adminstrator",
-		"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u03c9\u03c2 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2"
+		"el": "\u0395\u03af\u03c3\u03bf\u03b4\u03bf\u03c2 \u03c9\u03c2 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2",
+		"ca": "Inicieu la sessió com a administrador"
 	},
 	"loggedin_as_admin": {
 		"no": "Du er logget inn som administrator",
@@ -1353,11 +1391,13 @@
 		"id": "Anda login sebagai administrator",
 		"sr": "Prijavljeni ste kao administrator",
 		"ro": "V-a\u021bi autentificat ca administrator",
-		"el": "\u03a3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2 \u03c9\u03c2 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2"
+		"el": "\u03a3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2 \u03c9\u03c2 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2",
+		"ca": "Heu iniciat la sessió com a administrador"
 	},
 	"logout": {
 		"en": "Logout",
-		"nl": "Uitloggen"
+		"nl": "Uitloggen",
+		"ca": "Tancar sessió"
 	},
 	"auth": {
 		"no": "Autentisering",
@@ -1378,7 +1418,7 @@
 		"hu": "Azonos\u00edt\u00e1s (autentik\u00e1ci\u00f3)",
 		"ja": "\u8a8d\u8a3c",
 		"zh-tw": "\u8a8d\u8b49",
-		"pl": "Autentykacja",
+		"pl": "Uwierzytelnianie",
 		"ru": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f",
 		"et": "Autentimine",
 		"he": "\u05d0\u05d9\u05de\u05d5\u05ea",
@@ -1391,7 +1431,8 @@
 		"ro": "Autentificare",
 		"cs": "Autentizace",
 		"eu": "Kautotzea",
-		"el": "\u03a4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7"
+		"el": "\u03a4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
+		"ca": "Autenticació"
 	},
 	"federation": {
 		"no": "F\u00f8derasjon",
@@ -1425,7 +1466,8 @@
 		"ro": "Federa\u021bie",
 		"cs": "Federace",
 		"eu": "Federazioa",
-		"el": "\u039f\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1"
+		"el": "\u039f\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1",
+		"ca": "Federació"
 	},
 	"authtest": {
 		"no": "Test konfigurerte autentiseringskilder",
@@ -1457,7 +1499,8 @@
 		"ro": "Surse de autentificare configurate pentru teste",
 		"cs": "Otestovat nakonfigurovan\u00e9 autentiza\u010dn\u00ed zdroje",
 		"eu": "Frogatu kautotzeko jada konfiguratuak dauden iturriak",
-		"el": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ae \u03c0\u03b7\u03b3\u03ce\u03bd \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c1\u03c5\u03b8\u03bc\u03b9\u03c3\u03c4\u03b5\u03af"
+		"el": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ae \u03c0\u03b7\u03b3\u03ce\u03bd \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c0\u03bf\u03c5 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c1\u03c5\u03b8\u03bc\u03b9\u03c3\u03c4\u03b5\u03af",
+		"ca": "Proveu les fonts d’autenticació configurades"
 	},
 	"deprecated": {
 		"no": "Utdatert",
@@ -1490,7 +1533,8 @@
 		"ro": "Depreciate",
 		"cs": "Zastaral\u00e9",
 		"eu": "Zaharkitua",
-		"el": "\u03a5\u03c0\u03cc \u03b1\u03c0\u03cc\u03c3\u03c5\u03c1\u03c3\u03b7"
+		"el": "\u03a5\u03c0\u03cc \u03b1\u03c0\u03cc\u03c3\u03c5\u03c1\u03c3\u03b7",
+		"ca": "Obsolet"
 	},
 	"page_title": {
 		"sv": "Installationssida f\u00f6r SimpleSAMLphp",
@@ -1520,7 +1564,8 @@
 		"ro": "Pagina de instalare a SimpleSAMLphp",
 		"cs": "Instala\u010dn\u00ed str\u00e1nka SimpleSAMLphp",
 		"eu": "SimpleSAMLphp instalatzeko orria",
-		"el": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 SimpleSAMLphp"
+		"el": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 SimpleSAMLphp",
+		"ca": "Pàgina d’instal·lació de SimpleSAMLphp"
 	},
 	"warnings_suhosin_url_length": {
 		"no": "Lengden p\u00e5 foresp\u00f8rselparametre er begrenset av PHP Suhosin utvidelsen. Vennligst \u00f8k suhosin.get.max_value_length konfigurasjonsinnstillingen til minst 2048 tegn.",
@@ -1550,7 +1595,8 @@
 		"cs": "D\u00e9lka parametr\u016f dotazu je limitov\u00e1na roz\u0161\u00ed\u0159en\u00edm PHP Suhosin. Pros\u00edm, zvy\u0161te parametr suhosin.get.max_value_length alespo\u0148 na 2048 bajt\u016f.",
 		"eu": "Eskaeraren parametroen luzera PHP Suhosin luzapenak mugatzen du. Mesedez, luza ezazu suhosin.get.max_value_length aukeraren balioa gutxienez 2048 bytetara. ",
 		"zh-tw": "\u8b8a\u6578\u8981\u6c42\u9577\u5ea6\u65bc PHP Suhosin \u5957\u4ef6\u4e2d\u88ab\u9650\u5236\u3002\u8acb\u589e\u52a0 suhosin.get.max_value_length \u4e4b\u53c3\u6578\u81f3 2048 bytes \u4ee5\u4e0a\u3002",
-		"el": "\u03a4\u03bf \u03bc\u03ae\u03ba\u03bf\u03c2 \u03c4\u03c9\u03bd \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03c4\u03c1\u03c9\u03bd \u0071\u0075\u0065\u0072\u0079 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 Suhosin \u03c4\u03b7\u03c2 PHP. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03b5\u03af\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c5\u03be\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c4\u03b9\u03bc\u03ae \u03c4\u03b7\u03c2 \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 'suhosin.get.max_value_length' \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd \u03c3\u03c4\u03b1 2048 bytes."
+		"el": "\u03a4\u03bf \u03bc\u03ae\u03ba\u03bf\u03c2 \u03c4\u03c9\u03bd \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03c4\u03c1\u03c9\u03bd \u0071\u0075\u0065\u0072\u0079 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 Suhosin \u03c4\u03b7\u03c2 PHP. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03b5\u03af\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c5\u03be\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c4\u03b9\u03bc\u03ae \u03c4\u03b7\u03c2 \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 'suhosin.get.max_value_length' \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd \u03c3\u03c4\u03b1 2048 bytes.",
+		"ca": "La longitud dels paràmetres de consulta està limitada per l’extensió PHP Suhosin. Augmenteu l’opció suhosin.get.max_value_length a com a mínim 2048 bytes."
 	},
 	"warnings_secretsalt": {
 		"es": "<strong>Su configuraci&oacute;n est&aacute; usando el <em>salt<\/em> por defecto<\/strong>. Aseg&uacute;rese de modificar la opci&oacute;n de configuraci&oacute;n 'secretsalt' en entornos de producci&oacute;n. [<a href=\"https:\/\/simplesamlphp.org\/docs\/devel\/simplesamlphp-install\">Leer m&aacute;s sobre la configuraci&oacute;n de SimpleSAMLphp<\/a>]",
@@ -1558,14 +1604,23 @@
 		"zh-tw": "<strong>\u76ee\u524d\u8a2d\u5b9a\u6a94\u4f7f\u7528\u9810\u8a2d\u7684\u96dc\u6e4a\u53c3\u6578 (salt)<\/strong> - \u5728\u60a8\u4e0a\u7dda\u904b\u4f5c\u524d\u8acb\u78ba\u8a8d\u60a8\u5df2\u65bc simpleSAML \u8a2d\u5b9a\u9801\u4e2d\u4fee\u6539\u9810\u8a2d\u7684 'secretsalt'\u3002[<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-install\">\u95b1\u8b80\u66f4\u591a\u95dc\u65bc SimpleSAMLphp \u7684\u8a2d\u5b9a\u65b9\u5f0f<\/a> ]",
 		"nl": "<strong>De configuratie bevat de standaard secret salt<\/strong> - verander altijd de 'secretsalt'-optie in de simpleSAML-configuratie voor productieomgevingen. [<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-install\">Lees meer over het configureren van SimpleSAMLphp<\/a> ]",
 		"da": "<strong>Ops\u00e6tningen benytter standard 'secret salt'<\/strong> - s\u00f8rg for at \u00e6ndre standard indstillingen for 'secretsalt' i simpleSAML ops\u00e6tningen i produktionssystemer. [<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-install\">L\u00e6s mere om SimpleSAMLphp ops\u00e6tning.<\/a> ]",
-		"el": "<strong>\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7 \u03c4\u03b9\u03bc\u03ae \u03c4\u03bf\u03c5 \u03bc\u03c5\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd (salt)<\/strong> - \u03c6\u03c1\u03bf\u03bd\u03c4\u03af\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03c1\u03bf\u03c0\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf 'secretsalt' \u03c3\u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 SimpleSAMLphp \u03c3\u03b5 \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2. [<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-install\">\u0394\u03b9\u03b1\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...<\/a> ]"
+		"el": "<strong>\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7 \u03c4\u03b9\u03bc\u03ae \u03c4\u03bf\u03c5 \u03bc\u03c5\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd (salt)<\/strong> - \u03c6\u03c1\u03bf\u03bd\u03c4\u03af\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03c1\u03bf\u03c0\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03b1\u03c1\u03ac\u03bc\u03b5\u03c4\u03c1\u03bf 'secretsalt' \u03c3\u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 SimpleSAMLphp \u03c3\u03b5 \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2. [<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-install\">\u0394\u03b9\u03b1\u03b2\u03ac\u03c3\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...<\/a> ]",
+		"ca": "<strong>La configuració utilitza la clau secreta predeterminada</strong> - assegureu-vos de modificar l’opció per defecte 'secretsalt' a la configuració dels entorns de producció de SimpleSAMLphp. [<a href=\"https:\/\/simplesamlphp.org\/docs\/stable\/simplesamlphp-install\">Més informació sobre la configuració de SimpleSAMLphp<\/a> ]"
 	},
 	"warnings_outdated": {
 		"es": "Su instalaci&oacute;n de SimpleSAMLphp est&aacute; desactualizada. Por favor, actualice a la <a href=\"%LATEST_URL%\">&uacute;ltima versi&oacute;n</a> lo antes posible.",
 		"zh-tw": "\u60a8\u6b63\u5728\u4f7f\u7528\u5df2\u904e\u6642\u7684 SimpleSAMLphp \u7248\u672c\uff0c\u8acb\u76e1\u5feb\u66f4\u65b0\u81f3<a href=\"%LATEST_URL%\">\u6700\u65b0\u7248\u672c</a>\u3002",
-		"nl": "Deze installatie van SimpleSAMLphp is verouderd. Het is aan te raden zo snel mogelijk te upgraden naar <a href=\"%LATEST_URL%\">de meest recente versie</a>."
+		"nl": "Deze installatie van SimpleSAMLphp is verouderd. Het is aan te raden zo snel mogelijk te upgraden naar <a href=\"%LATEST_URL%\">de meest recente versie</a>.",
+		"ca": "Esteu executant una versió obsoleta de SimpleSAMLphp. Si us plau, actualitzeu a l'<a href=\"%LATEST_URL%\">última versió<\/a> el més aviat possible."
 	},
 	"warnings_curlmissing": {
-		"nl": "PHP cURL-extensie ontbreekt. Kan niet controleren op updates voor simpleSAMLphp."
+		"nl": "PHP cURL-extensie ontbreekt. Kan niet controleren op updates voor simpleSAMLphp.",
+		"ca": "Falta l'extensió PHP CURL. No es pot comprovar les actualitzacions de SimpleSAMLphp."
+	},
+	"link_oauth": {
+		"ca": "Registre OAuth Consumer"
+	},
+	"link_metarefresh": {
+		"ca": "Metarefresh: obtenir metadades"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_cookie.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_cookie.translation.json
index 0da9ef717a..9c13f8c18f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_cookie.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_cookie.translation.json
@@ -31,7 +31,8 @@
 		"af": "Verlore cookie",
 		"el": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 cookie",
 		"xh": "Ikhuki engekhoyo",
-		"zu": "Ikhukhi engatholakali"
+		"zu": "Ikhukhi engatholakali",
+		"ca": "Falta la cookie"
 	},
 	"description": {
 		"no": "Du ser ut til \u00e5 ha deaktivert informasjonskapsler. Kontroller innstillingene i nettleseren din og pr\u00f8v igjen.",
@@ -65,7 +66,8 @@
 		"af": "Dit blyk dat jy cookies in jou webblaaier af geskakel het. Gaan asseblief die stellings in jou webblaaier na en probeer weer.",
 		"el": "\u0395\u03bd\u03b4\u03ad\u03c7\u03b5\u03c4\u03b1\u03b9 \u03c4\u03b1 cookie \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03bd\u03b1 \u03ad\u03c7\u03bf\u03c5\u03bd \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b5\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ad\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03ba\u03b1\u03b9 \u03ba\u03b1\u03b9 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac.",
 		"xh": "Ubonakala uzenze azasebenza iikhuki kwibhrawuza yakho. Nceda ujonge iisetingi ezikwibhrawuza yakho, uzame kwakhona.",
-		"zu": "Kubonakala sengathi uyekise amakhukhi kusiphequluli sakho. Sicela uhlole amasethingi kusiphequluli sakho, bese uzame futhi."
+		"zu": "Kubonakala sengathi uyekise amakhukhi kusiphequluli sakho. Sicela uhlole amasethingi kusiphequluli sakho, bese uzame futhi.",
+		"ca": "Sembla que heu desactivat les cookies al vostre navegador. Comproveu la configuració del vostre navegador i torneu-ho a provar."
 	},
 	"retry": {
 		"no": "Pr\u00f8v igjen",
@@ -99,6 +101,7 @@
 		"af": "Probeer weer",
 		"el": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac",
 		"zu": "Zama futhi",
-		"xh": "Zama kwakhona"
+		"xh": "Zama kwakhona",
+		"ca": "Torna a provar"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_metadata.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_metadata.translation.json
index 2ebd8b0f46..f423e027f4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_metadata.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_metadata.translation.json
@@ -30,7 +30,8 @@
 		"af": "Metadata nie gevind nie",
 		"el": "\u0394\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",
 		"zu": "Imethadatha ayitholakali",
-		"xh": "I-Metadata ayifunyenwanga"
+		"xh": "I-Metadata ayifunyenwanga",
+		"ca": "No s'han trobat les metadades"
 	},
 	"not_found_for": {
 		"no": "Vi fant ikke metadataene for:",
@@ -63,7 +64,8 @@
 		"af": "Ons was nie in staat om die metadata vir die entiteit op te spoor nie:",
 		"el": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03bd\u03b1 \u03b2\u03c1\u03b5\u03b8\u03bf\u03cd\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03bf\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1:",
 		"xh": "Asikwazanga ukufumana imetadata ye-entithi:",
-		"zu": "Asikwazanga ukuthola imethadatha yenhlangano:"
+		"zu": "Asikwazanga ukuthola imethadatha yenhlangano:",
+		"ca": "No hem pogut localitzar les metadades de l’entitat:"
 	},
 	"config_problem": {
 		"no": "Dette er sannsynligvis et konfigurasjonsproblem hos enten tjenesteleverand\u00f8ren eller identitetsleverand\u00f8ren.",
@@ -96,7 +98,8 @@
 		"af": "Di\u00e9 is waarskynlik 'n probleem met die konfigurasie by die diensverskaffer \u00f3f die identiteit verskaffer.",
 		"el": "\u0391\u03c5\u03c4\u03cc \u03c5\u03c0\u03bf\u03b4\u03b5\u03b9\u03ba\u03bd\u03cd\u03b5\u03b9 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03bc\u03b5 \u03c4\u03b9\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03b5\u03af\u03c4\u03b5 \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd \u03b5\u03af\u03c4\u03b5 \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03cc\u03c7\u03bf\u03c5 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2.",
 		"xh": "Kusenokwenzeka yingxaki yolungiselelo kumboneleli wenkonzo okanye umboneleli wesazisi.",
-		"zu": "Lokhu kungenzeka ukuthi kubangelwa inkinga yomiso yomhlinzeki wesevisi noma umhlinzeki kamazisi."
+		"zu": "Lokhu kungenzeka ukuthi kubangelwa inkinga yomiso yomhlinzeki wesevisi noma umhlinzeki kamazisi.",
+		"ca": "Aquest és probablement un problema de configuració del proveïdor de serveis o del proveïdor d’identitat."
 	},
 	"suggestion_user_link": {
 		"no": "Hvis du er en bruker som fikk denne feilen etter at du fulgte en link p\u00e5 en nettside, s\u00e5 b\u00f8r du rapportere denne feilen til eieren av den nettsiden.",
@@ -129,7 +132,8 @@
 		"af": "As jy 'n gebruiker is wat na aanleiding van 'n skakel op 'n webwerf hierdie fout ontvang het, moet jy hierdie fout aan die eienaar van die webwerf aan stuur.",
 		"el": "\u0391\u03bd \u03bb\u03ac\u03b2\u03b1\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ce\u03bd\u03c4\u03b1\u03c2 \u03ad\u03bd\u03b1\u03bd \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf \u03c3\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03bd \u03b9\u03c3\u03c4\u03cc\u03c4\u03bf\u03c0\u03bf, \u03b8\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03c3\u03c4\u03bf\u03bd \u03b9\u03b4\u03b9\u03bf\u03ba\u03c4\u03ae\u03c4\u03b7 \u03c4\u03bf\u03c5 \u03b5\u03bd \u03bb\u03cc\u03b3\u03c9 \u03b9\u03c3\u03c4\u03cc\u03c4\u03bf\u03c0\u03bf\u03c5.",
 		"xh": "Ukuba ngaba ungumsebenzisi ofumene le mpazamo emva kokulandela ilinki kwisayithi, ufanele uchaze le mpazamo kumnini walo sayithi.",
-		"zu": "Uma ungumsebenzisi othole leli phutha ngemva kokulandela ilinki ekusayithi, kufanele ubike leli phutha kumnikazi waleyo sayithi."
+		"zu": "Uma ungumsebenzisi othole leli phutha ngemva kokulandela ilinki ekusayithi, kufanele ubike leli phutha kumnikazi waleyo sayithi.",
+		"ca": "Si sou un usuari que ha rebut aquest error després de seguir un enllaç d’un lloc, haureu d’informar d’aquest error al propietari del lloc."
 	},
 	"suggestion_developer": {
 		"no": "Hvis du er en utvikler som setter opp en \"single sign-on\" l\u00f8sning, s\u00e5 har du et problem med metadataoppsettet. Kontroller at metadata er riktig konfigurert hos b\u00e5de identitetsleverand\u00f8ren og tjenesteleverand\u00f8ren.",
@@ -162,6 +166,7 @@
 		"af": "As jy 'n programmeerder is wat die 'single sign-on' oplossing implementeer, het jy 'n probleem met die metadata opset. Bevestig dat die metadata korrek ingestel is op beide die identiteit verskaffer en diensverskaffer.",
 		"el": "\u0395\u03ac\u03bd \u03b5\u03af\u03c3\u03c4\u03b5 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03b5\u03be\u03bf\u03c5\u03c3\u03b9\u03bf\u03b4\u03cc\u03c4\u03b7\u03c3\u03b7\u03c2, \u03c4\u03cc\u03c4\u03b5 \u03b1\u03bd\u03c4\u03b9\u03bc\u03b5\u03c4\u03c9\u03c0\u03af\u03b6\u03b5\u03c4\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03bc\u03b5 \u03c4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd. \u0392\u03b5\u03b2\u03b1\u03b9\u03c9\u03b8\u03b5\u03af\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03c4\u03b1 \u03bc\u03b5\u03c4\u03b1\u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c1\u03c5\u03b8\u03bc\u03b9\u03c3\u03c4\u03b5\u03af \u03c3\u03c9\u03c3\u03c4\u03ac \u03c4\u03cc\u03c3\u03bf \u03c3\u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03cc\u03c3\u03bf \u03ba\u03b1\u03b9 \u03c3\u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd.",
 		"xh": "Ukuba ungumvelisi osebenzisa isisombululo sokusayina ungene kanye, unengxaki nolungiselelo lwe-metadata. Qinisekisa ukuba i-metadata ilungiselelwe ngokuchanekileyo kuzo zombini umbonelei wesazisi nomboneleli wenkonzo.",
-		"zu": "Uma ungunjiniyela osebenzisa isixazululo sokusayinela ukungena esisodwa, unenkinga ngomiso lwemethadatha. Qinisekisa ukuthi imethadatha imiswe ngendlela efanele kokubili kumhlinzeki womazisi nomhlinzeki wesevisi."
+		"zu": "Uma ungunjiniyela osebenzisa isixazululo sokusayinela ukungena esisodwa, unenkinga ngomiso lwemethadatha. Qinisekisa ukuthi imethadatha imiswe ngendlela efanele kokubili kumhlinzeki womazisi nomhlinzeki wesevisi.",
+		"ca": "Si sou un desenvolupador que està desplegant una solució d'inici de sessió únic, teniu un problema amb la configuració de metadades. Verifiqueu que les metadades estiguin configurades correctament tant al proveïdor d’identitat com al proveïdor de serveis."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_state.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_state.translation.json
index 30f0440f6f..dbf1245c4f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_state.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/no_state.translation.json
@@ -28,7 +28,8 @@
 		"eu": "Egoeraren informazioa galdu da",
 		"el": "\u0394\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2",
 		"zu": "Ulwazi lwesifunda lulahlekile",
-		"xh": "Inkcazelo yobume ilahlekile"
+		"xh": "Inkcazelo yobume ilahlekile",
+		"ca": "Informació d'estat perduda"
 	},
 	"description": {
 		"no": "Vi kunne ikke finne tilstandsinformasjonen for denne foresp\u00f8rselen.",
@@ -59,7 +60,8 @@
 		"eu": "Ez dugu aurkitu egoeraren informaziorik eskaera honentzat.",
 		"el": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc \u03bd\u03b1 \u03b5\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03c4\u03bf\u03cd\u03bd \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd \u03b1\u03af\u03c4\u03b7\u03bc\u03b1.",
 		"xh": "Asikwazanga ukufumana inkcazelo yobume yesicelo sangoku.",
-		"zu": "Asikwazanga ukuthola ulwazi lwesifunda lwesicelo samanje."
+		"zu": "Asikwazanga ukuthola ulwazi lwesifunda lwesicelo samanje.",
+		"ca": "No hem pogut localitzar la informació de l’estat per a la sol·licitud actual."
 	},
 	"suggestions": {
 		"no": "Forslag for \u00e5 l\u00f8se dette problemet:",
@@ -90,11 +92,13 @@
 		"eu": "Arazo hau konpontzeko iradokizunak:",
 		"el": "\u03a0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03c0\u03af\u03bb\u03c5\u03c3\u03b7 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2:",
 		"zu": "Iziphakamiso zokuxazulula le nkinga:",
-		"xh": "Iingcebiso zokulungisa le ngxaki:"
+		"xh": "Iingcebiso zokulungisa le ngxaki:",
+		"ca": "Suggeriments per resoldre aquest problema:"
 	},
 	"suggestion_badlink": {
 		"sv": "Kontrollera att länken du använde för att komma åt webplatsen är korrekt.",
-		"nl": "Controleer of u de juiste link gebruikt om de website te benaderen."
+		"nl": "Controleer of u de juiste link gebruikt om de website te benaderen.",
+		"ca": "Comproveu que l’enllaç que heu utilitzat per accedir al lloc web és correcte."
 	},
 	"suggestion_goback": {
 		"no": "G\u00e5 tilbake til forrige side og pr\u00f8v p\u00e5 nytt.",
@@ -125,7 +129,8 @@
 		"eu": "Itzul zaitez aurreko orrira eta saiatu berriro",
 		"el": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c8\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03ba\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03ae\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac.",
 		"zu": "Buyela emuva ekhasini langaphambilini bese uzame futhi.",
-		"xh": "Buyela emva kwikhasi elidlulileyo uzame kwakhona."
+		"xh": "Buyela emva kwikhasi elidlulileyo uzame kwakhona.",
+		"ca": "Torneu a la pàgina anterior i torneu-ho a provar."
 	},
 	"suggestion_closebrowser": {
 		"no": "Lukk nettleseren, og pr\u00f8v p\u00e5 nytt.",
@@ -156,7 +161,8 @@
 		"eu": "Nabigatzailea itxi eta saiatu berriro",
 		"el": "\u039a\u03bb\u03b5\u03af\u03c3\u03c4\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd (web browser) \u03ba\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03ae\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac",
 		"zu": "Vala isiphequluli sewebhu, bese uzame futhi.",
-		"xh": "Vala ibhrawuza yewebhu, uzame kwakhona."
+		"xh": "Vala ibhrawuza yewebhu, uzame kwakhona.",
+		"ca": "Tanqueu el navegador web i torneu-ho a provar."
 	},
 	"causes": {
 		"no": "Denne feilen kan v\u00e6re for\u00e5rsaket av:",
@@ -187,11 +193,13 @@
 		"eu": "Errore hau honek eragin dezake:",
 		"el": "\u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03c1\u03bf\u03ba\u03cd\u03c8\u03b5\u03b9, \u03b5\u03ac\u03bd:",
 		"zu": "Leli phutha kungenzeka libangelwa ukuthi:",
-		"xh": "Le mpazamo isenokuba ibangelwe:"
+		"xh": "Le mpazamo isenokuba ibangelwe:",
+		"ca": "Aquest error pot ser causat per:"
 	},
 	"cause_badlink": {
 		"sv": "Länken till websidan var felaktig, kanske till följd av elak automatisk ifyllning, en trasig länk eller ett trasigt bokmärke.",
-		"nl": "Verkeerde link gebruikt, bijvoorbeeld een bookmark (bladwijzer)."
+		"nl": "Verkeerde link gebruikt, bijvoorbeeld een bookmark (bladwijzer).",
+		"ca": "L’enllaç per arribar fins aquí era erroni, potser era un marcador."
 	},
 	"cause_backforward": {
 		"no": "Bruk av \"frem\"- og \"tilbake\"-knappene i nettleseren.",
@@ -222,7 +230,8 @@
 		"eu": "Zure web nabigatzaileko atzera eta aurrera botoiak erabiltzen.",
 		"el": "\u039c\u03b5\u03c4\u03b1\u03b2\u03ae\u03ba\u03b1\u03c4\u03b5 \u03c0\u03af\u03c3\u03c9 \u03ba\u03b1\u03b9 \u03b5\u03bc\u03c0\u03c1\u03cc\u03c2 \u03c3\u03c4\u03bf \u03b9\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd.",
 		"zu": "Ukusebenzisa izinkinobho ezithi emuva naphambili kusiphequluli sewebhu.",
-		"xh": "Ukusebenzisa amaqhosha okuya emva naphambili kwibhrawuza yewebhu."
+		"xh": "Ukusebenzisa amaqhosha okuya emva naphambili kwibhrawuza yewebhu.",
+		"ca": "Utilitzant els botons enrere i endavant del navegador web."
 	},
 	"cause_openbrowser": {
 		"no": "Starte nettleseren med faner lagret fra forrige gang.",
@@ -253,7 +262,8 @@
 		"eu": "Zure web nabigatzailea aurreko saiotik gordeta zeuden fitxekin ireki duzu.",
 		"el": "\u0391\u03bd\u03bf\u03af\u03be\u03b1\u03c4\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b1\u03c4\u03b5 \u03ba\u03b1\u03c1\u03c4\u03ad\u03bb\u03b5\u03c2 \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1\u03c2.",
 		"xh": "Kuvulwe ibhrawuza yewebhu ngeethebhu eziseyivwe kwiseshoni edlulileyo.",
-		"zu": "Kuvulwe isiphequluli sewebhu ngamathebhu alondolozwe kuseshini yangaphambilini."
+		"zu": "Kuvulwe isiphequluli sewebhu ngamathebhu alondolozwe kuseshini yangaphambilini.",
+		"ca": "S'ha obert el navegador web amb pestanyes desades de la sessió anterior."
 	},
 	"cause_nocookie": {
 		"no": "At informasjonskapsler ikke er aktivert i nettleseren.",
@@ -284,7 +294,8 @@
 		"eu": "Cookie-ak desgaituta egon litezke nabigatzailean.",
 		"el": "\u0397 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 cookie \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c0\u03b5\u03c1\u03b9\u03ae\u03b3\u03b7\u03c3\u03b7\u03c2 \u03b9\u03c3\u03c4\u03bf\u03cd.",
 		"xh": "Iikhuki zisenokwenziwa zingasebenzi kwibhrawuza yewebhu.",
-		"zu": "Amakhukhi kungenzeka ukuthi ayekisiwe kusiphequluli sewebhu."
+		"zu": "Amakhukhi kungenzeka ukuthi ayekisiwe kusiphequluli sewebhu.",
+		"ca": "Les cookies poden estar desactivades al navegador web."
 	},
 	"report_header": {
 		"no": "Rapporter denne feilen",
@@ -315,7 +326,8 @@
 		"eu": "Errore honen berri eman",
 		"el": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03bf\u03c2",
 		"xh": "Chaza le mpazamo",
-		"zu": "Bika leli phutha"
+		"zu": "Bika leli phutha",
+		"ca": "Informeu d'aquest error"
 	},
 	"report_text": {
 		"no": "Hvis problemet vedvarer, kan du rapportere det til systemadministratorene.",
@@ -346,6 +358,7 @@
 		"eu": "Arazoak bere horretan badirau, sistemaren administratzaileei berri eman diezaiekezu.",
 		"el": "\u0391\u03bd \u03c4\u03bf \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03b5\u03be\u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b5\u03af \u03bd\u03b1 \u03c5\u03c6\u03af\u03c3\u03c4\u03b1\u03c4\u03b1\u03b9, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03c3\u03c4\u03bf\u03c5\u03c2 \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ad\u03c2 \u03c4\u03bf\u03c5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2.",
 		"xh": "Ukuba le ngxaki iyaqhubeka, ungayichaza kubalawuli besistim.",
-		"zu": "Uma le nkinga iphikelela, ungayibika kubalawuli besistimu."
+		"zu": "Uma le nkinga iphikelela, ungayibika kubalawuli besistimu.",
+		"ca": "Si aquest problema continua, podeu informar als administradors del sistema."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/short_sso_interval.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/short_sso_interval.translation.json
index aee5b58fb6..ac63374e27 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/short_sso_interval.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/dictionaries/short_sso_interval.translation.json
@@ -28,7 +28,8 @@
 		"ro": "A fost detectat faptul c\u0103 v-a\u021bi autentificat \u00een urm\u0103 cu doar c\u00e2teva secunde cu acest furnizor de servicii, se va considera c\u0103 exist\u0103 o problem\u0103 cu acest furnizor de servicii.",
 		"eu": "Azken aldiz zerbitzu honetan kautotu zinenetik segundu gutxi batzu besterik ez direla igaro antzeman dugu, beraz ZH honekin arazoren bat dagoela hartuko dugu. ",
 		"af": "Ons het ontdek dat daar slegs 'n paar sekondes was sedert jy laas geverifieer het met die diensverskaffer en neem dus aan dat daar 'n probleem is met hierdie SP.",
-		"el": "\u0388\u03c7\u03bf\u03c5\u03bd \u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03bc\u03cc\u03bb\u03b9\u03c2 \u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03c6\u03bf\u03c1\u03ac \u03c0\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03ae\u03ba\u03b1\u03c4\u03b5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd, \u03b3\u03b5\u03b3\u03bf\u03bd\u03cc\u03c2 \u03c0\u03bf\u03c5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c5\u03c0\u03bf\u03b4\u03b7\u03bb\u03ce\u03bd\u03b5\u03b9 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03c3\u03c5\u03b3\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03bf \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf."
+		"el": "\u0388\u03c7\u03bf\u03c5\u03bd \u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03bc\u03cc\u03bb\u03b9\u03c2 \u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03c6\u03bf\u03c1\u03ac \u03c0\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03ae\u03ba\u03b1\u03c4\u03b5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03b9\u03ce\u03bd, \u03b3\u03b5\u03b3\u03bf\u03bd\u03cc\u03c2 \u03c0\u03bf\u03c5 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c5\u03c0\u03bf\u03b4\u03b7\u03bb\u03ce\u03bd\u03b5\u03b9 \u03c0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03c3\u03c5\u03b3\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03bf \u03c0\u03ac\u03c1\u03bf\u03c7\u03bf.",
+		"ca": "Hem detectat que només hi ha uns pocs segons des de la teva última autenticació amb aquest proveïdor de serveis i, per tant, assumim que hi ha un problema amb aquest SP."
 	},
 	"warning_header": {
 		"no": "For kort intervall imellom innloggingsforesp\u00f8rsler",
@@ -59,7 +60,8 @@
 		"ro": "Interval prea scurt \u00eentre evenimentele <i>single sign-on<\/i>.",
 		"eu": "Denbora tarte oso motza saio bakarreko gertaeren artean.",
 		"af": "Te kort interval tussen enkel aanmeldings(single sign on) op die gebeure.",
-		"el": "\u03a3\u03cd\u03bd\u03c4\u03bf\u03bc\u03bf \u03c7\u03c1\u03bf\u03bd\u03b9\u03ba\u03cc \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1 \u03bc\u03b5\u03c4\u03b1\u03be\u03cd \u03b4\u03b9\u03b1\u03b4\u03bf\u03c7\u03b9\u03ba\u03ce\u03bd \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03c9\u03bd."
+		"el": "\u03a3\u03cd\u03bd\u03c4\u03bf\u03bc\u03bf \u03c7\u03c1\u03bf\u03bd\u03b9\u03ba\u03cc \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1 \u03bc\u03b5\u03c4\u03b1\u03be\u03cd \u03b4\u03b9\u03b1\u03b4\u03bf\u03c7\u03b9\u03ba\u03ce\u03bd \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03c9\u03bd.",
+		"ca": "Interval massa curt entre esdeveniments d’inici de sessió."
 	},
 	"retry": {
 		"no": "Fors\u00f8k \u00e5 logge inn p\u00e5 nytt",
@@ -90,6 +92,7 @@
 		"ro": "\u00cencerca\u021bi din nou",
 		"eu": "Saiatu berriro kautotzen",
 		"af": "Probeer weer aanmeld",
-		"el": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2"
+		"el": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
+		"ca": "Torneu a iniciar la sessió"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/docs/authproc_attributealter.md b/vendor/simplesamlphp/simplesamlphp/modules/core/docs/authproc_attributealter.md
index b9010691d2..de4b47601d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/docs/authproc_attributealter.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/docs/authproc_attributealter.md
@@ -31,12 +31,12 @@ Parameters
     This parameter is OPTIONAL, and if not set, `subject` is used as `target`.
 
 `%replace`
-:   Indicates that the whole value of the attribute should be replaced, instead of just the match.
-    This parameter is OPTIONAL.
+:   Indicates that the whole value of the attribute should be replaced if there is a match,
+    instead of just the match. If there's no match, the value will not be changed. This parameter is OPTIONAL.
 
 `%remove`
-:   Indicates that the whole value of the attribute should be removed completely. If no other values exist, the
-    attribute will be removed completely.
+:   Indicates that the whole value of the attribute should be removed completely if there is a match.
+    If no other values exist, the attribute will be removed completely.
     This parameter is OPTIONAL.
     
 Examples
@@ -44,88 +44,92 @@ Examples
 
 Change the domain on the `mail` attribute (when both the new and old domain are known):
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'mail',
         'pattern' => '/olddomain.com/',
         'replacement' => 'newdomain.com',
-    ),
+    ],
 
 Change the domain on the `mail` attribute (when new domain is known):
 
-	10 => array(
-		'class' => 'core:AttributeAlter',
-		'subject' => 'mail',
-		'pattern' => '/(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,6}$/',
-		'replacement' => 'newdomain.com',
-	),
+    10 => [
+        'class' => 'core:AttributeAlter',
+        'subject' => 'mail',
+        'pattern' => '/(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,6}$/',
+        'replacement' => 'newdomain.com',
+    ],
     
-Set the eduPersonPrimaryAffiliation based on users distinguishedName:
+Set the eduPersonPrimaryAffiliation based on users' distinguishedName:
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'dn',
         'pattern' => '/OU=Staff/',
         'replacement' => 'staff',
         'target' => 'eduPersonPrimaryAffiliation',
-    ),
+    ],
     
 Normalize the eduPersonPrimaryAffiliation:
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'eduPersonPrimaryAffiliation',
         'pattern' => '/Student in school/',
         'replacement' => 'student',
         '%replace',
-    ),
+    ],
     
-Get the domain of the email and put it in a separate attribute:
+Get the domain of the emailaddress and put it in a separate attribute:
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'mail',
         'pattern' => '/(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,6}$/',
         'target' => 'domain',
         '%replace',
-    ),
+    ],
 
-Defaulting an attribute to one value (Add it with the default before altering) unless another attribute meets a condition: 
+Defaulting an attribute to one value (add it with the default before altering)
+unless another attribute meets a condition:
 
-    10 => array ('class' => 'core:AttributeAdd',
-                 'myAttribute' => 'default-value'),
-    11 => array ('class' => 'core:AttributeAlter',
+    10 => [
+        'class' => 'core:AttributeAdd',
+        'myAttribute' => 'default-value'
+    ],
+    11 => [
+        'class' => 'core:AttributeAlter',
         'subject' => 'entitlement',
         'pattern' => '/faculty/',
         'target' => 'myAttribute',
         '%replace',
-       ),
+    ],
  
 Remove internal, private values from eduPersonEntitlement:
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'eduPersonEntitlement',
         'pattern' => '/ldap-admin/',
         '%remove',
-    ),
+    ],
 
 Set a value to be blank (which will be sent as an empty string):
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'cn',
         'pattern' => '/No name/',
         'replacement' => '',
         '%replace',
-    ),
+    ],
 
 Set a value to be NULL (which will be sent as a NULL value):
 
-    10 => array(
+    10 => [
         'class' => 'core:AttributeAlter',
         'subject' => 'telephone',
         'pattern' => '/NULL/',
         'replacement' => null,
         '%replace',
-    ),
+    ],
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_frontpage.php
index d2b6eef9c0..cbb1469c03 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_frontpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add the modinfo module to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
-
 function core_hook_frontpage(&$links)
 {
     assert(is_array($links));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_sanitycheck.php b/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_sanitycheck.php
index ef4af3049f..7e401a0dc5 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_sanitycheck.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/hooks/hook_sanitycheck.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to do sanitycheck
  *
  * @param array &$hookinfo  hookinfo
+ * @return void
  */
-
 function core_hook_sanitycheck(&$hookinfo)
 {
     assert(is_array($hookinfo));
@@ -25,10 +26,10 @@ function core_hook_sanitycheck(&$hookinfo)
         $hookinfo['info'][] = '[core] In config.php technicalcontact_email is set properly';
     }
 
-    if (version_compare(phpversion(), '5.5', '>=')) {
+    if (version_compare(phpversion(), '5.6', '>=')) {
         $hookinfo['info'][] = '[core] You are running a PHP version suitable for SimpleSAMLphp.';
     } else {
-        $hookinfo['errors'][] = '[core] You are running an old PHP installation. '.
+        $hookinfo['errors'][] = '[core] You are running an old PHP installation. ' .
             'Please check the requirements for your SimpleSAMLphp version and upgrade.';
     }
 
@@ -42,7 +43,7 @@ function core_hook_sanitycheck(&$hookinfo)
         if (isset($i['dependencies']) && is_array($i['dependencies'])) {
             foreach ($i['dependencies'] as $dep) {
                 if (!in_array($dep, $availmodules, true)) {
-                    $hookinfo['errors'][] = '[core] Module dependency not met: '.$mi.' requires '.$dep;
+                    $hookinfo['errors'][] = '[core] Module dependency not met: ' . $mi . ' requires ' . $dep;
                 }
             }
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/ACL.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/ACL.php
index 2c682a3e08..dac755fe60 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/ACL.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/ACL.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\core;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+
 /**
  * Generic library for access control lists.
  *
@@ -32,16 +35,16 @@ public function __construct($acl)
 
         foreach ($acl as $rule) {
             if (!is_array($rule)) {
-                throw new \SimpleSAML\Error\Exception('Invalid rule in access control list: '.var_export($rule, true));
+                throw new Error\Exception('Invalid rule in access control list: ' . var_export($rule, true));
             }
             if (count($rule) === 0) {
-                throw new \SimpleSAML\Error\Exception('Empty rule in access control list.');
+                throw new Error\Exception('Empty rule in access control list.');
             }
 
             $action = array_shift($rule);
             if ($action !== 'allow' && $action !== 'deny') {
-                throw new \SimpleSAML\Error\Exception(
-                    'Invalid action in rule in access control list: '.var_export($action, true)
+                throw new Error\Exception(
+                    'Invalid action in rule in access control list: ' . var_export($action, true)
                 );
             }
         }
@@ -58,9 +61,9 @@ private static function getById($id)
     {
         assert(is_string($id));
 
-        $config = \SimpleSAML\Configuration::getOptionalConfig('acl.php');
+        $config = Configuration::getOptionalConfig('acl.php');
         if (!$config->hasValue($id)) {
-            throw new \SimpleSAML\Error\Exception('No ACL with id '.var_export($id, true).' in config/acl.php.');
+            throw new Error\Exception('No ACL with id ' . var_export($id, true) . ' in config/acl.php.');
         }
 
         return $config->getArray($id);
@@ -121,7 +124,7 @@ private static function match(array $attributes, array $rule)
             case 'or':
                 return self::opOr($attributes, $rule);
             default:
-                throw new \SimpleSAML\Error\Exception('Invalid ACL operation: '.var_export($op, true));
+                throw new Error\Exception('Invalid ACL operation: ' . var_export($op, true));
         }
     }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAdd.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAdd.php
index deb3ac310c..33f419cd3d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAdd.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAdd.php
@@ -10,28 +10,30 @@
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class AttributeAdd extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * Flag which indicates wheter this filter should append new values or replace old values.
+     * @var bool
      */
     private $replace = false;
 
     /**
      * Attributes which should be added/appended.
      *
-     * Assiciative array of arrays.
+     * Associative array of arrays.
+     * @var array
      */
     private $attributes = [];
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -42,7 +44,7 @@ public function __construct($config, $reserved)
                 if ($values === '%replace') {
                     $this->replace = true;
                 } else {
-                    throw new \Exception('Unknown flag: '.var_export($values, true));
+                    throw new \Exception('Unknown flag: ' . var_export($values, true));
                 }
                 continue;
             }
@@ -52,7 +54,9 @@ public function __construct($config, $reserved)
             }
             foreach ($values as $value) {
                 if (!is_string($value)) {
-                    throw new \Exception('Invalid value for attribute '.$name.': '.var_export($values, true));
+                    throw new \Exception(
+                        'Invalid value for attribute ' . $name . ': ' . var_export($values, true)
+                    );
                 }
             }
 
@@ -60,12 +64,14 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Apply filter to add or replace attributes.
      *
      * Add or replace existing attributes with the configured values.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAlter.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAlter.php
index 0d181a0d7c..710254db63 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAlter.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeAlter.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Error;
+
 /**
  * Filter to modify attributes using regular expressions
  *
@@ -10,47 +12,53 @@
  * @author Jacob Christiansen, WAYF
  * @package SimpleSAMLphp
  */
-
 class AttributeAlter extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * Should the pattern found be replaced?
+     * @var bool
      */
     private $replace = false;
 
     /**
      * Should the value found be removed?
+     * @var bool
      */
     private $remove = false;
 
     /**
      * Pattern to search for.
+     * @var string
      */
     private $pattern = '';
 
     /**
      * String to replace the pattern found with.
+     * @var string|false
      */
     private $replacement = false;
 
     /**
      * Attribute to search in
+     * @var string
      */
     private $subject = '';
 
     /**
      * Attribute to place the result in.
+     * @var string
      */
     private $target = '';
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      * @throws \SimpleSAML\Error\Exception In case of invalid configuration.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -65,7 +73,7 @@ public function __construct($config, $reserved)
                 } elseif ($value === '%remove') {
                     $this->remove = true;
                 } else {
-                    throw new \SimpleSAML\Error\Exception('Unknown flag : '.var_export($value, true));
+                    throw new Error\Exception('Unknown flag : ' . var_export($value, true));
                 }
                 continue;
             } elseif ($name === 'pattern') {
@@ -84,6 +92,7 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Apply the filter to modify attributes.
      *
@@ -91,6 +100,7 @@ public function __construct($config, $reserved)
      *
      * @param array &$request The current request.
      * @throws \SimpleSAML\Error\Exception In case of invalid configuration.
+     * @return void
      */
     public function process(&$request)
     {
@@ -102,20 +112,21 @@ public function process(&$request)
 
         // check that all required params are set in config
         if (empty($this->pattern) || empty($this->subject)) {
-            throw new \SimpleSAML\Error\Exception("Not all params set in config.");
+            throw new Error\Exception("Not all params set in config.");
         }
 
         if (!$this->replace && !$this->remove && $this->replacement === false) {
-            throw new \SimpleSAML\Error\Exception("'replacement' must be set if neither '%replace' nor ".
-                "'%remove' are set.");
+            throw new Error\Exception(
+                "'replacement' must be set if neither '%replace' nor " . "'%remove' are set."
+            );
         }
 
         if (!$this->replace && $this->replacement === null) {
-            throw new \SimpleSAML\Error\Exception("'%replace' must be set if 'replacement' is null.");
+            throw new Error\Exception("'%replace' must be set if 'replacement' is null.");
         }
 
         if ($this->replace && $this->remove) {
-            throw new \SimpleSAML\Error\Exception("'%replace' and '%remove' cannot be used together.");
+            throw new Error\Exception("'%replace' and '%remove' cannot be used together.");
         }
 
         if (empty($this->target)) {
@@ -124,7 +135,7 @@ public function process(&$request)
         }
 
         if ($this->subject !== $this->target && $this->remove) {
-            throw new \SimpleSAML\Error\Exception("Cannot use '%remove' when 'target' is different than 'subject'.");
+            throw new Error\Exception("Cannot use '%remove' when 'target' is different than 'subject'.");
         }
 
         if (!array_key_exists($this->subject, $attributes)) {
@@ -173,6 +184,7 @@ public function process(&$request)
                     $attributes[$this->subject]
                 );
             } else {
+                /** @psalm-suppress InvalidArgument */
                 $attributes[$this->target] = array_diff(
                     preg_replace(
                         $this->pattern,
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeCopy.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeCopy.php
index 1b54da17ae..f6b9a55ae0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeCopy.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeCopy.php
@@ -17,21 +17,22 @@
  *         ),
  *
  */
-
 class AttributeCopy extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * Assosiative array with the mappings of attribute names.
+     * @var array
      */
     private $map = [];
 
+
     /**
      * Initialize this filter, parse configuration
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -39,21 +40,23 @@ public function __construct($config, $reserved)
 
         foreach ($config as $source => $destination) {
             if (!is_string($source)) {
-                throw new \Exception('Invalid source attribute name: '.var_export($source, true));
+                throw new \Exception('Invalid source attribute name: ' . var_export($source, true));
             }
 
             if (!is_string($destination) && !is_array($destination)) {
-                throw new \Exception('Invalid destination attribute name: '.var_export($destination, true));
+                throw new \Exception('Invalid destination attribute name: ' . var_export($destination, true));
             }
 
             $this->map[$source] = $destination;
         }
     }
 
+
     /**
      * Apply filter to rename attributes.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeLimit.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeLimit.php
index b90d1b0cde..2767a9555d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeLimit.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeLimit.php
@@ -2,17 +2,20 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+
 /**
  * A filter for limiting which attributes are passed on.
  *
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class AttributeLimit extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * List of attributes which this filter will allow through.
+     * @var array
      */
     private $allowedAttributes = [];
 
@@ -23,14 +26,15 @@ class AttributeLimit extends \SimpleSAML\Auth\ProcessingFilter
      */
     private $isDefault = false;
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use
      * @throws \SimpleSAML\Error\Exception If invalid configuration is found.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -41,27 +45,28 @@ public function __construct($config, $reserved)
                 $this->isDefault = (bool) $value;
             } elseif (is_int($index)) {
                 if (!is_string($value)) {
-                    throw new \SimpleSAML\Error\Exception('AttributeLimit: Invalid attribute name: '.
+                    throw new Error\Exception('AttributeLimit: Invalid attribute name: ' .
                         var_export($value, true));
                 }
                 $this->allowedAttributes[] = $value;
             } elseif (is_string($index)) {
                 if (!is_array($value)) {
-                    throw new \SimpleSAML\Error\Exception('AttributeLimit: Values for '.
-                        var_export($index, true).' must be specified in an array.');
+                    throw new Error\Exception('AttributeLimit: Values for ' .
+                        var_export($index, true) . ' must be specified in an array.');
                 }
                 $this->allowedAttributes[$index] = $value;
             } else {
-                throw new \SimpleSAML\Error\Exception('AttributeLimit: Invalid option: '.var_export($index, true));
+                throw new Error\Exception('AttributeLimit: Invalid option: ' . var_export($index, true));
             }
         }
     }
 
+
     /**
      * Get list of allowed from the SP/IdP config.
      *
      * @param array &$request  The current request.
-     * @return array|NULL  Array with attribute names, or NULL if no limit is placed.
+     * @return array|null  Array with attribute names, or NULL if no limit is placed.
      */
     private static function getSPIdPAllowed(array &$request)
     {
@@ -76,6 +81,7 @@ private static function getSPIdPAllowed(array &$request)
         return null;
     }
 
+
     /**
      * Apply filter to remove attributes.
      *
@@ -83,6 +89,7 @@ private static function getSPIdPAllowed(array &$request)
      *
      * @param array &$request  The current request
      * @throws \SimpleSAML\Error\Exception If invalid configuration is found.
+     * @return void
      */
     public function process(&$request)
     {
@@ -112,8 +119,8 @@ public function process(&$request)
                 if (array_key_exists($name, $allowedAttributes)) {
                     // but it is an index of the array
                     if (!is_array($allowedAttributes[$name])) {
-                        throw new \SimpleSAML\Error\Exception('AttributeLimit: Values for '.
-                            var_export($name, true).' must be specified in an array.');
+                        throw new Error\Exception('AttributeLimit: Values for ' .
+                            var_export($name, true) . ' must be specified in an array.');
                     }
                     $attributes[$name] = $this->filterAttributeValues($attributes[$name], $allowedAttributes[$name]);
                     if (!empty($attributes[$name])) {
@@ -125,6 +132,7 @@ public function process(&$request)
         }
     }
 
+
     /**
      * Perform the filtering of attributes
      * @param array $values The current values for a given attribute
@@ -146,7 +154,7 @@ private function filterAttributeValues(array $values, array $allowedConfigValues
                      */
                     $regexResult = @preg_match($pattern, $attributeValue);
                     if ($regexResult === false) {
-                        \SimpleSAML\Logger::warning("Error processing regex '$pattern' on value '$attributeValue'");
+                        Logger::warning("Error processing regex '$pattern' on value '$attributeValue'");
                         break;
                     } elseif ($regexResult === 1) {
                         $matchedValues[] = $attributeValue;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeMap.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeMap.php
index 7992f8b69d..7efdd2f73e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeMap.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeMap.php
@@ -2,22 +2,26 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Module;
+
 /**
  * Attribute filter for renaming attributes.
  *
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class AttributeMap extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * Associative array with the mappings of attribute names.
+     * @var array
      */
     private $map = [];
 
     /**
      * Should attributes be duplicated or renamed.
+     * @var bool
      */
     private $duplicate = false;
 
@@ -25,12 +29,12 @@ class AttributeMap extends \SimpleSAML\Auth\ProcessingFilter
     /**
      * Initialize this filter, parse configuration
      *
-     * @param array $config Configuration information about this filter.
+     * @param array &$config Configuration information about this filter.
      * @param mixed $reserved For future use.
      *
-     * @throws Exception If the configuration of the filter is wrong.
+     * @throws \Exception If the configuration of the filter is wrong.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -49,11 +53,11 @@ public function __construct($config, $reserved)
             }
 
             if (!is_string($origName)) {
-                throw new \Exception('Invalid attribute name: '.var_export($origName, true));
+                throw new \Exception('Invalid attribute name: ' . var_export($origName, true));
             }
 
             if (!is_string($newName) && !is_array($newName)) {
-                throw new \Exception('Invalid attribute name: '.var_export($newName, true));
+                throw new \Exception('Invalid attribute name: ' . var_export($newName, true));
             }
 
             $this->map[$origName] = $newName;
@@ -72,31 +76,33 @@ public function __construct($config, $reserved)
      * @param string $fileName Name of attribute map file. Expected to be in the attributemap directory in the root
      * of the SimpleSAMLphp installation, or in the root of a module.
      *
-     * @throws Exception If the filter could not load the requested attribute map file.
+     * @throws \Exception If the filter could not load the requested attribute map file.
+     * @return void
      */
     private function loadMapFile($fileName)
     {
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
 
         $m = explode(':', $fileName);
         if (count($m) === 2) {
             // we are asked for a file in a module
-            if (!\SimpleSAML\Module::isModuleEnabled($m[0])) {
+            if (!Module::isModuleEnabled($m[0])) {
                 throw new \Exception("Module '$m[0]' is not enabled.");
             }
-            $filePath = \SimpleSAML\Module::getModuleDir($m[0]).'/attributemap/'.$m[1].'.php';
+            $filePath = Module::getModuleDir($m[0]) . '/attributemap/' . $m[1] . '.php';
         } else {
-            $filePath = $config->getPathValue('attributenamemapdir', 'attributemap/').$fileName.'.php';
+            $attributenamemapdir = $config->getPathValue('attributenamemapdir', 'attributemap/') ?: 'attributemap/';
+            $filePath = $attributenamemapdir . $fileName . '.php';
         }
 
         if (!file_exists($filePath)) {
-            throw new \Exception('Could not find attribute map file: '.$filePath);
+            throw new \Exception('Could not find attribute map file: ' . $filePath);
         }
 
         $attributemap = null;
         include($filePath);
         if (!is_array($attributemap)) {
-            throw new \Exception('Attribute map file "'.$filePath.'" didn\'t define an attribute map.');
+            throw new \Exception('Attribute map file "' . $filePath . '" didn\'t define an attribute map.');
         }
 
         if ($this->duplicate) {
@@ -111,6 +117,7 @@ private function loadMapFile($fileName)
      * Apply filter to rename attributes.
      *
      * @param array &$request The current request.
+     * @return void
      */
     public function process(&$request)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeRealm.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeRealm.php
index f6366e9fe6..81a71235d0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeRealm.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeRealm.php
@@ -13,15 +13,17 @@
 
 class AttributeRealm extends \SimpleSAML\Auth\ProcessingFilter
 {
+    /** @var string */
     private $attributename = 'realm';
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
         assert(is_array($config));
@@ -31,12 +33,14 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Apply filter to add or replace attributes.
      *
      * Add or replace existing attributes with the configured values.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -44,8 +48,8 @@ public function process(&$request)
         assert(array_key_exists('Attributes', $request));
 
         if (!array_key_exists('UserID', $request)) {
-            throw new \Exception('core:AttributeRealm: Missing UserID for this user. Please'.
-                ' check the \'userid.attribute\' option in the metadata against the'.
+            throw new \Exception('core:AttributeRealm: Missing UserID for this user. Please' .
+                ' check the \'userid.attribute\' option in the metadata against the' .
                 ' attributes provided by the authentication source.');
         }
         $userID = $request['UserID'];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeValueMap.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeValueMap.php
index 9979ea66f2..7c41cf412d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeValueMap.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/AttributeValueMap.php
@@ -2,48 +2,56 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+
 /**
  * Filter to create target attribute based on value(s) in source attribute
  *
  * @author Martin van Es, m7
  * @package SimpleSAMLphp
  */
-
 class AttributeValueMap extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * The name of the attribute we should assign values to (ie: the target attribute).
+     * @var string
      */
     private $targetattribute;
 
     /**
      * The name of the attribute we should create values from.
+     * @var string
      */
     private $sourceattribute;
 
     /**
      * The required $sourceattribute values and target affiliations.
+     * @var array
      */
     private $values = [];
-    
+
     /**
      * Whether $sourceattribute should be kept or not.
+     * @var bool
      */
     private $keep = false;
 
     /**
      * Whether $target attribute values should be replaced by new values or not.
+     * @var bool
      */
     private $replace = false;
-    
+
+
     /**
      * Initialize the filter.
      *
-     * @param array $config Configuration information about this filter.
+     * @param array &$config Configuration information about this filter.
      * @param mixed $reserved For future use.
      * @throws \SimpleSAML\Error\Exception If the configuration is not valid.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -59,8 +67,8 @@ public function __construct($config, $reserved)
                     $this->keep = true;
                 } else {
                     // unknown configuration option, log it and ignore the error
-                    \SimpleSAML\Logger::warning(
-                        "AttributeValueMap: unknown configuration flag '".var_export($value, true)."'"
+                    Logger::warning(
+                        "AttributeValueMap: unknown configuration flag '" . var_export($value, true) . "'"
                     );
                 }
                 continue;
@@ -75,7 +83,7 @@ public function __construct($config, $reserved)
             if ($name === 'sourceattribute') {
                 $this->sourceattribute = $value;
             }
-        
+
             // set the values
             if ($name === 'values') {
                 $this->values = $value;
@@ -84,13 +92,13 @@ public function __construct($config, $reserved)
 
         // now validate it
         if (!is_string($this->sourceattribute)) {
-            throw new \SimpleSAML\Error\Exception("AttributeValueMap: 'sourceattribute' configuration option not set.");
+            throw new Error\Exception("AttributeValueMap: 'sourceattribute' configuration option not set.");
         }
         if (!is_string($this->targetattribute)) {
-            throw new \SimpleSAML\Error\Exception("AttributeValueMap: 'targetattribute' configuration option not set.");
+            throw new Error\Exception("AttributeValueMap: 'targetattribute' configuration option not set.");
         }
         if (!is_array($this->values)) {
-            throw new \SimpleSAML\Error\Exception("AttributeValueMap: 'values' configuration option is not an array.");
+            throw new Error\Exception("AttributeValueMap: 'values' configuration option is not an array.");
         }
     }
 
@@ -99,10 +107,11 @@ public function __construct($config, $reserved)
      * Apply filter.
      *
      * @param array &$request The current request
+     * @return void
      */
     public function process(&$request)
     {
-        \SimpleSAML\Logger::debug('Processing the AttributeValueMap filter.');
+        Logger::debug('Processing the AttributeValueMap filter.');
 
         assert(is_array($request));
         assert(array_key_exists('Attributes', $request));
@@ -122,7 +131,7 @@ public function process(&$request)
                     $values = [$values];
                 }
                 if (count(array_intersect($values, $sourceattribute)) > 0) {
-                    \SimpleSAML\Logger::debug("AttributeValueMap: intersect match for '$value'");
+                    Logger::debug("AttributeValueMap: intersect match for '$value'");
                     $targetvalues[] = $value;
                 }
             }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/Cardinality.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/Cardinality.php
index ac4f1aad1e..113cc6b622 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/Cardinality.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/Cardinality.php
@@ -2,7 +2,11 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
-use SimpleSAML\Utils\HttpAdapter;
+use SimpleSAML\Auth;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
 
 /**
  * Filter to ensure correct cardinality of attributes
@@ -10,7 +14,6 @@
  * @author Guy Halse, http://orcid.org/0000-0002-9388-8592
  * @package SimpleSAMLphp
  */
-
 class Cardinality extends \SimpleSAML\Auth\ProcessingFilter
 {
     /** @var array Associative array with the mappings of attribute names. */
@@ -19,23 +22,24 @@ class Cardinality extends \SimpleSAML\Auth\ProcessingFilter
     /** @var array Entities that should be ignored */
     private $ignoreEntities = [];
 
-    /** @var HTTPAdapter */
+    /** @var \SimpleSAML\Utils\HttpAdapter */
     private $http;
 
+
     /**
      * Initialize this filter, parse configuration.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
-     * @param HTTPAdapter $http  HTTP utility service (handles redirects).
+     * @param \SimpleSAML\Utils\HttpAdapter $http  HTTP utility service (handles redirects).
      * @throws \SimpleSAML\Error\Exception
      */
-    public function __construct($config, $reserved, HttpAdapter $http = null)
+    public function __construct(&$config, $reserved, Utils\HttpAdapter $http = null)
     {
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $this->http = $http ? : new HttpAdapter();
+        $this->http = $http ? : new Utils\HttpAdapter();
 
         foreach ($config as $attribute => $rules) {
             if ($attribute === '%ignoreEntities') {
@@ -44,7 +48,7 @@ public function __construct($config, $reserved, HttpAdapter $http = null)
             }
 
             if (!is_string($attribute)) {
-                throw new \SimpleSAML\Error\Exception('Invalid attribute name: '.var_export($attribute, true));
+                throw new Error\Exception('Invalid attribute name: ' . var_export($attribute, true));
             }
             $this->cardinality[$attribute] = ['warn' => false];
 
@@ -66,23 +70,26 @@ public function __construct($config, $reserved, HttpAdapter $http = null)
             /* sanity check the rules */
             if (!array_key_exists('min', $this->cardinality[$attribute])) {
                 $this->cardinality[$attribute]['min'] = 0;
-            } elseif (!is_int($this->cardinality[$attribute]['min']) ||
-                $this->cardinality[$attribute]['min'] < 0
+            } elseif (
+                !is_int($this->cardinality[$attribute]['min'])
+                || $this->cardinality[$attribute]['min'] < 0
             ) {
-                throw new \SimpleSAML\Error\Exception('Minimum cardinality must be a positive integer: '.
+                throw new Error\Exception('Minimum cardinality must be a positive integer: ' .
                     var_export($attribute, true));
             }
-            if (array_key_exists('max', $this->cardinality[$attribute]) &&
-                !is_int($this->cardinality[$attribute]['max'])
+            if (
+                array_key_exists('max', $this->cardinality[$attribute])
+                && !is_int($this->cardinality[$attribute]['max'])
             ) {
-                throw new \SimpleSAML\Error\Exception('Maximum cardinality must be a positive integer: '.
+                throw new Error\Exception('Maximum cardinality must be a positive integer: ' .
                     var_export($attribute, true));
             }
-            if (array_key_exists('min', $this->cardinality[$attribute]) &&
-                array_key_exists('max', $this->cardinality[$attribute]) &&
-                $this->cardinality[$attribute]['min'] > $this->cardinality[$attribute]['max']
+            if (
+                array_key_exists('min', $this->cardinality[$attribute])
+                && array_key_exists('max', $this->cardinality[$attribute])
+                && $this->cardinality[$attribute]['min'] > $this->cardinality[$attribute]['max']
             ) {
-                throw new \SimpleSAML\Error\Exception('Minimum cardinality must be less than maximium: '.
+                throw new Error\Exception('Minimum cardinality must be less than maximium: ' .
                     var_export($attribute, true));
             }
 
@@ -94,10 +101,12 @@ public function __construct($config, $reserved, HttpAdapter $http = null)
         }
     }
 
+
     /**
      * Process this filter
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -109,7 +118,7 @@ public function process(&$request)
             $entityid = $request['Source']['entityid'];
         }
         if (in_array($entityid, $this->ignoreEntities, true)) {
-            \SimpleSAML\Logger::debug('Cardinality: Ignoring assertions from '.$entityid);
+            Logger::debug('Cardinality: Ignoring assertions from ' . $entityid);
             return;
         }
 
@@ -124,7 +133,7 @@ public function process(&$request)
             /* minimum cardinality */
             if (count($v) < $this->cardinality[$k]['min']) {
                 if ($this->cardinality[$k]['warn']) {
-                    \SimpleSAML\Logger::warning(
+                    Logger::warning(
                         sprintf(
                             'Cardinality: attribute %s from %s does not meet minimum cardinality of %d (%d)',
                             $k,
@@ -145,7 +154,7 @@ public function process(&$request)
             /* maximum cardinality */
             if (array_key_exists('max', $this->cardinality[$k]) && count($v) > $this->cardinality[$k]['max']) {
                 if ($this->cardinality[$k]['warn']) {
-                    \SimpleSAML\Logger::warning(
+                    Logger::warning(
                         sprintf(
                             'Cardinality: attribute %s from %s does not meet maximum cardinality of %d (%d)',
                             $k,
@@ -170,7 +179,7 @@ public function process(&$request)
                 continue;
             }
             if ($this->cardinality[$k]['warn']) {
-                \SimpleSAML\Logger::warning(sprintf(
+                Logger::warning(sprintf(
                     'Cardinality: attribute %s from %s is missing',
                     $k,
                     $entityid
@@ -185,8 +194,8 @@ public function process(&$request)
 
         /* abort if we found a problematic attribute */
         if (array_key_exists('core:cardinality:errorAttributes', $request)) {
-            $id = \SimpleSAML\Auth\State::saveState($request, 'core:cardinality');
-            $url = \SimpleSAML\Module::getModuleURL('core/cardinality_error.php');
+            $id = Auth\State::saveState($request, 'core:cardinality');
+            $url = Module::getModuleURL('core/cardinality_error.php');
             $this->http->redirectTrustedURL($url, ['StateId' => $id]);
             return;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/CardinalitySingle.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/CardinalitySingle.php
index ac251319be..a9f08001c7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/CardinalitySingle.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/CardinalitySingle.php
@@ -2,7 +2,10 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
-use SimpleSAML\Utils\HttpAdapter;
+use SimpleSAML\Auth;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
 
 /**
  * Filter to ensure correct cardinality of single-valued attributes
@@ -13,7 +16,6 @@
  * @author Guy Halse, http://orcid.org/0000-0002-9388-8592
  * @package SimpleSAMLphp
  */
-
 class CardinalitySingle extends \SimpleSAML\Auth\ProcessingFilter
 {
     /** @var array Attributes that should be single-valued or we generate an error */
@@ -31,22 +33,23 @@ class CardinalitySingle extends \SimpleSAML\Auth\ProcessingFilter
     /** @var array Entities that should be ignored */
     private $ignoreEntities = [];
 
-    /** @var HTTPAdapter */
+    /** @var \SimpleSAML\Utils\HttpAdapter */
     private $http;
 
+
     /**
      * Initialize this filter, parse configuration.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
-     * @param HTTPAdapter $http  HTTP utility service (handles redirects).
+     * @param \SimpleSAML\Utils\HttpAdapter $http  HTTP utility service (handles redirects).
      */
-    public function __construct($config, $reserved, HttpAdapter $http = null)
+    public function __construct(&$config, $reserved, Utils\HttpAdapter $http = null)
     {
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $this->http = $http ? : new HttpAdapter();
+        $this->http = $http ? : new Utils\HttpAdapter();
 
         if (array_key_exists('singleValued', $config)) {
             $this->singleValued = $config['singleValued'];
@@ -73,21 +76,24 @@ public function __construct($config, $reserved, HttpAdapter $http = null)
         }
     }
 
+
     /**
      * Process this filter
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
         assert(is_array($request));
         assert(array_key_exists("Attributes", $request));
 
-        if (array_key_exists('Source', $request) &&
-            array_key_exists('entityid', $request['Source']) &&
-            in_array($request['Source']['entityid'], $this->ignoreEntities, true)
+        if (
+            array_key_exists('Source', $request)
+            && array_key_exists('entityid', $request['Source'])
+            && in_array($request['Source']['entityid'], $this->ignoreEntities, true)
         ) {
-            \SimpleSAML\Logger::debug('CardinalitySingle: Ignoring assertions from '.$request['Source']['entityid']);
+            Logger::debug('CardinalitySingle: Ignoring assertions from ' . $request['Source']['entityid']);
             return;
         }
 
@@ -115,8 +121,8 @@ public function process(&$request)
 
         /* abort if we found a problematic attribute */
         if (array_key_exists('core:cardinality:errorAttributes', $request)) {
-            $id = \SimpleSAML\Auth\State::saveState($request, 'core:cardinality');
-            $url = \SimpleSAML\Module::getModuleURL('core/cardinality_error.php');
+            $id = Auth\State::saveState($request, 'core:cardinality');
+            $url = Module::getModuleURL('core/cardinality_error.php');
             $this->http->redirectTrustedURL($url, ['StateId' => $id]);
             return;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ExtendIdPSession.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ExtendIdPSession.php
index 92102262b5..b582561e0e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ExtendIdPSession.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ExtendIdPSession.php
@@ -2,12 +2,19 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use SimpleSAML\SessionHandler;
+
 /**
  * Extend IdP session and cookies.
  */
-
 class ExtendIdPSession extends \SimpleSAML\Auth\ProcessingFilter
 {
+    /**
+     * @param array &$state
+     * @return void
+     */
     public function process(&$state)
     {
         assert(is_array($state));
@@ -19,7 +26,7 @@ public function process(&$state)
         $now = time();
         $delta = $state['Expire'] - $now;
 
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
         $sessionDuration = $globalConfig->getInteger('session.duration', 28800); // 8*60*60
 
         // Extend only if half of session duration already passed
@@ -28,22 +35,24 @@ public function process(&$state)
         }
 
         // Update authority expire time
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $session->setAuthorityExpire($state['Authority']);
 
         // Update session cookies duration
 
         // If remember me is active
         $rememberMeExpire = $session->getRememberMeExpire();
-        if (!empty($state['RememberMe']) && $rememberMeExpire !== null &&
-            $globalConfig->getBoolean('session.rememberme.enable', false)
+        if (
+            !empty($state['RememberMe'])
+            && $rememberMeExpire !== null
+            && $globalConfig->getBoolean('session.rememberme.enable', false)
         ) {
             $session->setRememberMeExpire();
             return;
         }
 
         // Or if session lifetime is more than zero
-        $sessionHandler = \SimpleSAML\SessionHandler::getSessionHandler();
+        $sessionHandler = SessionHandler::getSessionHandler();
         $cookieParams = $sessionHandler->getCookieParams();
         if ($cookieParams['lifetime'] > 0) {
             $session->updateSessionCookies();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/GenerateGroups.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/GenerateGroups.php
index ab9d15aad0..a6e2257e77 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/GenerateGroups.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/GenerateGroups.php
@@ -2,27 +2,30 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Logger;
+
 /**
  * Filter to generate a groups attribute based on many of the attributes of the user.
  *
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class GenerateGroups extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * The attributes we should generate groups from.
+     * @var array
      */
     private $generateGroupsFrom;
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -39,7 +42,7 @@ public function __construct($config, $reserved)
             // Validate configuration
             foreach ($config as $attributeName) {
                 if (!is_string($attributeName)) {
-                    throw new \Exception('Invalid attribute name for core:GenerateGroups filter: '.
+                    throw new \Exception('Invalid attribute name for core:GenerateGroups filter: ' .
                         var_export($attributeName, true));
                 }
             }
@@ -47,10 +50,12 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Apply filter to add groups attribute.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -62,21 +67,21 @@ public function process(&$request)
 
         $realm = self::getRealm($attributes);
         if ($realm !== null) {
-            $groups[] = 'realm-'.$realm;
+            $groups[] = 'realm-' . $realm;
         }
 
         foreach ($this->generateGroupsFrom as $name) {
             if (!array_key_exists($name, $attributes)) {
-                \SimpleSAML\Logger::debug('GenerateGroups - attribute \''.$name.'\' not found.');
+                Logger::debug('GenerateGroups - attribute \'' . $name . '\' not found.');
                 // Attribute not present
                 continue;
             }
 
             foreach ($attributes[$name] as $value) {
                 $value = self::escapeIllegalChars($value);
-                $groups[] = $name.'-'.$value;
+                $groups[] = $name . '-' . $value;
                 if ($realm !== null) {
-                    $groups[] = $name.'-'.$realm.'-'.$value;
+                    $groups[] = $name . '-' . $realm . '-' . $value;
                 }
             }
         }
@@ -86,6 +91,7 @@ public function process(&$request)
         }
     }
 
+
     /**
      * Determine which realm the user belongs to.
      *
@@ -94,7 +100,7 @@ public function process(&$request)
      * a realm, NULL will be returned.
      *
      * @param array $attributes  The attributes of the user.
-     * @return string|NULL  The realm of the user, or NULL if we are unable to determine the realm.
+     * @return string|null  The realm of the user, or NULL if we are unable to determine the realm.
      */
     private static function getRealm($attributes)
     {
@@ -119,6 +125,7 @@ private static function getRealm($attributes)
         return self::escapeIllegalChars($realm);
     }
 
+
     /**
      * Escape special characters in a string.
      *
@@ -135,6 +142,10 @@ private static function escapeIllegalChars($string)
 
         return preg_replace_callback(
             '/([^a-zA-Z0-9_@=.])/',
+            /**
+             * @param array $m
+             * @return string
+             */
             function ($m) {
                 return sprintf("%%%02x", ord($m[1]));
             },
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/LanguageAdaptor.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/LanguageAdaptor.php
index 771fb63572..85271d1659 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/LanguageAdaptor.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/LanguageAdaptor.php
@@ -2,24 +2,28 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Locale\Language;
+use SimpleSAML\Logger;
+
 /**
  * Filter to set and get language settings from attributes.
  *
  * @author Andreas Åkre Solberg, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class LanguageAdaptor extends \SimpleSAML\Auth\ProcessingFilter
 {
+    /** @var string */
     private $langattr = 'preferredLanguage';
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
         assert(is_array($config));
@@ -29,12 +33,14 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Apply filter to add or replace attributes.
      *
      * Add or replace existing attributes with the configured values.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -48,18 +54,18 @@ public function process(&$request)
             $attrlang = $attributes[$this->langattr][0];
         }
 
-        $lang = \SimpleSAML\Locale\Language::getLanguageCookie();
+        $lang = Language::getLanguageCookie();
 
         if (isset($attrlang)) {
-            \SimpleSAML\Logger::debug('LanguageAdaptor: Language in attribute was set ['.$attrlang.']');
+            Logger::debug('LanguageAdaptor: Language in attribute was set [' . $attrlang . ']');
         }
         if (isset($lang)) {
-            \SimpleSAML\Logger::debug('LanguageAdaptor: Language in session   was set ['.$lang.']');
+            Logger::debug('LanguageAdaptor: Language in session was set [' . $lang . ']');
         }
 
         if (isset($attrlang) && !isset($lang)) {
             // Language set in attribute but not in cookie - update cookie
-            \SimpleSAML\Locale\Language::setLanguageCookie($attrlang);
+            Language::setLanguageCookie($attrlang);
         } elseif (!isset($attrlang) && isset($lang)) {
             // Language set in cookie, but not in attribute. Update attribute
             $request['Attributes'][$this->langattr] = [$lang];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/PHP.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/PHP.php
index cd424c76e9..fcf6e738ae 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/PHP.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/PHP.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Error;
+
 /**
  * Attribute filter for running arbitrary PHP code.
  *
@@ -21,19 +23,19 @@ class PHP extends \SimpleSAML\Auth\ProcessingFilter
     /**
      * Initialize this filter, parse configuration
      *
-     * @param array $config Configuration information about this filter.
+     * @param array &$config Configuration information about this filter.
      * @param mixed $reserved For future use.
      *
      * @throws \SimpleSAML\Error\Exception if the 'code' option is not defined.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
         assert(is_array($config));
 
         if (!isset($config['code'])) {
-            throw new \SimpleSAML\Error\Exception("core:PHP: missing mandatory configuration option 'code'.");
+            throw new Error\Exception("core:PHP: missing mandatory configuration option 'code'.");
         }
         $this->code = (string) $config['code'];
     }
@@ -43,15 +45,22 @@ public function __construct($config, $reserved)
      * Apply the PHP code to the attributes.
      *
      * @param array &$request The current request
+     * @return void
+     *
+     * @scrutinizer ignore-unused
      */
     public function process(&$request)
     {
         assert(is_array($request));
         assert(array_key_exists('Attributes', $request));
 
-        $function = function (
-            /** @scrutinizer ignore-unused */ &$attributes,
-            /** @scrutinizer ignore-unused */ &$state
+        /**
+         * @param array &$attributes
+         * @param array &$state
+         */
+        $function = /** @return void */ function (
+            array &$attributes,
+            array &$state
         ) {
             eval($this->code);
         };
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeAttribute.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeAttribute.php
index 1db7d3c18a..bc05f95388 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeAttribute.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeAttribute.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Configuration;
+
 /**
  * Add a scoped variant of an attribute.
  *
@@ -38,29 +40,32 @@ class ScopeAttribute extends \SimpleSAML\Auth\ProcessingFilter
      */
     private $onlyIfEmpty = false;
 
+
     /**
      * Initialize this filter, parse configuration
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $config = \SimpleSAML\Configuration::loadFromArray($config, 'ScopeAttribute');
+        $cfg = Configuration::loadFromArray($config, 'ScopeAttribute');
 
-        $this->scopeAttribute = $config->getString('scopeAttribute');
-        $this->sourceAttribute = $config->getString('sourceAttribute');
-        $this->targetAttribute = $config->getString('targetAttribute');
-        $this->onlyIfEmpty = $config->getBoolean('onlyIfEmpty', false);
+        $this->scopeAttribute = $cfg->getString('scopeAttribute');
+        $this->sourceAttribute = $cfg->getString('sourceAttribute');
+        $this->targetAttribute = $cfg->getString('targetAttribute');
+        $this->onlyIfEmpty = $cfg->getBoolean('onlyIfEmpty', false);
     }
 
+
     /**
      * Apply this filter to the request.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -92,7 +97,7 @@ public function process(&$request)
             }
 
             foreach ($attributes[$this->sourceAttribute] as $value) {
-                $value = $value.'@'.$scope;
+                $value = $value . '@' . $scope;
 
                 if (in_array($value, $attributes[$this->targetAttribute], true)) {
                     // Already present
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeFromAttribute.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeFromAttribute.php
index b043de9fd8..cc8411e311 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeFromAttribute.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/ScopeFromAttribute.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+
 /**
  * Retrieve a scope from a source attribute and add it as a virtual target
  * attribute.
@@ -18,7 +21,6 @@
  * to add a virtual 'scope' attribute from the eduPersonPrincipalName
  * attribute.
  */
-
 class ScopeFromAttribute extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
@@ -35,26 +37,29 @@ class ScopeFromAttribute extends \SimpleSAML\Auth\ProcessingFilter
      */
     private $targetAttribute;
 
+
     /**
      * Initialize this filter, parse configuration
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $config = \SimpleSAML\Configuration::loadFromArray($config, 'ScopeFromAttribute');
-        $this->targetAttribute = $config->getString('targetAttribute');
-        $this->sourceAttribute = $config->getString('sourceAttribute');
-    } // end constructor
+        $cfg = Configuration::loadFromArray($config, 'ScopeFromAttribute');
+        $this->targetAttribute = $cfg->getString('targetAttribute');
+        $this->sourceAttribute = $cfg->getString('sourceAttribute');
+    }
+
 
     /**
      * Apply this filter.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -83,12 +88,12 @@ public function process(&$request)
             $attributes[$this->targetAttribute] = [];
             $scope = substr($sourceAttrVal, $scopeIndex + 1);
             $attributes[$this->targetAttribute][] = $scope;
-            \SimpleSAML\Logger::debug('ScopeFromAttribute: Inserted new attribute '.
-                $this->targetAttribute.', with scope '.$scope);
+            Logger::debug(
+                'ScopeFromAttribute: Inserted new attribute ' . $this->targetAttribute . ', with scope ' . $scope
+            );
         } else {
-            \SimpleSAML\Logger::warning('ScopeFromAttribute: The configured source attribute '.
-                $this->sourceAttribute.' does not have a scope. Did not add attribute '.
-                    $this->targetAttribute.'.');
+            Logger::warning('ScopeFromAttribute: The configured source attribute ' . $this->sourceAttribute
+                . ' does not have a scope. Did not add attribute ' . $this->targetAttribute . '.');
         }
-    } // end process
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/StatisticsWithAttribute.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/StatisticsWithAttribute.php
index 86db3063c5..63d0a62d89 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/StatisticsWithAttribute.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/StatisticsWithAttribute.php
@@ -2,13 +2,14 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Logger;
+
 /**
  * Log a line in the STAT log with one attribute.
  *
  * @author Andreas Åkre Solberg, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class StatisticsWithAttribute extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
@@ -31,10 +32,10 @@ class StatisticsWithAttribute extends \SimpleSAML\Auth\ProcessingFilter
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -64,6 +65,7 @@ public function __construct($config, $reserved)
      * Log line.
      *
      * @param array &$state  The current state.
+     * @return void
      */
     public function process(&$state)
     {
@@ -81,7 +83,7 @@ public function process(&$state)
             $isPassive = 'passive-';
         }
 
-        if (array_key_exists($this->attribute, $state['Attributes'])) {
+        if (!is_null($this->attribute) && array_key_exists($this->attribute, $state['Attributes'])) {
             $logAttribute = $state['Attributes'][$this->attribute][0];
         }
 
@@ -90,10 +92,10 @@ public function process(&$state)
 
         if (!array_key_exists('PreviousSSOTimestamp', $state)) {
             // The user hasn't authenticated with this SP earlier in this session
-            \SimpleSAML\Logger::stats($isPassive.$this->typeTag.'-first '.$dest.' '.$source.' '.$logAttribute);
+            Logger::stats($isPassive . $this->typeTag . '-first ' . $dest . ' ' . $source . ' ' . $logAttribute);
         }
 
-        \SimpleSAML\Logger::stats($isPassive.$this->typeTag.' '.$dest.' '.$source.' '.$logAttribute);
+        Logger::stats($isPassive . $this->typeTag . ' ' . $dest . ' ' . $source . ' ' . $logAttribute);
     }
 
     /**
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/TargetedID.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/TargetedID.php
index 710fa7f648..950f02f9ba 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/TargetedID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/TargetedID.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SAML2\Constants;
+use SAML2\XML\saml\NameID;
+use SimpleSAML\Utils;
+
 /**
  * Filter to generate the eduPersonTargetedID attribute.
  *
@@ -30,12 +34,13 @@
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class TargetedID extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * The attribute we should generate the targeted id from, or NULL if we should use the
      * UserID.
+     *
+     * @var string|null
      */
     private $attribute = null;
 
@@ -46,13 +51,14 @@ class TargetedID extends \SimpleSAML\Auth\ProcessingFilter
      */
     private $generateNameId = false;
 
+
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
@@ -73,10 +79,12 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Apply filter to add the targeted ID.
      *
      * @param array &$state  The current state.
+     * @return void
      */
     public function process(&$state)
     {
@@ -85,15 +93,15 @@ public function process(&$state)
 
         if ($this->attribute === null) {
             if (!array_key_exists('UserID', $state)) {
-                throw new \Exception('core:TargetedID: Missing UserID for this user. Please'.
-                    ' check the \'userid.attribute\' option in the metadata against the'.
+                throw new \Exception('core:TargetedID: Missing UserID for this user. Please' .
+                    ' check the \'userid.attribute\' option in the metadata against the' .
                     ' attributes provided by the authentication source.');
             }
 
             $userID = $state['UserID'];
         } else {
             if (!array_key_exists($this->attribute, $state['Attributes'])) {
-                throw new \Exception('core:TargetedID: Missing attribute \''.$this->attribute.
+                throw new \Exception('core:TargetedID: Missing attribute \'' . $this->attribute .
                     '\', which is needed to generate the targeted ID.');
             }
 
@@ -101,7 +109,7 @@ public function process(&$state)
         }
 
 
-        $secretSalt = \SimpleSAML\Utils\Config::getSecretSalt();
+        $secretSalt = Utils\Config::getSecretSalt();
 
         if (array_key_exists('Source', $state)) {
             $srcID = self::getEntityId($state['Source']);
@@ -115,19 +123,19 @@ public function process(&$state)
             $dstID = '';
         }
 
-        $uidData = 'uidhashbase'.$secretSalt;
-        $uidData .= strlen($srcID).':'.$srcID;
-        $uidData .= strlen($dstID).':'.$dstID;
-        $uidData .= strlen($userID).':'.$userID;
+        $uidData = 'uidhashbase' . $secretSalt;
+        $uidData .= strlen($srcID) . ':' . $srcID;
+        $uidData .= strlen($dstID) . ':' . $dstID;
+        $uidData .= strlen($userID) . ':' . $userID;
         $uidData .= $secretSalt;
 
         $uid = hash('sha1', $uidData);
 
         if ($this->generateNameId) {
             // Convert the targeted ID to a SAML 2.0 name identifier element
-            $nameId = new \SAML2\XML\saml\NameID();
+            $nameId = new NameID();
             $nameId->setValue($uid);
-            $nameId->setFormat(\SAML2\Constants::NAMEID_PERSISTENT);
+            $nameId->setFormat(Constants::NAMEID_PERSISTENT);
 
             if (isset($state['Source']['entityid'])) {
                 $nameId->setNameQualifier($state['Source']['entityid']);
@@ -142,6 +150,7 @@ public function process(&$state)
         $state['Attributes']['eduPersonTargetedID'] = [$nameId];
     }
 
+
     /**
      * Generate ID from entity metadata.
      *
@@ -159,12 +168,12 @@ private static function getEntityId($metadata)
 
         if (array_key_exists('metadata-set', $metadata)) {
             $set = $metadata['metadata-set'];
-            $id .= 'set'.strlen($set).':'.$set;
+            $id .= 'set' . strlen($set) . ':' . $set;
         }
 
         if (array_key_exists('entityid', $metadata)) {
             $entityid = $metadata['entityid'];
-            $id .= 'set'.strlen($entityid).':'.$entityid;
+            $id .= 'set' . strlen($entityid) . ':' . $entityid;
         }
 
         return $id;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/WarnShortSSOInterval.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/WarnShortSSOInterval.php
index 1d488b9db9..5c5352d1b1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/WarnShortSSOInterval.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Process/WarnShortSSOInterval.php
@@ -2,12 +2,16 @@
 
 namespace SimpleSAML\Module\core\Auth\Process;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+
 /**
  * Give a warning to the user if we receive multiple requests in a short time.
  *
  * @package SimpleSAMLphp
  */
-
 class WarnShortSSOInterval extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
@@ -17,6 +21,7 @@ class WarnShortSSOInterval extends \SimpleSAML\Auth\ProcessingFilter
      * If it is to short a while since, we will show a warning to the user.
      *
      * @param array $state  The state of the response.
+     * @return void
      */
     public function process(&$state)
     {
@@ -42,12 +47,12 @@ public function process(&$state)
             $entityId = 'UNKNOWN';
         }
 
-        \SimpleSAML\Logger::warning('WarnShortSSOInterval: Only '.$timeDelta.
-            ' seconds since last SSO for this user from the SP '.var_export($entityId, true));
+        Logger::warning('WarnShortSSOInterval: Only ' . $timeDelta .
+            ' seconds since last SSO for this user from the SP ' . var_export($entityId, true));
 
         // Save state and redirect
-        $id = \SimpleSAML\Auth\State::saveState($state, 'core:short_sso_interval');
-        $url = \SimpleSAML\Module::getModuleURL('core/short_sso_interval.php');
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
+        $id = Auth\State::saveState($state, 'core:short_sso_interval');
+        $url = Module::getModuleURL('core/short_sso_interval.php');
+        Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Source/AdminPassword.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Source/AdminPassword.php
index 45ce4c2696..ea03893e75 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Source/AdminPassword.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/Source/AdminPassword.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\core\Auth\Source;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+
 /**
  * Authentication source which verifies the password against
  * the 'auth.adminpassword' configuration option.
@@ -28,6 +31,7 @@ public function __construct($info, $config)
         $this->setForcedUsername("admin");
     }
 
+
     /**
      * Attempt to log in using the given username and password.
      *
@@ -46,19 +50,19 @@ protected function login($username, $password)
         assert(is_string($username));
         assert(is_string($password));
 
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
         $adminPassword = $config->getString('auth.adminpassword', '123');
         if ($adminPassword === '123') {
             // We require that the user changes the password
-            throw new \SimpleSAML\Error\Error('NOTSET');
+            throw new Error\Error('NOTSET');
         }
 
         if ($username !== "admin") {
-            throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
+            throw new Error\Error('WRONGUSERPASS');
         }
 
         if (!\SimpleSAML\Utils\Crypto::pwValid($adminPassword, $password)) {
-            throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
+            throw new Error\Error('WRONGUSERPASS');
         }
         return ['user' => ['admin']];
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassBase.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassBase.php
index 8473344666..90104e5f14 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassBase.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassBase.php
@@ -2,6 +2,14 @@
 
 namespace SimpleSAML\Module\core\Auth;
 
+use SAML2\Constants;
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils\HTTP;
+
 /**
  * Helper class for username/password authentication.
  *
@@ -11,7 +19,6 @@
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 abstract class UserPassBase extends \SimpleSAML\Auth\Source
 {
     /**
@@ -29,12 +36,16 @@ abstract class UserPassBase extends \SimpleSAML\Auth\Source
      *
      * A forced username cannot be changed by the user.
      * If this is NULL, we won't force any username.
+     *
+     * @var string|null
      */
     private $forcedUsername;
 
     /**
      * Links to pages from login page.
      * From configuration
+     *
+     * @var array
      */
     protected $loginLinks;
 
@@ -42,6 +53,7 @@ abstract class UserPassBase extends \SimpleSAML\Auth\Source
      * Storage for authsource config option remember.username.enabled
      * loginuserpass.php and loginuserpassorg.php pages/templates use this option to
      * present users with a checkbox to save their username for the next login request.
+     *
      * @var bool
      */
     protected $rememberUsernameEnabled = false;
@@ -50,6 +62,7 @@ abstract class UserPassBase extends \SimpleSAML\Auth\Source
      * Storage for authsource config option remember.username.checked
      * loginuserpass.php and loginuserpassorg.php pages/templates use this option
      * to default the remember username checkbox to checked or not.
+     *
      * @var bool
      */
     protected $rememberUsernameChecked = false;
@@ -60,6 +73,7 @@ abstract class UserPassBase extends \SimpleSAML\Auth\Source
      * users with a checkbox to keep their session alive across
      * different browser sessions (that is, closing and opening the
      * browser again).
+     *
      * @var bool
      */
     protected $rememberMeEnabled = false;
@@ -68,10 +82,12 @@ abstract class UserPassBase extends \SimpleSAML\Auth\Source
      * Storage for general config option session.rememberme.checked.
      * loginuserpass.php page/template uses this option to default
      * the "remember me" checkbox to checked or not.
+     *
      * @var bool
      */
     protected $rememberMeChecked = false;
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -104,15 +120,17 @@ public function __construct($info, &$config)
         }
 
         // get the "remember me" config options
-        $sspcnf = \SimpleSAML\Configuration::getInstance();
+        $sspcnf = Configuration::getInstance();
         $this->rememberMeEnabled = $sspcnf->getBoolean('session.rememberme.enable', false);
         $this->rememberMeChecked = $sspcnf->getBoolean('session.rememberme.checked', false);
     }
 
+
     /**
      * Set forced username.
      *
-     * @param string|NULL $forcedUsername  The forced username.
+     * @param string|null $forcedUsername  The forced username.
+     * @return void
      */
     public function setForcedUsername($forcedUsername)
     {
@@ -122,12 +140,14 @@ public function setForcedUsername($forcedUsername)
 
     /**
      * Return login links from configuration
+     * @return array
      */
     public function getLoginLinks()
     {
         return $this->loginLinks;
     }
 
+
     /**
      * Getter for the authsource config option remember.username.enabled
      * @return bool
@@ -137,6 +157,7 @@ public function getRememberUsernameEnabled()
         return $this->rememberUsernameEnabled;
     }
 
+
     /**
      * Getter for the authsource config option remember.username.checked
      * @return bool
@@ -146,6 +167,7 @@ public function getRememberUsernameChecked()
         return $this->rememberUsernameChecked;
     }
 
+
     /**
      * Check if the "remember me" feature is enabled.
      * @return bool TRUE if enabled, FALSE otherwise.
@@ -155,6 +177,7 @@ public function isRememberMeEnabled()
         return $this->rememberMeEnabled;
     }
 
+
     /**
      * Check if the "remember me" checkbox should be checked.
      * @return bool TRUE if enabled, FALSE otherwise.
@@ -164,6 +187,7 @@ public function isRememberMeChecked()
         return $this->rememberMeChecked;
     }
 
+
     /**
      * Initialize login.
      *
@@ -171,6 +195,7 @@ public function isRememberMeChecked()
      * login page.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -197,11 +222,11 @@ public function authenticate(&$state)
         // doesn't define how the credentials are transferred, but Office 365
         // uses the Authorization header, so we will just use that in lieu of
         // other use cases.
-        if (isset($state['saml:Binding']) && $state['saml:Binding'] === \SAML2\Constants::BINDING_PAOS) {
+        if (isset($state['saml:Binding']) && $state['saml:Binding'] === Constants::BINDING_PAOS) {
             if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
-                \SimpleSAML\Logger::error("ECP AuthnRequest did not contain Basic Authentication header");
+                Logger::error("ECP AuthnRequest did not contain Basic Authentication header");
                 // TODO Return a SOAP fault instead of using the current binding?
-                throw new \SimpleSAML\Error\Error("WRONGUSERPASS");
+                throw new Error\Error("WRONGUSERPASS");
             }
 
             $username = $_SERVER['PHP_AUTH_USER'];
@@ -219,20 +244,21 @@ public function authenticate(&$state)
         }
 
         // Save the $state-array, so that we can restore it after a redirect
-        $id = \SimpleSAML\Auth\State::saveState($state, self::STAGEID);
+        $id = Auth\State::saveState($state, self::STAGEID);
 
         /*
          * Redirect to the login form. We include the identifier of the saved
          * state array as a parameter to the login form.
          */
-        $url = \SimpleSAML\Module::getModuleURL('core/loginuserpass.php');
+        $url = Module::getModuleURL('core/loginuserpass.php');
         $params = ['AuthState' => $id];
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, $params);
+        HTTP::redirectTrustedURL($url, $params);
 
         // The previous function never returns, so this code is never executed.
         assert(false);
     }
 
+
     /**
      * Attempt to log in using the given username and password.
      *
@@ -248,6 +274,7 @@ public function authenticate(&$state)
      */
     abstract protected function login($username, $password);
 
+
     /**
      * Handle login request.
      *
@@ -258,6 +285,7 @@ abstract protected function login($username, $password);
      * @param string $authStateId  The identifier of the authentication state.
      * @param string $username  The username the user wrote.
      * @param string $password  The password the user wrote.
+     * @return void
      */
     public static function handleLogin($authStateId, $username, $password)
     {
@@ -266,13 +294,16 @@ public static function handleLogin($authStateId, $username, $password)
         assert(is_string($password));
 
         // Here we retrieve the state array we saved in the authenticate-function.
-        $state = \SimpleSAML\Auth\State::loadState($authStateId, self::STAGEID);
+        /** @var array $state */
+        $state = Auth\State::loadState($authStateId, self::STAGEID);
 
         // Retrieve the authentication source we are executing.
         assert(array_key_exists(self::AUTHID, $state));
-        $source = \SimpleSAML\Auth\Source::getById($state[self::AUTHID]);
+
+        /** @var \SimpleSAML\Module\core\Auth\UserPassBase|null $source */
+        $source = Auth\Source::getById($state[self::AUTHID]);
         if ($source === null) {
-            throw new \Exception('Could not find authentication source with id '.$state[self::AUTHID]);
+            throw new \Exception('Could not find authentication source with id ' . $state[self::AUTHID]);
         }
 
         /*
@@ -284,17 +315,17 @@ public static function handleLogin($authStateId, $username, $password)
         try {
             $attributes = $source->login($username, $password);
         } catch (\Exception $e) {
-            \SimpleSAML\Logger::stats('Unsuccessful login attempt from '.$_SERVER['REMOTE_ADDR'].'.');
+            Logger::stats('Unsuccessful login attempt from ' . $_SERVER['REMOTE_ADDR'] . '.');
             throw $e;
         }
 
-        \SimpleSAML\Logger::stats('User \''.$username.'\' successfully authenticated from '.$_SERVER['REMOTE_ADDR']);
+        Logger::stats('User \'' . $username . '\' successfully authenticated from ' . $_SERVER['REMOTE_ADDR']);
 
         // Save the attributes we received from the login-function in the $state-array
         assert(is_array($attributes));
         $state['Attributes'] = $attributes;
 
         // Return control to SimpleSAMLphp after successful authentication.
-        \SimpleSAML\Auth\Source::completeAuth($state);
+        Auth\Source::completeAuth($state);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassOrgBase.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassOrgBase.php
index 33168524c8..8271c8809b 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassOrgBase.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Auth/UserPassOrgBase.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\Module\core\Auth;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+
 /**
  * Helper class for username/password/organization authentication.
  *
@@ -13,7 +19,6 @@
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 abstract class UserPassOrgBase extends \SimpleSAML\Auth\Source
 {
     /**
@@ -40,6 +45,8 @@ abstract class UserPassOrgBase extends \SimpleSAML\Auth\Source
      *  'none': Force the user to select the correct organization from the dropdown box.
      *  'allow': Allow the user to enter the organization as part of the username.
      *  'force': Remove the dropdown box.
+     *
+     * @var string
      */
     private $usernameOrgMethod;
 
@@ -47,6 +54,7 @@ abstract class UserPassOrgBase extends \SimpleSAML\Auth\Source
      * Storage for authsource config option remember.username.enabled
      * loginuserpass.php and loginuserpassorg.php pages/templates use this option to
      * present users with a checkbox to save their username for the next login request.
+     *
      * @var bool
      */
     protected $rememberUsernameEnabled = false;
@@ -55,6 +63,7 @@ abstract class UserPassOrgBase extends \SimpleSAML\Auth\Source
      * Storage for authsource config option remember.username.checked
      * loginuserpass.php and loginuserpassorg.php pages/templates use this option
      * to default the remember username checkbox to checked or not.
+     *
      * @var bool
      */
     protected $rememberUsernameChecked = false;
@@ -63,6 +72,7 @@ abstract class UserPassOrgBase extends \SimpleSAML\Auth\Source
      * Storage for authsource config option remember.organization.enabled
      * loginuserpassorg.php page/template use this option to present users
      * with a checkbox to save their organization choice for the next login request.
+     *
      * @var bool
      */
     protected $rememberOrganizationEnabled = false;
@@ -71,6 +81,7 @@ abstract class UserPassOrgBase extends \SimpleSAML\Auth\Source
      * Storage for authsource config option remember.organization.checked
      * loginuserpassorg.php page/template use this option to
      * default the remember organization checkbox to checked or not.
+     *
      * @var bool
      */
     protected $rememberOrganizationChecked = false;
@@ -127,6 +138,7 @@ public function __construct($info, &$config)
      * If unconfigured, the default is 'none'.
      *
      * @param string $usernameOrgMethod  The method which should be used.
+     * @return void
      */
     protected function setUsernameOrgMethod($usernameOrgMethod)
     {
@@ -151,6 +163,7 @@ public function getUsernameOrgMethod()
         return $this->usernameOrgMethod;
     }
 
+
     /**
      * Getter for the authsource config option remember.username.enabled
      * @return bool
@@ -160,6 +173,7 @@ public function getRememberUsernameEnabled()
         return $this->rememberUsernameEnabled;
     }
 
+
     /**
      * Getter for the authsource config option remember.username.checked
      * @return bool
@@ -169,6 +183,7 @@ public function getRememberUsernameChecked()
         return $this->rememberUsernameChecked;
     }
 
+
     /**
      * Getter for the authsource config option remember.organization.enabled
      * @return bool
@@ -178,6 +193,7 @@ public function getRememberOrganizationEnabled()
         return $this->rememberOrganizationEnabled;
     }
 
+
     /**
      * Getter for the authsource config option remember.organization.checked
      * @return bool
@@ -187,6 +203,7 @@ public function getRememberOrganizationChecked()
         return $this->rememberOrganizationChecked;
     }
 
+
     /**
      * Initialize login.
      *
@@ -194,6 +211,7 @@ public function getRememberOrganizationChecked()
      * login page.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -202,11 +220,11 @@ public function authenticate(&$state)
         // We are going to need the authId in order to retrieve this authentication source later
         $state[self::AUTHID] = $this->authId;
 
-        $id = \SimpleSAML\Auth\State::saveState($state, self::STAGEID);
+        $id = Auth\State::saveState($state, self::STAGEID);
 
-        $url = \SimpleSAML\Module::getModuleURL('core/loginuserpassorg.php');
+        $url = Module::getModuleURL('core/loginuserpassorg.php');
         $params = ['AuthState' => $id];
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, $params);
+        Utils\HTTP::redirectTrustedURL($url, $params);
     }
 
 
@@ -251,6 +269,7 @@ abstract protected function getOrganizations();
      * @param string $username  The username the user wrote.
      * @param string $password  The password the user wrote.
      * @param string $organization  The id of the organization the user chose.
+     * @return void
      */
     public static function handleLogin($authStateId, $username, $password, $organization)
     {
@@ -260,13 +279,16 @@ public static function handleLogin($authStateId, $username, $password, $organiza
         assert(is_string($organization));
 
         /* Retrieve the authentication state. */
-        $state = \SimpleSAML\Auth\State::loadState($authStateId, self::STAGEID);
+        /** @var array $state */
+        $state = Auth\State::loadState($authStateId, self::STAGEID);
 
         /* Find authentication source. */
         assert(array_key_exists(self::AUTHID, $state));
-        $source = \SimpleSAML\Auth\Source::getById($state[self::AUTHID]);
+
+        /** @var \SimpleSAML\Module\core\Auth\UserPassOrgBase|null $source */
+        $source = Auth\Source::getById($state[self::AUTHID]);
         if ($source === null) {
-            throw new \Exception('Could not find authentication source with id '.$state[self::AUTHID]);
+            throw new \Exception('Could not find authentication source with id ' . $state[self::AUTHID]);
         }
 
         $orgMethod = $source->getUsernameOrgMethod();
@@ -278,20 +300,30 @@ public static function handleLogin($authStateId, $username, $password, $organiza
             } else {
                 if ($orgMethod === 'force') {
                     /* The organization should be a part of the username, but isn't. */
-                    throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
+                    throw new Error\Error('WRONGUSERPASS');
                 }
             }
         }
 
         /* Attempt to log in. */
-        $attributes = $source->login($username, $password, $organization);
+        try {
+            $attributes = $source->login($username, $password, $organization);
+        } catch (\Exception $e) {
+            Logger::stats('Unsuccessful login attempt from ' . $_SERVER['REMOTE_ADDR'] . '.');
+            throw $e;
+        }
+
+        Logger::stats(
+            'User \'' . $username . '\' at \'' . $organization
+            . '\' successfully authenticated from ' . $_SERVER['REMOTE_ADDR']
+        );
 
         // Add the selected Org to the state
         $state[self::ORGID] = $organization;
         $state['PersistentAuthData'][] = self::ORGID;
 
         $state['Attributes'] = $attributes;
-        \SimpleSAML\Auth\Source::completeAuth($state);
+        Auth\Source::completeAuth($state);
     }
 
 
@@ -301,7 +333,7 @@ public static function handleLogin($authStateId, $username, $password, $organiza
      * This function is used by the login form to get the available organizations.
      *
      * @param string $authStateId  The identifier of the authentication state.
-     * @return array|NULL  Array of organizations. NULL if the user must enter the
+     * @return array|null  Array of organizations. NULL if the user must enter the
      *         organization as part of the username.
      */
     public static function listOrganizations($authStateId)
@@ -309,13 +341,16 @@ public static function listOrganizations($authStateId)
         assert(is_string($authStateId));
 
         /* Retrieve the authentication state. */
-        $state = \SimpleSAML\Auth\State::loadState($authStateId, self::STAGEID);
+        /** @var array $state */
+        $state = Auth\State::loadState($authStateId, self::STAGEID);
 
         /* Find authentication source. */
         assert(array_key_exists(self::AUTHID, $state));
-        $source = \SimpleSAML\Auth\Source::getById($state[self::AUTHID]);
+
+        /** @var \SimpleSAML\Module\core\Auth\UserPassOrgBase|null $source */
+        $source = Auth\Source::getById($state[self::AUTHID]);
         if ($source === null) {
-            throw new \Exception('Could not find authentication source with id '.$state[self::AUTHID]);
+            throw new \Exception('Could not find authentication source with id ' . $state[self::AUTHID]);
         }
 
         $orgMethod = $source->getUsernameOrgMethod();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Controller.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Controller.php
index 8a4563f42d..a9737edb47 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Controller.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Controller.php
@@ -2,9 +2,15 @@
 
 namespace SimpleSAML\Module\core;
 
-use SimpleSAML\Error\Exception;
+use SimpleSAML\Auth;
+use SimpleSAML\Auth\AuthenticationFactory;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
 use SimpleSAML\HTTP\RunnableResponse;
-
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
 
@@ -17,7 +23,6 @@
  */
 class Controller
 {
-
     /** @var \SimpleSAML\Configuration */
     protected $config;
 
@@ -43,9 +48,9 @@ class Controller
      * @throws \Exception
      */
     public function __construct(
-        \SimpleSAML\Configuration $config,
-        \SimpleSAML\Session $session,
-        \SimpleSAML\Auth\AuthenticationFactory $factory
+        Configuration $config,
+        Session $session,
+        AuthenticationFactory $factory
     ) {
         $this->config = $config;
         $this->factory = $factory;
@@ -67,24 +72,30 @@ public function __construct(
     public function account($as)
     {
         if (!array_key_exists($as, $this->sources)) {
-            throw new Exception('Invalid authentication source');
+            throw new Error\Exception('Invalid authentication source');
         }
 
         $auth = $this->factory->create($as);
         if (!$auth->isAuthenticated()) {
             // not authenticated, start auth with specified source
-            return new RedirectResponse(\SimpleSAML\Module::getModuleURL('core/login/'.urlencode($as)));
+            return new RedirectResponse(Module::getModuleURL('core/login/' . urlencode($as)));
         }
 
         $attributes = $auth->getAttributes();
+        
+        $session = Session::getSessionFromRequest();
 
-        $t = new \SimpleSAML\XHTML\Template($this->config, 'auth_status.twig', 'attributes');
+        $t = new Template($this->config, 'auth_status.twig', 'attributes');
+        $l = $t->getLocalization();
+        $l->addDomain($l->getLocaleDir(), 'attributes');
         $t->data['header'] = '{status:header_saml20_sp}';
         $t->data['attributes'] = $attributes;
         $t->data['nameid'] = !is_null($auth->getAuthData('saml:sp:NameID'))
             ? $auth->getAuthData('saml:sp:NameID')
             : false;
-        $t->data['logouturl'] = \SimpleSAML\Module::getModuleURL('core/logout/'.urlencode($as));
+        $t->data['authData'] = $auth->getAuthDataArray();
+        $t->data['trackid'] = $session->getTrackID();
+        $t->data['logouturl'] = Module::getModuleURL('core/logout/' . urlencode($as));
         $t->data['remaining'] = $this->session->getAuthData($as, 'Expire') - time();
         $t->setStatusCode(200);
 
@@ -118,37 +129,39 @@ public function login(Request $request, $as = null)
         }
 
         if ($as === null) { // no authentication source specified
-            $t = new \SimpleSAML\XHTML\Template($this->config, 'core:login.twig');
-            $t->data['loginurl'] = \SimpleSAML\Utils\Auth::getAdminLoginURL();
+            $t = new Template($this->config, 'core:login.twig');
+            $t->data['loginurl'] = Utils\Auth::getAdminLoginURL();
             $t->data['sources'] = $this->sources;
             return $t;
         }
 
         // auth source defined, check if valid
         if (!array_key_exists($as, $this->sources)) {
-            throw new Exception('Invalid authentication source');
+            throw new Error\Exception('Invalid authentication source');
         }
 
         // at this point, we have a valid auth source selected, start auth
         $auth = $this->factory->create($as);
         $as = urlencode($as);
 
-        if ($request->get(\SimpleSAML\Auth\State::EXCEPTION_PARAM, false) !== false) {
+        if ($request->get(Auth\State::EXCEPTION_PARAM, false) !== false) {
             // This is just a simple example of an error
 
-            $state = \SimpleSAML\Auth\State::loadExceptionState();
-            assert(array_key_exists(\SimpleSAML\Auth\State::EXCEPTION_DATA, $state));
-            $e = $state[\SimpleSAML\Auth\State::EXCEPTION_DATA];
+            /** @var array $state */
+            $state = Auth\State::loadExceptionState();
+
+            assert(array_key_exists(Auth\State::EXCEPTION_DATA, $state));
+            $e = $state[Auth\State::EXCEPTION_DATA];
 
             throw $e;
         }
 
         if ($auth->isAuthenticated()) {
-            return new RedirectResponse(\SimpleSAML\Module::getModuleURL('core/account/'.$as));
+            return new RedirectResponse(Module::getModuleURL('core/account/' . $as));
         }
 
         // we're not logged in, start auth
-        $url = \SimpleSAML\Module::getModuleURL('core/login/'.$as);
+        $url = Module::getModuleURL('core/login/' . $as);
         $params = array(
             'ErrorURL' => $url,
             'ReturnTo' => $url,
@@ -168,7 +181,7 @@ public function login(Request $request, $as = null)
      */
     public function logout($as)
     {
-        $auth = new \SimpleSAML\Auth\Simple($as);
-        return new RunnableResponse([$auth, 'logout'], [$this->config->getBasePath().'logout.php']);
+        $auth = new Auth\Simple($as);
+        return new RunnableResponse([$auth, 'logout'], [$this->config->getBasePath() . 'logout.php']);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/File.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/File.php
index cac817c83b..30a97e1722 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/File.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/File.php
@@ -2,12 +2,14 @@
 
 namespace SimpleSAML\Module\core\Stats\Output;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+
 /**
  * Statistics logger that writes to a set of log files
  *
  * @package SimpleSAMLphp
  */
-
 class File extends \SimpleSAML\Stats\Output
 {
     /**
@@ -18,36 +20,40 @@ class File extends \SimpleSAML\Stats\Output
 
     /**
      * The file handle for the current file.
-     * @var resource|null|false
+     * @var resource|null
      */
     private $file = null;
 
     /**
      * The current file date.
-     * @var string
+     * @var string|null
      */
     private $fileDate = null;
 
+
     /**
      * Initialize the output.
      *
      * @param \SimpleSAML\Configuration $config  The configuration for this output.
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
-        $this->logDir = $config->getPathValue('directory');
-        if ($this->logDir === null) {
+        $logDir = $config->getPathValue('directory');
+        if ($logDir === null) {
             throw new \Exception('Missing "directory" option for core:File');
         }
-        if (!is_dir($this->logDir)) {
-            throw new \Exception('Could not find log directory: '.var_export($this->logDir, true));
+        if (!is_dir($logDir)) {
+            throw new \Exception('Could not find log directory: ' . var_export($logDir, true));
         }
+        $this->logDir = $logDir;
     }
 
+
     /**
      * Open a log file.
      *
      * @param string $date  The date for the log file.
+     * @return void
      */
     private function openLog($date)
     {
@@ -58,22 +64,25 @@ private function openLog($date)
             $this->file = null;
         }
 
-        $fileName = $this->logDir.'/'.$date.'.log';
-        $this->file = @fopen($fileName, 'a');
-        if ($this->file === false) {
-            throw new \SimpleSAML\Error\Exception('Error opening log file: '.var_export($fileName, true));
+        $fileName = $this->logDir . '/' . $date . '.log';
+        $fh = @fopen($fileName, 'a');
+        if ($fh === false) {
+            throw new Error\Exception('Error opening log file: ' . var_export($fileName, true));
         }
 
         // Disable output buffering
-        stream_set_write_buffer($this->file, 0);
+        stream_set_write_buffer($fh, 0);
 
+        $this->file = $fh;
         $this->fileDate = $date;
     }
 
+
     /**
      * Write a stats event.
      *
      * @param array $data  The event.
+     * @return void
      */
     public function emit(array $data)
     {
@@ -82,7 +91,7 @@ public function emit(array $data)
         $time = $data['time'];
         $milliseconds = (int) (($time - (int) $time) * 1000);
 
-        $timestamp = gmdate('Y-m-d\TH:i:s', $time).sprintf('.%03dZ', $milliseconds);
+        $timestamp = gmdate('Y-m-d\TH:i:s', $time) . sprintf('.%03dZ', $milliseconds);
 
         $outDate = substr($timestamp, 0, 10); // The date-part of the timstamp
 
@@ -90,7 +99,8 @@ public function emit(array $data)
             $this->openLog($outDate);
         }
 
-        $line = $timestamp.' '.json_encode($data)."\n";
+        $line = $timestamp . ' ' . json_encode($data) . "\n";
+        /** @psalm-suppress PossiblyNullArgument */
         fwrite($this->file, $line);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/Log.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/Log.php
index e3eff86663..0175c2328a 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/Log.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Stats/Output/Log.php
@@ -2,42 +2,48 @@
 
 namespace SimpleSAML\Module\core\Stats\Output;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+
 /**
  * Statistics logger that writes to the default logging handler.
  *
  * @package SimpleSAMLphp
  */
-
 class Log extends \SimpleSAML\Stats\Output
 {
     /**
      * The logging function we should call.
-     * @var callback
+     * @var callable
      */
     private $logger;
 
+
     /**
      * Initialize the output.
      *
      * @param \SimpleSAML\Configuration $config  The configuration for this output.
+     * @throws \Exception
      */
-    public function __construct(\SimpleSAML\Configuration $config)
+    public function __construct(Configuration $config)
     {
         $logLevel = $config->getString('level', 'notice');
-        $this->logger = ['\SimpleSAML\Logger', $logLevel];
+        $this->logger = [Logger::class, $logLevel];
         if (!is_callable($this->logger)) {
-            throw new \Exception('Invalid log level: '.var_export($logLevel, true));
+            throw new \Exception('Invalid log level: ' . var_export($logLevel, true));
         }
     }
 
+
     /**
      * Write a stats event.
      *
-     * @param string $data  The event (as a JSON string).
+     * @param array $data  The event
+     * @return void
      */
     public function emit(array $data)
     {
         $str_data = json_encode($data);
-        call_user_func($this->logger, 'EVENT '.$str_data);
+        call_user_func($this->logger, 'EVENT ' . $str_data);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Storage/SQLPermanentStorage.php b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Storage/SQLPermanentStorage.php
index 4360d5e84a..1ff18f8ab3 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Storage/SQLPermanentStorage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/lib/Storage/SQLPermanentStorage.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\core\Storage;
 
+use PDO;
+use SimpleSAML\Configuration;
+
 /**
  * SQLPermanentStorage
  *
@@ -14,34 +17,41 @@
 
 class SQLPermanentStorage
 {
+    /** @var \PDO */
     private $db;
 
+
+    /**
+     * @param string $name
+     * @param \SimpleSAML\Configuration|null $config
+     * @throws \Exception
+     */
     public function __construct($name, $config = null)
     {
         if (is_null($config)) {
-            $config = \SimpleSAML\Configuration::getInstance();
+            $config = Configuration::getInstance();
         }
 
-        $datadir = $config->getPathValue('datadir', 'data/');
+        $datadir = $config->getPathValue('datadir', 'data/') ?: 'data/';
 
         if (!is_dir($datadir)) {
-            throw new \Exception('Data directory ['.$datadir.'] does not exist');
+            throw new \Exception('Data directory [' . $datadir . '] does not exist');
         } elseif (!is_writable($datadir)) {
-            throw new \Exception('Data directory ['.$datadir.'] is not writable');
+            throw new \Exception('Data directory [' . $datadir . '] is not writable');
         }
 
-        $sqllitedir = $datadir.'sqllite/';
+        $sqllitedir = $datadir . 'sqllite/';
         if (!is_dir($sqllitedir)) {
             mkdir($sqllitedir);
         }
 
-        $dbfile = 'sqlite:'.$sqllitedir.$name.'.sqlite';
-        if ($this->db = new \PDO($dbfile)) {
+        $dbfile = 'sqlite:' . $sqllitedir . $name . '.sqlite';
+        if ($this->db = new PDO($dbfile)) {
             $q = @$this->db->query('SELECT key1 FROM data LIMIT 1');
             if ($q === false) {
                 $this->db->exec('
 		    CREATE TABLE data (
-                        key1 text, 
+                        key1 text,
                         key2 text,
                         type text,
                         value text,
@@ -53,10 +63,19 @@ public function __construct($name, $config = null)
                 ');
             }
         } else {
-            throw new \Exception('Error creating SQL lite database ['.$dbfile.'].');
+            throw new \Exception('Error creating SQL lite database [' . $dbfile . '].');
         }
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @param mixed $value
+     * @param int|null $duration
+     * @return void
+     */
     public function set($type, $key1, $key2, $value, $duration = null)
     {
         if ($this->exists($type, $key1, $key2)) {
@@ -66,45 +85,72 @@ public function set($type, $key1, $key2, $value, $duration = null)
         }
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @param mixed $value
+     * @param int|null $duration
+     * @return array
+     */
     private function insert($type, $key1, $key2, $value, $duration = null)
     {
         $expire = is_null($duration) ? null : (time() + $duration);
 
-        $query = "INSERT INTO data (key1, key2, type, created, updated, expire, value)".
+        $query = "INSERT INTO data (key1, key2, type, created, updated, expire, value)" .
             " VALUES(:key1, :key2, :type, :created, :updated, :expire, :value)";
         $prepared = $this->db->prepare($query);
         $data = [':key1' => $key1, ':key2' => $key2,
             ':type' => $type, ':created' => time(),
             ':updated' => time(), ':expire' => $expire,
-            ':value' => serialize($value)];
+            ':value' => serialize($value)
+        ];
         $prepared->execute($data);
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
         return $results;
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @param mixed $value
+     * @param int|null $duration
+     * @return array
+     */
     private function update($type, $key1, $key2, $value, $duration = null)
     {
         $expire = is_null($duration) ? null : (time() + $duration);
 
-        $query = "UPDATE data SET updated = :updated, value = :value, ".
+        $query = "UPDATE data SET updated = :updated, value = :value, " .
             "expire = :expire WHERE key1 = :key1 AND key2 = :key2 AND type = :type";
         $prepared = $this->db->prepare($query);
         $data = [':key1' => $key1, ':key2' => $key2,
             ':type' => $type, ':updated' => time(),
-            ':expire' => $expire, ':value' => serialize($value)];
+            ':expire' => $expire, ':value' => serialize($value)
+        ];
         $prepared->execute($data);
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
         return $results;
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @return array|null
+     */
     public function get($type = null, $key1 = null, $key2 = null)
     {
         $conditions = $this->getCondition($type, $key1, $key2);
-        $query = 'SELECT * FROM data WHERE '.$conditions;
+        $query = 'SELECT * FROM data WHERE ' . $conditions;
 
         $prepared = $this->db->prepare($query);
         $prepared->execute();
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
         if (count($results) !== 1) {
             return null;
         }
@@ -114,8 +160,13 @@ public function get($type = null, $key1 = null, $key2 = null)
         return $res;
     }
 
-    /*
+    /**
      * Return the value directly (not in a container)
+     *
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @return array|null
      */
     public function getValue($type = null, $key1 = null, $key2 = null)
     {
@@ -126,26 +177,40 @@ public function getValue($type = null, $key1 = null, $key2 = null)
         return $res['value'];
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @return bool
+     */
     public function exists($type, $key1, $key2)
     {
         $query = 'SELECT * FROM data WHERE type = :type AND key1 = :key1 AND key2 = :key2 LIMIT 1';
         $prepared = $this->db->prepare($query);
         $data = [':type' => $type, ':key1' => $key1, ':key2' => $key2];
         $prepared->execute($data);
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
         return (count($results) == 1);
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @return array|false
+     */
     public function getList($type = null, $key1 = null, $key2 = null)
     {
         $conditions = $this->getCondition($type, $key1, $key2);
-        $query = 'SELECT * FROM data WHERE '.$conditions;
+        $query = 'SELECT * FROM data WHERE ' . $conditions;
         $prepared = $this->db->prepare($query);
         $prepared->execute();
 
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
-        if (count($results) == 0) {
-            return null;
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
+        if ($results === false) {
+            return false;
         }
 
         foreach ($results as $key => $value) {
@@ -154,6 +219,15 @@ public function getList($type = null, $key1 = null, $key2 = null)
         return $results;
     }
 
+
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @param string $whichKey
+     * @throws \Exception
+     * @return array|null
+     */
     public function getKeys($type = null, $key1 = null, $key2 = null, $whichKey = 'type')
     {
         if (!in_array($whichKey, ['key1', 'key2', 'type'], true)) {
@@ -161,11 +235,11 @@ public function getKeys($type = null, $key1 = null, $key2 = null, $whichKey = 't
         }
 
         $conditions = $this->getCondition($type, $key1, $key2);
-        $query = 'SELECT DISTINCT :whichKey FROM data WHERE '.$conditions;
+        $query = 'SELECT DISTINCT :whichKey FROM data WHERE ' . $conditions;
         $prepared = $this->db->prepare($query);
         $data = ['whichKey' => $whichKey];
         $prepared->execute($data);
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
 
         if (count($results) == 0) {
             return null;
@@ -178,16 +252,26 @@ public function getKeys($type = null, $key1 = null, $key2 = null, $whichKey = 't
         return $resarray;
     }
 
+    /**
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @return bool
+     */
     public function remove($type, $key1, $key2)
     {
         $query = 'DELETE FROM data WHERE type = :type AND key1 = :key1 AND key2 = :key2';
         $prepared = $this->db->prepare($query);
         $data = [':type' => $type, ':key1' => $key1, ':key2' => $key2];
         $prepared->execute($data);
-        $results = $prepared->fetchAll(\PDO::FETCH_ASSOC);
+        $results = $prepared->fetchAll(PDO::FETCH_ASSOC);
         return (count($results) == 1);
     }
 
+
+    /**
+     * @return int
+     */
     public function removeExpired()
     {
         $query = "DELETE FROM data WHERE expire IS NOT NULL AND expire < :expire";
@@ -199,21 +283,26 @@ public function removeExpired()
 
     /**
      * Create a SQL condition statement based on parameters
+     *
+     * @param string $type
+     * @param mixed $key1
+     * @param mixed $key2
+     * @return string
      */
     private function getCondition($type = null, $key1 = null, $key2 = null)
     {
         $conditions = [];
         if (!is_null($type)) {
-            $conditions[] = "type = ".$this->db->quote($type);
+            $conditions[] = "type = " . $this->db->quote($type);
         }
         if (!is_null($key1)) {
-            $conditions[] = "key1 = ".$this->db->quote($key1);
+            $conditions[] = "key1 = " . $this->db->quote($key1);
         }
         if (!is_null($key2)) {
-            $conditions[] = "key2 = ".$this->db->quote($key2);
+            $conditions[] = "key2 = " . $this->db->quote($key2);
         }
 
-        $conditions[] = "(expire IS NULL OR expire >= ".time().")";
+        $conditions[] = "(expire IS NULL OR expire >= " . time() . ")";
         return join(' AND ', $conditions);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/locales/pl/LC_MESSAGES/core.po b/vendor/simplesamlphp/simplesamlphp/modules/core/locales/pl/LC_MESSAGES/core.po
index fadeeb468d..326fa1dba5 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/locales/pl/LC_MESSAGES/core.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/locales/pl/LC_MESSAGES/core.po
@@ -94,7 +94,7 @@ msgid "{core:frontpage:loggedin_as_admin}"
 msgstr "Jesteś zalogowany jako administrator"
 
 msgid "{core:frontpage:auth}"
-msgstr "Autentykacja"
+msgstr "Uwierzytelnianie"
 
 msgid "{core:frontpage:show_metadata}"
 msgstr "Wyświetl metadane"
@@ -278,7 +278,7 @@ msgid "Shibboleth 1.3 SP example - test logging in through your Shib IdP"
 msgstr "Shibboleth 1.3 SP - przykład - test logowania przez Twoje Shib IdP"
 
 msgid "Authentication"
-msgstr "Autentykacja"
+msgstr "Uwierzytelnianie"
 
 msgid "Show metadata"
 msgstr "Wyświetl metadane"
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/authsource_list.twig b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/authsource_list.twig
new file mode 100644
index 0000000000..a3654e915d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/authsource_list.twig
@@ -0,0 +1,11 @@
+{% set pagetitle = 'Test Authentication Sources'|trans %}
+{% extends "base.twig" %}
+
+{% block content %}
+    <h2>{{ pagetitle }} </h2>
+    <ul>
+    {% for key, name in sources %}
+        <li><a href="?as={{ name|escape('url') }}">{{ name }}</a></li>
+    {% endfor %}
+    </ul>
+{% endblock %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/cardinality_error.twig b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/cardinality_error.twig
new file mode 100644
index 0000000000..30b864c0ff
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/cardinality_error.twig
@@ -0,0 +1,25 @@
+{% set pagetitle = 'Incorrect Attributes' | trans %}
+{% extends "base.twig" %}
+{% block content %}
+
+<h1>{{ pagetitle }}</h1>
+
+<p>{% trans 'One or more of the attributes supplied by your identity provider did not contain the expected number of values.' %}</p>
+
+<h3>{% trans 'The problematic attribute(s) are:' %}</h3>
+
+<dl class="cardinalityErrorAttributes">
+{% for attr,issues in cardinalityErrorAttributes %}
+  {% set got = issues[0] %}
+  {% set want = issues[1] %}
+
+  <dt>{{ attr }}</dt>
+  <dd>{% trans %}got {{ got }} values, want {{ want }}{% endtrans %}</dd>
+{% endfor %}
+</dl>
+
+{% if LogoutURL is defined %}
+    <p><a href="{{ LogoutURL }}">{% trans 'Logout' %}</a></p>
+{% endif %}
+
+{% endblock %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/frontpage_config.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/frontpage_config.tpl.php
index 10f7463cf3..8227e8cd0c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/frontpage_config.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/frontpage_config.tpl.php
@@ -5,7 +5,7 @@
 
 ?>
 
-<!-- 
+<!--
 <div id="tabdiv">
 <ul>
     <li><a href="#welcome"><?php echo $this->t('{core:frontpage:welcome}'); ?></a></li>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.php b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.tpl.php
similarity index 98%
rename from vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.php
rename to vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.tpl.php
index cfbb1cf7ba..7dbeab9ad7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.tpl.php
@@ -89,7 +89,7 @@ class="float-l erroricon" style="margin: 15px" alt=""/>
             ?>
             <tr>
                 <td><label for="password"><?php echo $this->t('{login:password}'); ?></label></td>
-                <td><input id="password" type="password" tabindex="2" name="password" /></td>
+                <td><input id="password" type="password" tabindex="2" name="password" autocomplete="current-password" /></td>
             <?php
             if ($this->data['rememberMeEnabled']) {
                 // display the remember me checkbox (keep me logged in)
@@ -168,7 +168,7 @@ class="float-l erroricon" style="margin: 15px" alt=""/>
             <tr id="submit">
                 <td class="loginicon"></td><td></td>
                 <td>
-                    <button id="submit_button" class="btn" tabindex="6">
+                    <button id="submit_button" class="btn" tabindex="6" type="submit">
                         <?php echo $this->t('{login:login_button}'); ?>
                     </button>
                 </td>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.twig b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.twig
index 59529528bd..4c383ac1fa 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/loginuserpass.twig
@@ -7,6 +7,15 @@
 {% endblock %}
 
 {% block content %}
+    {%- if not isProduction %}
+
+    <div class="message-box warning">
+      {% trans %}You are now accessing a pre-production system. This authentication setup
+      {#- #} is for testing and pre-production verification only. If someone sent you
+      {#- #} a link that pointed you here, and you are not <i>a tester</i> you
+      {#- #} probably got the wrong link, and should <b>not be here</b>.{% endtrans %}
+    </div>
+    {% endif -%}
     {% if errorcode -%}
     <div class="pure-g">
         <div class="pure-u-1">
@@ -53,8 +62,8 @@
 
                 <div class="pure-control-group">
                     <label for="password">{{ 'Password'|trans}}</label>
-                    <input id="password" type="password" tabindex="2" name="password" class="edge"
-                    {%- if forceUsername or username %} autofocus {% endif %} />
+                    <input id="password" type="password" tabindex="2" name="password" class="edge" autocomplete="current-password"
+                    {%- if forceUsername or username %} autofocus {% endif %} >
 
                 {% if rememberMeEnabled -%}
                 </div>
@@ -105,7 +114,7 @@
 
             <button class="pure-button pure-button-red pure-input-1-2 pure-input-sm-1-1 right" id="submit_button"
                     type="submit" tabindex="6" data-processing="{% trans %}Processing...{% endtrans %}">
-              {% trans %}Log in{% endtrans %}
+              {% trans %}Login{% endtrans %}
             </button>
         </form>
     </div><!--center-->
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.php b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.php
rename to vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.twig b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.twig
index 7c9e415d07..a1baa200c0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe-wrapper.twig
@@ -1,16 +1,2 @@
-
 {% set pagetitle = '{logout:progress}'|trans %}
-{% extends "base.twig" %}
-
-{% block content %}
-    {# pretty arbitrary height, but should have enough safety margins for most cases #}
-    {% set iframeHeight = (25 + (SPs|length * 4)) %}
-
-    <iframe style="width:100%; height: {{ iframeHeight }}em; border:0;" src="logout-iframe.php?type=embed&id={{ auth_state|escape('url') }}"></iframe>
-
-    {% for assocId, sp in SPs %}
-    {% if attribute(sp, 'core:Logout-IFrame:State') == 'inprogress' %}
-    <iframe style="width:0; height:0; border:0;" src="{{ attribute(sp, 'core:Logout-IFrame:URL')|escape('html') }}</iframe>
-    {% endif %}
-    {% endfor %}
-{% endblock %}
+{% extends "@core/logout-iframe.twig" %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.php b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.php
rename to vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.twig b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.twig
new file mode 100644
index 0000000000..e3959ba628
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/logout-iframe.twig
@@ -0,0 +1,123 @@
+{% set pagetitle = 'Logging out...'|trans %}
+{% extends "base.twig" %}
+
+{% block preload %}
+
+    <link rel="preload" href="{{ asset('js/logout.js') }}" as="script">
+    {%- if type != "init" %}
+      {%- set content = '2' %}
+      {%- if remaining_services|length == 0 %}
+        {%- set content = '0; url=logout-iframe-done.php?id=' ~ auth_state %}
+      {%- endif %}
+
+    <meta http-equiv="refresh" content="{{ content }}">
+    {% endif %}
+{% endblock preload %}
+
+{% block content %}
+
+    <h1>{{ pagetitle }}</h1>
+  {%- if terminated_service %}
+    {%- set SP = terminated_service['name']|translateFromArray|default('the service'|trans)|e %}
+
+    <p>{% trans %}You are now successfully logged out from {{ SP }}.{% endtrans %}</p>
+  {%- endif %}
+  {%- if remaining_services %}
+    {%- set failed = false  %}
+    {%- set remaining = 0 %}
+    {%- if remaining_services|length > 0 %}
+
+    <p>{% trans %}You are also logged in on these services:{% endtrans %}</p>
+    {%- endif %}
+
+    <div class="custom-restricted-width">
+      <ul class="fa-ul">
+    {%- for key, sp in remaining_services %}
+      {%- set timeout = 5 %}
+      {%- set name = sp['metadata']['name']|translateFromArray|default(sp['entityID']) %}
+      {%- set icon = 'circle-o-notch'  %}
+      {%- if sp['status'] == 'completed' %}
+        {%- set icon = 'check-circle' %}
+      {%- elseif sp['status'] == 'failed' %}
+        {%- set icon = 'exclamation-circle' %}
+        {%- set failed = true %}
+      {%- elseif (sp['status'] == 'onhold' or sp['status'] == 'inprogress') %}
+        {%- set remaining = remaining + 1 %}
+      {%- endif %}
+      {%- if type == 'nojs' and sp['status'] == 'inprogress' %}
+        {%- set icon = icon ~ ' fa-spin' %}
+      {%- endif %}
+
+        <li id="sp-{{ key }}" data-id="{{ key }}" data-status="{{ sp['status'] }}"
+            {#- #} data-timeout="{{ timeout }}">
+          <span class="fa-li"><i id="icon-{{ key }}" class="fa fa-{{ icon }}"></i></span>
+          {{ name }}
+      {%- if sp['status'] != 'completed' and sp['status'] != 'failed' %}
+        {%- if type == 'nojs' %}
+
+          <iframe id="iframe-{{ key }}" class="hidden" src="{{ sp['logoutURL'] }}"></iframe>
+        {%- else %}
+
+          <iframe id="iframe-{{ key }}" class="hidden" data-url="{{ sp['logoutURL'] }}"></iframe>
+        {%- endif %}
+      {%- else %}
+        {%- if sp['status'] == 'failed' %}
+          ({% trans %}logout is not supported{% endtrans %})
+        {%- endif %}
+      {%- endif %}
+
+        </li>
+    {%- endfor %}
+
+      </ul>
+    </div>
+    <br>
+    <div id="error-message"{% if not failed or type == 'init' %} class="hidden"{% endif %}>
+      <div class="message-box error">
+        {% trans %}Unable to log out of one or more services. To ensure that all your
+        {#- #} sessions are closed, you are encouraged to <i>close your webbrowser</i>.{% endtrans %}
+      </div>
+    </div>
+    <form id="error-form" action="logout-iframe-done.php"
+          {%- if (not failed or type == 'init') and remaining %} class="hidden"{% endif %}>
+      <input type="hidden" name="id" value="{{ auth_state }}">
+      <button type="submit" id="btn-continue" name="ok" class="pure-button pure-button-red">
+        {%- trans %}Continue{% endtrans -%}
+      </button>
+    </form>
+    <div id="original-actions"{% if type != 'init' %} class="hidden"{% endif %}>
+      <p>{% trans %}Do you want to logout from all the services above?{% endtrans %}</p>
+      <div class="pure-button-group two-elements">
+        <form id="startform" action="logout-iframe.php">
+          <input type="hidden" name="id" value="{{ auth_state }}">
+          <noscript>
+            <input type="hidden" name="type" value="nojs" id="logout-type-selector">
+          </noscript>
+          <button type="submit" id="btn-all" name="ok" class="pure-button pure-button-red">
+            {%- trans %}Yes, all services{% endtrans -%}
+          </button>
+        </form>
+        <form action="logout-iframe-done.php">
+          <input type="hidden" name="id" value="{{ auth_state }}">
+          <input type="hidden" name="cancel" value="">
+          <button id="btn-cancel" class="pure-button" type="submit">
+            {%- if terminated_service %}{% trans %}No, only {{ SP }}{% endtrans %}
+            {%- else %}{% trans %}No{% endtrans %}{% endif -%}
+          </button>
+        </form>
+      </div>
+    </div>
+  {%- else %}
+    <form id="error-form" action="logout-iframe-done.php">
+      <input type="hidden" name="id" value="{{ auth_state }}">
+      <button type="submit" id="btn-continue" name="ok" class="pure-button pure-button-red">
+        {%- trans %}Continue{% endtrans -%}
+      </button>
+    </form>
+  {% endif %}
+{% endblock %}
+
+{% block postload %}
+
+    <script src="{{ asset('js/logout.js') }}"></script>
+{% endblock postload %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/short_sso_interval.php b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/short_sso_interval.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/modules/core/templates/short_sso_interval.php
rename to vendor/simplesamlphp/simplesamlphp/modules/core/templates/short_sso_interval.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/show_metadata.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/show_metadata.tpl.php
index f217540c77..2a23d6e91d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/templates/show_metadata.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/templates/show_metadata.tpl.php
@@ -7,9 +7,9 @@
              alt="Copy to clipboard" />
     </button>
     <pre id="metadata">
-$metadata['<?php echo $this->data['m']['metadata-index']; unset($this->data['m']['metadata-index']) ?>'] => <?php
+$metadata['<?php echo $this->data['m']['metadata-index']; unset($this->data['m']['metadata-index']) ?>'] = <?php
     echo htmlspecialchars(var_export($this->data['m'], true));
-?>
+?>;
     </pre>
 </div>
 <script type="text/javascript">
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/authenticate.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/authenticate.php
index e1484e1fed..4658cb151c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/authenticate.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/authenticate.php
@@ -14,13 +14,15 @@
 $as = new \SimpleSAML\Auth\Simple($asId);
 
 if (array_key_exists('logout', $_REQUEST)) {
-    $as->logout($config->getBasePath().'logout.php');
+    $as->logout($config->getBasePath() . 'logout.php');
 }
 
 if (array_key_exists(\SimpleSAML\Auth\State::EXCEPTION_PARAM, $_REQUEST)) {
     // This is just a simple example of an error
 
+    /** @var array $state */
     $state = \SimpleSAML\Auth\State::loadExceptionState();
+
     assert(array_key_exists(\SimpleSAML\Auth\State::EXCEPTION_DATA, $state));
     $e = $state[\SimpleSAML\Auth\State::EXCEPTION_DATA];
 
@@ -45,5 +47,5 @@
 $t->data['attributes'] = $attributes;
 $t->data['authData'] = $authData;
 $t->data['nameid'] = !is_null($as->getAuthData('saml:sp:NameID')) ? $as->getAuthData('saml:sp:NameID') : false;
-$t->data['logouturl'] = \SimpleSAML\Utils\HTTP::getSelfURLNoQuery().'?as='.urlencode($asId).'&logout';
+$t->data['logouturl'] = \SimpleSAML\Utils\HTTP::getSelfURLNoQuery() . '?as=' . urlencode($asId) . '&logout';
 $t->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/cardinality_error.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/cardinality_error.php
index b3a3e5b99c..cb76a072ef 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/cardinality_error.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/cardinality_error.php
@@ -10,11 +10,12 @@
     throw new \SimpleSAML\Error\BadRequest('Missing required StateId query parameter.');
 }
 $id = $_REQUEST['StateId'];
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($id, 'core:cardinality');
 $session = \SimpleSAML\Session::getSessionFromRequest();
 
-\SimpleSAML\Logger::stats('core:cardinality:error '.$state['Destination']['entityid'].' '.$state['saml:sp:IdP'].
-    ' '.implode(',', array_keys($state['core:cardinality:errorAttributes'])));
+\SimpleSAML\Logger::stats('core:cardinality:error ' . $state['Destination']['entityid']
+    . ' ' . $state['saml:sp:IdP'] . ' ' . implode(',', array_keys($state['core:cardinality:errorAttributes'])));
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
 $t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:cardinality_error.tpl.php');
@@ -23,7 +24,7 @@
     $t->data['LogoutURL'] = \SimpleSAML\Module::getModuleURL(
         'core/authenticate.php',
         ['as' => $state['Source']['auth']]
-    )."&logout";
+    ) . "&logout";
 }
 header('HTTP/1.0 403 Forbidden');
 $t->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_config.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_config.php
index 172b75c4cb..2ede138cdc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_config.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_config.php
@@ -36,12 +36,12 @@
 $links_federation = [];
 
 $links_config[] = [
-    'href' => \SimpleSAML\Utils\HTTP::getBaseURL().'admin/hostnames.php',
+    'href' => \SimpleSAML\Utils\HTTP::getBaseURL() . 'admin/hostnames.php',
     'text' => '{core:frontpage:link_diagnostics}'
 ];
 
 $links_config[] = [
-    'href' => \SimpleSAML\Utils\HTTP::getBaseURL().'admin/phpinfo.php',
+    'href' => \SimpleSAML\Utils\HTTP::getBaseURL() . 'admin/phpinfo.php',
     'text' => '{core:frontpage:link_phpinfo}'
 ];
 
@@ -53,7 +53,7 @@
     'federation' => &$links_federation,
 ];
 \SimpleSAML\Module::callHooks('frontpage', $allLinks);
-\SimpleSAML\Logger::debug('The "frontpage" hook has been deprecated for the configuration page. Implement the '.
+\SimpleSAML\Logger::debug('The "frontpage" hook has been deprecated for the configuration page. Implement the ' .
     '"configpage" hook instead.');
 
 // Check for updates. Store the remote result in the session so we
@@ -67,7 +67,7 @@
 
         if (!$latest) {
             $api_url = 'https://api.github.com/repos/simplesamlphp/simplesamlphp/releases';
-            $ch = curl_init($api_url.'/latest');
+            $ch = curl_init($api_url . '/latest');
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
             curl_setopt($ch, CURLOPT_USERAGENT, 'SimpleSAMLphp');
             curl_setopt($ch, CURLOPT_TIMEOUT, 2);
@@ -75,8 +75,9 @@
             curl_setopt($ch, CURLOPT_PROXYUSERPWD, $config->getValue('proxy.auth', null));
             $response = curl_exec($ch);
 
-            if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
-                $latest = json_decode($response, true);
+            if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) === 200) {
+                /** @psalm-suppress InvalidScalarArgument */
+                $latest = json_decode(strval($response), true);
                 $session->setData("core:latest_simplesamlphp_version", "version", $latest);
             }
             curl_close($ch);
@@ -122,8 +123,8 @@
 $funcmatrix = [];
 $funcmatrix[] = [
     'required' => 'required',
-    'descr' => 'PHP Version >= 5.5. You run: '.phpversion(),
-    'enabled' => version_compare(phpversion(), '5.5', '>=')
+    'descr' => 'PHP Version >= 5.6. You run: ' . phpversion(),
+    'enabled' => version_compare(phpversion(), '5.6', '>=')
 ];
 foreach ($functionchecks as $func => $descr) {
     $funcmatrix[] = ['descr' => $descr[1], 'required' => $descr[0], 'enabled' => function_exists($func)];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_federation.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_federation.php
index 267a54a53f..72e98ea8cd 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_federation.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/frontpage_federation.php
@@ -27,7 +27,7 @@
 
 
 $links_federation[] = [
-    'href' => \SimpleSAML\Utils\HTTP::getBaseURL().'admin/metadata-converter.php',
+    'href' => \SimpleSAML\Utils\HTTP::getBaseURL() . 'admin/metadata-converter.php',
     'text' => '{core:frontpage:link_xmlconvert}',
 ];
 
@@ -51,32 +51,32 @@
 
 
 if ($isadmin) {
-    $metaentries['remote']['saml20-idp-remote'] = $metadata->getList('saml20-idp-remote');
-    $metaentries['remote']['shib13-idp-remote'] = $metadata->getList('shib13-idp-remote');
+    $metaentries['remote']['saml20-idp-remote'] = $metadata->getList('saml20-idp-remote', true);
+    $metaentries['remote']['shib13-idp-remote'] = $metadata->getList('shib13-idp-remote', true);
 }
 
 if ($config->getBoolean('enable.saml20-idp', false) === true) {
     try {
         $metaentries['hosted']['saml20-idp'] = $metadata->getMetaDataCurrent('saml20-idp-hosted');
         $metaentries['hosted']['saml20-idp']['metadata-url'] =
-            $config->getBasePath().'saml2/idp/metadata.php?output=xhtml';
+            $config->getBasePath() . 'saml2/idp/metadata.php?output=xhtml';
         if ($isadmin) {
-            $metaentries['remote']['saml20-sp-remote'] = $metadata->getList('saml20-sp-remote');
+            $metaentries['remote']['saml20-sp-remote'] = $metadata->getList('saml20-sp-remote', true);
         }
     } catch (Exception $e) {
-        \SimpleSAML\Logger::error('Federation: Error loading saml20-idp: '.$e->getMessage());
+        \SimpleSAML\Logger::error('Federation: Error loading saml20-idp: ' . $e->getMessage());
     }
 }
 if ($config->getBoolean('enable.shib13-idp', false) === true) {
     try {
         $metaentries['hosted']['shib13-idp'] = $metadata->getMetaDataCurrent('shib13-idp-hosted');
         $metaentries['hosted']['shib13-idp']['metadata-url'] =
-            $config->getBasePath().'shib13/idp/metadata.php?output=xhtml';
+            $config->getBasePath() . 'shib13/idp/metadata.php?output=xhtml';
         if ($isadmin) {
-            $metaentries['remote']['shib13-sp-remote'] = $metadata->getList('shib13-sp-remote');
+            $metaentries['remote']['shib13-sp-remote'] = $metadata->getList('shib13-sp-remote', true);
         }
     } catch (Exception $e) {
-        \SimpleSAML\Logger::error('Federation: Error loading shib13-idp: '.$e->getMessage());
+        \SimpleSAML\Logger::error('Federation: Error loading shib13-idp: ' . $e->getMessage());
     }
 }
 if ($config->getBoolean('enable.adfs-idp', false) === true) {
@@ -87,10 +87,10 @@
             ['output' => 'xhtml']
         );
         if ($isadmin) {
-            $metaentries['remote']['adfs-sp-remote'] = $metadata->getList('adfs-sp-remote');
+            $metaentries['remote']['adfs-sp-remote'] = $metadata->getList('adfs-sp-remote', true);
         }
     } catch (Exception $e) {
-        \SimpleSAML\Logger::error('Federation: Error loading adfs-idp: '.$e->getMessage());
+        \SimpleSAML\Logger::error('Federation: Error loading adfs-idp: ' . $e->getMessage());
     }
 }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-done.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-done.php
index 7725754e48..92733d00ad 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-done.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-done.php
@@ -22,7 +22,7 @@
 
 // find the status of all SPs
 foreach ($SPs as $assocId => &$sp) {
-    $spId = 'logout-iframe-'.sha1($assocId);
+    $spId = 'logout-iframe-' . sha1($assocId);
 
     if (isset($_REQUEST[$spId])) {
         $spStatus = $_REQUEST[$spId];
@@ -42,13 +42,13 @@
     if ($sp['core:Logout-IFrame:State'] === 'completed') {
         $idp->terminateAssociation($assocId);
     } else {
-        \SimpleSAML\Logger::warning('Unable to terminate association with '.var_export($assocId, true).'.');
+        \SimpleSAML\Logger::warning('Unable to terminate association with ' . var_export($assocId, true) . '.');
         if (isset($sp['saml:entityID'])) {
             $spId = $sp['saml:entityID'];
         } else {
             $spId = $assocId;
         }
-        \SimpleSAML\Logger::stats('slo-iframe-fail '.$spId);
+        \SimpleSAML\Logger::stats('slo-iframe-fail ' . $spId);
         \SimpleSAML\Stats::log('core:idp:logout-iframe:spfail', ['sp' => $spId]);
         $state['core:Failed'] = true;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-post.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-post.php
index 2081dfe26d..6dc9c8d35d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-post.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe-post.php
@@ -51,6 +51,7 @@
 
 $bindings = [\SAML2\Constants::BINDING_HTTP_POST];
 
+/** @var array $dst */
 $dst = $spMetadata->getDefaultEndpoint('SingleLogoutService', $bindings);
 $binding = \SAML2\Binding::getBinding($dst['Binding']);
 $lr->setDestination($dst['Location']);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.js b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.js
index 921c23cdfe..62e7666b04 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.js
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.js
@@ -5,7 +5,7 @@ function updateStatus()
 {
     var nFailed = 0;
     var nProgress = 0;
-    for (sp in window.spStatus) {
+    for (var sp in window.spStatus) {
         switch (window.spStatus[sp]) {
             case 'failed':
                 nFailed += 1;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.php
index 27195af6b8..8f38c891f3 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/idp/logout-iframe.php
@@ -14,7 +14,7 @@
 }
 
 if ($type !== 'embed') {
-    \SimpleSAML\Logger::stats('slo-iframe '.$type);
+    \SimpleSAML\Logger::stats('slo-iframe ' . $type);
     \SimpleSAML\Stats::log('core:idp:logout-iframe:page', ['type' => $type]);
 }
 
@@ -99,15 +99,21 @@
         $mdset = 'adfs-sp-remote';
     }
 
+    if ($association['core:Logout-IFrame:State'] === 'completed') {
+        continue;
+    }
+
     $remaining[$key] = [
         'id' => $association['id'],
         'expires_on' => $association['Expires'],
         'entityID' => $association['saml:entityID'],
         'subject' => $association['saml:NameID'],
         'status' => $association['core:Logout-IFrame:State'],
-        'logoutURL' => $association['core:Logout-IFrame:URL'],
         'metadata' => $mdh->getMetaDataConfig($association['saml:entityID'], $mdset)->toArray(),
     ];
+    if (isset($association['core:Logout-IFrame:URL'])) {
+        $remaining[$key]['logoutURL'] = $association['core:Logout-IFrame:URL'];
+    }
     if (isset($association['core:Logout-IFrame:Timeout'])) {
         $remaining[$key]['timeout'] = $association['core:Logout-IFrame:Timeout'];
     }
@@ -115,9 +121,9 @@
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
 if ($type === 'nojs') {
-    $t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:logout-iframe-wrapper.php');
+    $t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:logout-iframe-wrapper.tpl.php');
 } else {
-    $t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:logout-iframe.php');
+    $t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:logout-iframe.tpl.php');
 }
 
 /**
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpass.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpass.php
index 747506f898..5db61c91fc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpass.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpass.php
@@ -14,20 +14,21 @@
     throw new \SimpleSAML\Error\BadRequest('Missing AuthState parameter.');
 }
 $authStateId = $_REQUEST['AuthState'];
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($authStateId, \SimpleSAML\Module\core\Auth\UserPassBase::STAGEID);
 
+/** @var \SimpleSAML\Module\core\Auth\UserPassBase|null $source */
 $source = \SimpleSAML\Auth\Source::getById($state[\SimpleSAML\Module\core\Auth\UserPassBase::AUTHID]);
 if ($source === null) {
     throw new \Exception(
-        'Could not find authentication source with id '.$state[\SimpleSAML\Module\core\Auth\UserPassBase::AUTHID]
+        'Could not find authentication source with id ' . $state[\SimpleSAML\Module\core\Auth\UserPassBase::AUTHID]
     );
 }
 
-
 if (array_key_exists('username', $_REQUEST)) {
     $username = $_REQUEST['username'];
-} elseif ($source->getRememberUsernameEnabled() && array_key_exists($source->getAuthId().'-username', $_COOKIE)) {
-    $username = $_COOKIE[$source->getAuthId().'-username'];
+} elseif ($source->getRememberUsernameEnabled() && array_key_exists($source->getAuthId() . '-username', $_COOKIE)) {
+    $username = $_COOKIE[$source->getAuthId() . '-username'];
 } elseif (isset($state['core:username'])) {
     $username = (string) $state['core:username'];
 } else {
@@ -60,13 +61,13 @@
     if ($source->getRememberUsernameEnabled()) {
         $sessionHandler = \SimpleSAML\SessionHandler::getSessionHandler();
         $params = $sessionHandler->getCookieParams();
-        
+
         if (isset($_REQUEST['remember_username']) && $_REQUEST['remember_username'] == 'Yes') {
             $params['expire'] = time() + 31536000;
         } else {
             $params['expire'] = time() - 300;
         }
-        \SimpleSAML\Utils\HTTP::setCookie($source->getAuthId().'-username', $username, $params, false);
+        \SimpleSAML\Utils\HTTP::setCookie($source->getAuthId() . '-username', $username, $params, false);
     }
 
     if ($source->isRememberMeEnabled()) {
@@ -98,7 +99,7 @@
 }
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
-$t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:loginuserpass.php');
+$t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:loginuserpass.tpl.php');
 $t->data['stateparams'] = ['AuthState' => $authStateId];
 if (array_key_exists('forcedUsername', $state)) {
     $t->data['username'] = $state['forcedUsername'];
@@ -114,7 +115,7 @@
     $t->data['rememberUsernameChecked'] = $source->getRememberUsernameChecked();
     $t->data['rememberMeEnabled'] = $source->isRememberMeEnabled();
     $t->data['rememberMeChecked'] = $source->isRememberMeChecked();
-    if (isset($_COOKIE[$source->getAuthId().'-username'])) {
+    if (isset($_COOKIE[$source->getAuthId() . '-username'])) {
         $t->data['rememberUsernameChecked'] = true;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpassorg.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpassorg.php
index 2b9ec4dba3..fd65a15dbe 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpassorg.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/loginuserpassorg.php
@@ -14,12 +14,15 @@
     throw new \SimpleSAML\Error\BadRequest('Missing AuthState parameter.');
 }
 $authStateId = $_REQUEST['AuthState'];
+
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($authStateId, \SimpleSAML\Module\core\Auth\UserPassOrgBase::STAGEID);
 
+/** @var \SimpleSAML\Module\core\Auth\UserPassOrgBase $source */
 $source = \SimpleSAML\Auth\Source::getById($state[\SimpleSAML\Module\core\Auth\UserPassOrgBase::AUTHID]);
 if ($source === null) {
     throw new \Exception(
-        'Could not find authentication source with id '.$state[\SimpleSAML\Module\core\Auth\UserPassOrgBase::AUTHID]
+        'Could not find authentication source with id ' . $state[\SimpleSAML\Module\core\Auth\UserPassOrgBase::AUTHID]
     );
 }
 
@@ -27,8 +30,8 @@
 
 if (array_key_exists('username', $_REQUEST)) {
     $username = $_REQUEST['username'];
-} elseif ($source->getRememberUsernameEnabled() && array_key_exists($source->getAuthId().'-username', $_COOKIE)) {
-    $username = $_COOKIE[$source->getAuthId().'-username'];
+} elseif ($source->getRememberUsernameEnabled() && array_key_exists($source->getAuthId() . '-username', $_COOKIE)) {
+    $username = $_COOKIE[$source->getAuthId() . '-username'];
 } elseif (isset($state['core:username'])) {
     $username = (string) $state['core:username'];
 } else {
@@ -43,10 +46,11 @@
 
 if (array_key_exists('organization', $_REQUEST)) {
     $organization = $_REQUEST['organization'];
-} elseif ($source->getRememberOrganizationEnabled() &&
-    array_key_exists($source->getAuthId().'-organization', $_COOKIE)
-  ) {
-    $organization = $_COOKIE[$source->getAuthId().'-organization'];
+} elseif (
+    $source->getRememberOrganizationEnabled()
+    && array_key_exists($source->getAuthId() . '-organization', $_COOKIE)
+) {
+    $organization = $_COOKIE[$source->getAuthId() . '-organization'];
 } elseif (isset($state['core:organization'])) {
     $organization = (string) $state['core:organization'];
 } else {
@@ -74,7 +78,7 @@
                 $params['expire'] = time() - 300;
             }
 
-            \SimpleSAML\Utils\HTTP::setCookie($source->getAuthId().'-username', $username, $params, false);
+            \SimpleSAML\Utils\HTTP::setCookie($source->getAuthId() . '-username', $username, $params, false);
         }
 
         if ($source->getRememberOrganizationEnabled()) {
@@ -86,7 +90,7 @@
                 $params['expire'] = time() - 300;
             }
             setcookie(
-                $source->getAuthId().'-organization',
+                $source->getAuthId() . '-organization',
                 $organization,
                 $params['expire'],
                 $params['path'],
@@ -124,7 +128,7 @@
 }
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
-$t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:loginuserpass.php');
+$t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:loginuserpass.tpl.php');
 $t->data['stateparams'] = ['AuthState' => $authStateId];
 $t->data['username'] = $username;
 $t->data['forceUsername'] = false;
@@ -132,12 +136,12 @@
 $t->data['rememberUsernameChecked'] = $source->getRememberUsernameChecked();
 $t->data['rememberMeEnabled'] = false;
 $t->data['rememberMeChecked'] = false;
-if (isset($_COOKIE[$source->getAuthId().'-username'])) {
+if (isset($_COOKIE[$source->getAuthId() . '-username'])) {
     $t->data['rememberUsernameChecked'] = true;
 }
 $t->data['rememberOrganizationEnabled'] = $source->getRememberOrganizationEnabled();
 $t->data['rememberOrganizationChecked'] = $source->getRememberOrganizationChecked();
-if (isset($_COOKIE[$source->getAuthId().'-organization'])) {
+if (isset($_COOKIE[$source->getAuthId() . '-organization'])) {
     $t->data['rememberOrganizationChecked'] = true;
 }
 $t->data['errorcode'] = $errorCode;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/no_cookie.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/no_cookie.php
index 3575d85f6b..7ae3889d6c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/no_cookie.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/no_cookie.php
@@ -11,8 +11,15 @@
 $t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:no_cookie.tpl.php');
 $translator = $t->getTranslator();
 
-$t->data['header'] = htmlspecialchars($translator->t('{core:no_cookie:header}'));
-$t->data['description'] = htmlspecialchars($translator->t('{core:no_cookie:description}'));
-$t->data['retry'] = htmlspecialchars($translator->t('{core:no_cookie:retry}'));
+/** @var string $header */
+$header = $translator->t('{core:no_cookie:header}');
+/** @var string $desc */
+$desc = $translator->t('{core:no_cookie:description}');
+/** @var string $retry */
+$retry = $translator->t('{core:no_cookie:retry}');
+
+$t->data['header'] = htmlspecialchars($header);
+$t->data['description'] = htmlspecialchars($desc);
+$t->data['retry'] = htmlspecialchars($retry);
 $t->data['retryURL'] = $retryURL;
 $t->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/short_sso_interval.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/short_sso_interval.php
index a9da1cae10..919210f535 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/short_sso_interval.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/short_sso_interval.php
@@ -11,7 +11,10 @@
     throw new \SimpleSAML\Error\BadRequest('Missing required StateId query parameter.');
 }
 $id = $_REQUEST['StateId'];
+
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($id, 'core:short_sso_interval');
+
 $session = \SimpleSAML\Session::getSessionFromRequest();
 
 if (array_key_exists('continue', $_REQUEST)) {
@@ -20,7 +23,7 @@
 }
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
-$t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:short_sso_interval.php');
+$t = new \SimpleSAML\XHTML\Template($globalConfig, 'core:short_sso_interval.tpl.php');
 $translator = $t->getTranslator();
 $t->data['target'] = \SimpleSAML\Module::getModuleURL('core/short_sso_interval.php');
 $t->data['params'] = ['StateId' => $id];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/core/www/show_metadata.php b/vendor/simplesamlphp/simplesamlphp/modules/core/www/show_metadata.php
index e8f3bf223e..ffad6572b2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/core/www/show_metadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/core/www/show_metadata.php
@@ -12,11 +12,13 @@
 if (!array_key_exists('set', $_REQUEST)) {
     throw new Exception('required parameter [set] missing');
 }
-if (!in_array(
-    $_REQUEST['set'],
-    ['saml20-idp-remote', 'saml20-sp-remote', 'shib13-idp-remote', 'shib13-sp-remote'],
-    true
-)) {
+if (
+    !in_array(
+        $_REQUEST['set'],
+        ['saml20-idp-remote', 'saml20-sp-remote', 'shib13-idp-remote', 'shib13-sp-remote'],
+        true
+    )
+) {
     throw new Exception('Invalid set');
 }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/bin/cron.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/bin/cron.php
index 61e690e0fd..436397fd29 100755
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/bin/cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/bin/cron.php
@@ -11,12 +11,12 @@
 $baseDir = dirname(dirname(dirname(dirname(__FILE__))));
 
 // Add library autoloader.
-require_once($baseDir.'/lib/_autoload.php');
+require_once($baseDir . '/lib/_autoload.php');
 
 if (!SimpleSAML\Module::isModuleEnabled('cron')) {
     echo "You need to enable the cron module before this script can be used.\n";
     echo "You can enable it by running the following command:\n";
-    echo '  echo >"'.$baseDir.'/modules/cron/enable'."\"\n";
+    echo '  echo >"' . $baseDir . '/modules/cron/enable' . "\"\n";
     exit(1);
 }
 
@@ -35,7 +35,7 @@
 $tag = $options['t'];
 $cron = new SimpleSAML\Module\cron\Cron();
 if (!$cron->isValidTag($tag)) {
-    echo "Invalid tag option '$tag'.\n";
+    echo "Invalid tag option '$tag' . \n";
     exit(2);
 }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/dictionaries/cron.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/cron/dictionaries/cron.translation.json
index db5bfa4a29..3773665e22 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/dictionaries/cron.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/dictionaries/cron.translation.json
@@ -29,7 +29,8 @@
 		"eu": "Cronen emaitza orria",
 		"af": "Cron resultaat bladsy",
 		"pt-br": "P\u00e1gina de resultados do Cron",
-		"el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c0\u03b5\u03c1\u03b9\u03bf\u03b4\u03b9\u03ba\u03ce\u03bd \u03b5\u03c1\u03b3\u03b1\u03c3\u03b9\u03ce\u03bd cron"
+		"el": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c0\u03b5\u03c1\u03b9\u03bf\u03b4\u03b9\u03ba\u03ce\u03bd \u03b5\u03c1\u03b3\u03b1\u03c3\u03b9\u03ce\u03bd cron",
+		"ca": "Pàgina del resultat del Cron"
 	},
 	"cron_result_title": {
 		"da": "Her er resultatet for opgaven udf\u00f8relse:",
@@ -61,7 +62,8 @@
 		"eu": "Hona hemen cronen exekuzioan zereginen emaitzak: ",
 		"af": "Hier is die resultaat vir die cron uitvoeringsproses:",
 		"pt-br": "Aqui est\u00e3o os resultados para a execu\u00e7\u00e3o da rotina do cron:",
-		"el": "\u0391\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 \u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2 cron:"
+		"el": "\u0391\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 \u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2 cron:",
+		"ca": "Aquí teniu el resultat de l’execució de les tasques del Cron:"
 	},
 	"cron_info": {
 		"da": "Cron er en m\u00e5de at k\u00f8re tingene regelm\u00e6ssigt p\u00e5 UNIX-systemer.",
@@ -93,7 +95,8 @@
 		"eu": "Cron UNIX sitemetan aldizkako zereginak exekutatzeko modu bat da.  ",
 		"af": "Cron is 'n manier om prosesse op 'n gere\u00eblde basis te hardloop op unix sisteme.",
 		"pt-br": "Cron \u00e9 uma maneira de executar as coisas regularmente em sistemas UNIX.",
-		"el": "\u03a4\u03bf cron \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03b5\u03c1\u03b3\u03b1\u03c3\u03b9\u03ce\u03bd \u03b1\u03bd\u03ac \u03c4\u03b1\u03ba\u03c4\u03ac \u03b4\u03b9\u03b1\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03b1 \u03c3\u03b5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03b1 UNIX."
+		"el": "\u03a4\u03bf cron \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03b5\u03c1\u03b3\u03b1\u03c3\u03b9\u03ce\u03bd \u03b1\u03bd\u03ac \u03c4\u03b1\u03ba\u03c4\u03ac \u03b4\u03b9\u03b1\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03b1 \u03c3\u03b5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03b1 UNIX.",
+		"ca": "Cron és una manera de planificar tasques amb regularitat en els sistemes Unix."
 	},
 	"cron_suggestion": {
 		"da": "Her er et forslag til en crontab fil:",
@@ -125,7 +128,8 @@
 		"eu": "Hona hemen crontab fitxategi baten iradokizuna: ",
 		"af": "Hier is 'n voorbeeld vir 'n crontab l\u00eaer:",
 		"pt-br": "Aqui est\u00e1 uma sugest\u00e3o para um arquivo crontab:",
-		"el": "\u03a0\u03c1\u03bf\u03c4\u03b5\u03b9\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf crontab:"
+		"el": "\u03a0\u03c1\u03bf\u03c4\u03b5\u03b9\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf crontab:",
+		"ca": "Aquí hi ha un suggeriment per a un fitxer crontab:"
 	},
 	"cron_execution": {
 		"da": "Klik her for at k\u00f8re cron job:",
@@ -157,7 +161,8 @@
 		"eu": "Klikatu hemen cron zereginak exekutatzeko:",
 		"af": "Kliek hier om 'n cron proses the begin:",
 		"pt-br": "Clique aqui para executar as tarefas agendadas:",
-		"el": "\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03b5\u03b4\u03ce \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03ba\u03c4\u03b5\u03bb\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b5\u03c2 cron:"
+		"el": "\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03b5\u03b4\u03ce \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03ba\u03c4\u03b5\u03bb\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b5\u03c2 cron:",
+		"ca": "Feu clic aquí per executar les tasques de Cron:"
 	},
 	"run_text": {
 		"da": "Run cron:",
@@ -189,7 +194,8 @@
 		"eu": "Cron exekutatu:",
 		"af": "Begin cron:",
 		"pt-br": "Executar cron",
-		"el": "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 cron"
+		"el": "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 cron",
+		"ca": "Executa Cron:"
 	},
 	"ran_text": {
 		"da": "Cron l\u00f8b p\u00e5",
@@ -221,7 +227,8 @@
 		"eu": "Cron noiz exekutatua",
 		"af": "Cron was aktief om",
 		"pt-br": "Cron rodou em",
-		"el": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03ba\u03b1\u03b9 \u03ce\u03c1\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 cron:"
+		"el": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03ba\u03b1\u03b9 \u03ce\u03c1\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7\u03c2 cron:",
+		"ca": "Cron executat el"
 	},
 	"cron_report_title": {
 		"da": "Cron rapport",
@@ -253,11 +260,13 @@
 		"eu": "Cronen txostena",
 		"af": "Cron verslag",
 		"pt-br": "Relat\u00f3rio do cron",
-		"el": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac cron"
+		"el": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac cron",
+		"ca": "Informe de Cron"
 	},
 	"link_cron": {
 		"es": "Informe de cron",
 		"no": "Informasjon om cron",
-		"nn": "Informasjon om cron"
+		"nn": "Informasjon om cron",
+		"ca": "Pàgina d'informació del mòdul de Cron"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/docs/cron.md b/vendor/simplesamlphp/simplesamlphp/modules/cron/docs/cron.md
index 88630a29b3..cd315f8a72 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/docs/cron.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/docs/cron.md
@@ -111,7 +111,7 @@ Below is an example of invoking the script. It will:
 * Run the `cron.php` script with the `hourly` tag
 * Use `nice` to lower the priority below that of web server processes
 
-```bash
+```
 su -s "/bin/sh" \
    -c "nice -n 10 \
        php -d max_execution_time=120 -d memory_limit=600M \
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_configpage.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_configpage.php
index dc3c8400b7..136888a003 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_configpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_configpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add the cron module to the config page.
  *
  * @param \SimpleSAML\XHTML\Template &$template The template that we should alter in this hook.
+ * @return void
  */
-
 function cron_hook_configpage(\SimpleSAML\XHTML\Template &$template)
 {
     $template->data['links']['cron'] = [
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_cron.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_cron.php
index 61812906a2..a135360764 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_cron.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to run a cron job.
  *
  * @param array &$croninfo  Output
+ * @return void
  */
-
 function cron_hook_cron(&$croninfo)
 {
     assert(is_array($croninfo));
@@ -14,6 +15,6 @@ function cron_hook_cron(&$croninfo)
     $cronconfig = \SimpleSAML\Configuration::getConfig('module_cron.php');
 
     if ($cronconfig->getValue('debug_message', true)) {
-        $croninfo['summary'][] = 'Cron did run tag ['.$croninfo['tag'].'] at '.date(DATE_RFC822);
+        $croninfo['summary'][] = 'Cron did run tag [' . $croninfo['tag'] . '] at ' . date(DATE_RFC822);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_frontpage.php
index 73fcd215b7..2de5d22e2f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/hooks/hook_frontpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add the modinfo module to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
-
 function cron_hook_frontpage(&$links)
 {
     assert(is_array($links));
@@ -15,4 +16,3 @@ function cron_hook_frontpage(&$links)
         'text' => '{cron:cron:link_cron}',
     ];
 }
-
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Controller/Cron.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Controller/Cron.php
new file mode 100644
index 0000000000..19e7fe80bc
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Controller/Cron.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace SimpleSAML\Module\cron\Controller;
+
+use SimpleSAML\Auth;
+use SimpleSAML\Auth\AuthenticationFactory;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\HTTP\RunnableResponse;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+use SimpleSAML\XHTML\Template;
+use Symfony\Component\HttpFoundation\RedirectResponse;
+use Symfony\Component\HttpFoundation\Response;
+
+/**
+ * Controller class for the cron module.
+ *
+ * This class serves the different views available in the module.
+ *
+ * @package SimpleSAML\Module\cron
+ */
+class Cron
+{
+    /** @var \SimpleSAML\Configuration */
+    protected $config;
+
+    /** @var \SimpleSAML\Configuration */
+    protected $cronconfig;
+
+    /** @var \SimpleSAML\Session */
+    protected $session;
+
+
+    /**
+     * Controller constructor.
+     *
+     * It initializes the global configuration and auth source configuration for the controllers implemented here.
+     *
+     * @param \SimpleSAML\Configuration              $config The configuration to use by the controllers.
+     * @param \SimpleSAML\Configuration              $moduleConfig The module-configuration to use by the controllers.
+     * @param \SimpleSAML\Session                    $session The session to use by the controllers.
+     *
+     * @throws \Exception
+     */
+    public function __construct(
+        Configuration $config,
+        Session $session
+    ) {
+        $this->config = $config;
+        $this->cronconfig = Configuration::getConfig('module_cron.php');
+        $this->session = $session;
+    }
+
+
+    /**
+     * Show cron info.
+     *
+     * @return \SimpleSAML\XHTML\Template
+     *   An HTML template or a redirection if we are not authenticated.
+     */
+    public function info()
+    {
+        Utils\Auth::requireAdmin();
+
+        $key = $this->cronconfig->getValue('key', 'secret');
+        $tags = $this->cronconfig->getValue('allowed_tags');
+
+        $def = [
+            'weekly' => "22 0 * * 0",
+            'daily' => "02 0 * * *",
+            'hourly' => "01 * * * *",
+            'default' => "XXXXXXXXXX",
+        ];
+
+        $urls = [];
+        if ($this->config->getBoolean('usenewui', false)) {
+            foreach ($tags as $tag) {
+                $urls[] = [
+                    'exec_href' => Module::getModuleURL('cron') . '/run/' . $tag . '/' . $key,
+                    'href' => Module::getModuleURL('cron') . '/run/' . $tag . '/' . $key . '/xhtml',
+                    'tag' => $tag,
+                    'int' => (array_key_exists($tag, $def) ? $def[$tag] : $def['default']),
+                ];
+            }
+        } else {
+            // cron.php?key=secret&tag=hourly&output=xhtml
+            foreach ($tags as $tag) {
+                $urls[] = [
+                    'exec_href' => Module::getModuleURL('cron/cron.php', ['key' => $key, 'tag' => $tag]),
+                    'href' => Module::getModuleURL('cron/cron.php', ['key' => $key, 'tag' => $tag, 'output' => 'xhtml']),
+                    'tag' => $tag,
+                    'int' => (array_key_exists($tag, $def) ? $def[$tag] : $def['default']),
+                ];
+            }
+        }
+
+        $t = new Template($this->config, 'cron:croninfo.tpl.php', 'cron:cron');
+        $t->data['urls'] = $urls;
+        return $t;
+    }
+
+
+    /**
+     * Execute a cronjob.
+     *
+     * This controller will start a cron operation
+     *
+     * @param string $tag The tag
+     * @param string $key The secret key
+     * @param string|null $output The output format, defaulting to xhtml
+     *
+     * @return \SimpleSAML\XHTML\Template|\Symfony\Component\HttpFoundation\Response
+     *   An HTML template, a redirect or a "runnable" response.
+     *
+     * @throws \SimpleSAML\Error\Exception
+     */
+    public function run($tag, $key, $output)
+    {
+        $configKey = $this->cronconfig->getValue('key', 'secret');
+        if ($key !== $configKey) {
+            Logger::error('Cron - Wrong key provided. Cron will not run.');
+            exit;
+        }
+
+        $cron = new \SimpleSAML\Module\cron\Cron();
+        if ($tag === null || !$cron->isValidTag($tag)) {
+            Logger::error('Cron - Illegal tag [' . $tag . '].');
+            exit;
+        }
+
+        $url = Utils\HTTP::getSelfURL();
+        $time = date(DATE_RFC822);
+
+        $croninfo = $cron->runTag($tag);
+        $summary = $croninfo['summary'];
+
+        if ($this->cronconfig->getValue('sendemail', true) && count($summary) > 0) {
+            $mail = new Utils\EMail('SimpleSAMLphp cron report');
+            $mail->setData(['url' => $url, 'tag' => $croninfo['tag'], 'summary' => $croninfo['summary']]);
+            try {
+                $mail->send();
+            } catch (\PHPMailer\PHPMailer\Exception $e) {
+                Logger::warning("Unable to send cron report");
+            }
+        }
+
+        if ($output === 'xhtml') {
+            $t = new Template($this->config, 'cron:croninfo-result.tpl.php', 'cron:cron');
+            $t->data['tag'] = $croninfo['tag'];
+            $t->data['time'] = $time;
+            $t->data['url'] = $url;
+            $t->data['mail_required'] = isset($mail);
+            $t->data['mail_sent'] = !isset($e);
+            $t->data['summary'] = $summary;
+            return $t;
+        }
+        return new Response();
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Cron.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Cron.php
index f8bda653b8..7a673ba10f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/lib/Cron.php
@@ -1,6 +1,10 @@
 <?php
 
-namespace  SimpleSAML\Module\cron;
+namespace SimpleSAML\Module\cron;
+
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
 
 /**
  * Handles interactions with SSP's cron system/hooks.
@@ -13,27 +17,27 @@ class Cron
      */
     private $cronconfig;
 
+
     /*
      * @param \SimpleSAML\Configuration $cronconfig The cron configuration to use. If not specified defaults
      * to `config/module_cron.php`
      */
-    public function __construct(\SimpleSAML\Configuration $cronconfig = null)
+    public function __construct(Configuration $cronconfig = null)
     {
         if ($cronconfig == null) {
-            $cronconfig = \SimpleSAML\Configuration::getConfig('module_cron.php');
+            $cronconfig = Configuration::getConfig('module_cron.php');
         }
         $this->cronconfig = $cronconfig;
     }
 
     /**
      * Invoke the cron hook for the given tag
-     * @param $tag string The tag to use. Must be valid in the cronConfig
+     * @param string $tag The tag to use. Must be valid in the cronConfig
      * @return array the tag, and summary information from the run.
-     * @throws Exception If an invalid tag specified
+     * @throws \Exception If an invalid tag specified
      */
     public function runTag($tag)
     {
-
         if (!$this->isValidTag($tag)) {
             throw new \Exception("Invalid cron tag '$tag''");
         }
@@ -44,15 +48,19 @@ public function runTag($tag)
             'tag' => $tag,
         ];
 
-        \SimpleSAML\Module::callHooks('cron', $croninfo);
+        Module::callHooks('cron', $croninfo);
 
         foreach ($summary as $s) {
-            \SimpleSAML\Logger::debug('Cron - Summary: '.$s);
+            Logger::debug('Cron - Summary: ' . $s);
         }
 
         return $croninfo;
     }
 
+    /**
+     * @param string $tag
+     * @return bool
+     */
     public function isValidTag($tag)
     {
         if (!is_null($this->cronconfig->getValue('allowed_tags'))) {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/locales/nl/LC_MESSAGES/cron.po b/vendor/simplesamlphp/simplesamlphp/modules/cron/locales/nl/LC_MESSAGES/cron.po
index c06aaa7c04..ed89db0eac 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/locales/nl/LC_MESSAGES/cron.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/locales/nl/LC_MESSAGES/cron.po
@@ -1,11 +1,10 @@
 
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: SimpleSAMLphp 1.15\n"
+"Project-Id-Version: SimpleSAMLphp 1.19\n"
 "Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
 "POT-Creation-Date: 2016-10-12 09:23+0200\n"
-"PO-Revision-Date: 2016-10-14 12:14+0200\n"
+"PO-Revision-Date: 2020-02-14 19:53+0200\n"
 "Last-Translator: \n"
 "Language: nl\n"
 "Language-Team: \n"
@@ -16,50 +15,50 @@ msgstr ""
 "Generated-By: Babel 2.3.4\n"
 
 msgid "{cron:cron:cron_report_title}"
-msgstr "Cron melding"
+msgstr "Cronmelding"
 
 msgid "{cron:cron:ran_text}"
 msgstr "Cron gestart op"
 
 msgid "{cron:cron:cron_suggestion}"
-msgstr "Hier is een suggestie voor een contrab bestand:"
+msgstr "Dit is een suggestie voor een contrab-bestand:"
 
 msgid "{cron:cron:run_text}"
 msgstr "Start cron"
 
 msgid "{cron:cron:cron_execution}"
-msgstr "Klik hier om de cron taken te starten:"
+msgstr "Klik hier om de crontaken te starten:"
 
 msgid "{cron:cron:cron_info}"
-msgstr "Cron is een manier om dingen normaal te laten draaien op unix systemen."
+msgstr "Cron is een manier om periodiek taken uit te voeren op unix-systemen."
 
 msgid "{cron:cron:cron_result_title}"
-msgstr "Hier is het resultaat van de cron taak uitvoering:"
+msgstr "Hier is het resultaat van de crontaak-uitvoering:"
 
 msgid "{cron:cron:cron_header}"
-msgstr "Cron resultaat pagina"
+msgstr "Cron resultaatpagina"
 
 msgid "Cron is a way to run things regularly on unix systems."
-msgstr "Cron is een manier om dingen normaal te laten draaien op unix systemen."
+msgstr "Cron is een manier om periodiek taken uit te voeren op unix-systemen."
 
 msgid "Run cron:"
-msgstr "Start cron"
+msgstr "Start cron:"
 
 msgid "Cron ran at"
 msgstr "Cron gestart op"
 
 msgid "Cron report"
-msgstr "Cron melding"
+msgstr "Cronmelding"
 
 msgid "Here is a suggestion for a crontab file:"
-msgstr "Hier is een suggestie voor een contrab bestand:"
+msgstr "Dit is een suggestie voor een contrab bestand:"
 
 msgid "Click here to run the cron jobs:"
-msgstr "Klik hier om de cron taken te starten:"
+msgstr "Klik hier om de crontaken te starten:"
 
 msgid "Here are the result for the cron job execution:"
-msgstr "Hier is het resultaat van de cron taak uitvoering:"
+msgstr "Hier is het resultaat van de crontaak-uitvoering:"
 
 msgid "Cron result page"
-msgstr "Cron resultaat pagina"
+msgstr "Cron resultaatpagina"
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/routes.yaml b/vendor/simplesamlphp/simplesamlphp/modules/cron/routes.yaml
new file mode 100644
index 0000000000..d25718ad15
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/routes.yaml
@@ -0,0 +1,6 @@
+cron-croninfo:
+    path:       /info
+    defaults:   { _controller: 'SimpleSAML\Module\cron\Controller\Cron::info' }
+cron-run:
+    path:       /run/{tag}/{key}/{output}
+    defaults:   { _controller: 'SimpleSAML\Module\cron\Controller\Cron::run', output: null }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.php
rename to vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.twig b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.twig
index f226ffe07e..eb755dd2e4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo-result.twig
@@ -22,9 +22,14 @@ Tag: {{ tag }}
 {% for sum in summary %}
         <li> {{ sum }}</li>
 {% endfor %}
-</ul><br />
-</p>
+</ul>
+</p><br />
 </code>
+</div>
 
+{% if mail_required == true and mail_sent == false %}
+<div class="message-box error">
+Cron-report was not emailed due to an error.
 </div>
+{% endif %}
 {% endblock %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.tpl.php
index 50efe15a1e..dc1bf05830 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.tpl.php
@@ -13,7 +13,7 @@
 <?php
 foreach ($this->data['urls'] as $url) {
     echo "# ".$run_text. ' ['.$url['tag'].']'."\n";
-    echo $url['int']." curl --silent \"".$url['href']."\" > /dev/null 2>&1\n";
+    echo $url['int']." curl --silent \"".$url['exec_href']."\" > /dev/null 2>&1\n";
 }
 ?>
         </code></pre>
@@ -23,7 +23,7 @@
         <ul>
 <?php
 foreach ($this->data['urls'] as $url) {
-    echo '        <li><a href="'.$url['href'].'&amp;output=xhtml">'.$run_text.' ['.$url['tag'].']'.'</a></li>';
+    echo '        <li><a href="'.$url['href'].'">'.$run_text.' ['.$url['tag'].']'.'</a></li>';
 }
 ?>
         </ul>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.twig b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.twig
index b00b8905b8..12d9813ffc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/templates/croninfo.twig
@@ -2,7 +2,7 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-<link rel="stylesheet" type="text/css" href="{{ baseurlpath }}assets/css/cron.css">
+<link rel="stylesheet" href="/{{ baseurlpath }}module.php/cron/assets/css/cron.css">
 {% endblock %}
 
 {% block content %}
@@ -14,16 +14,17 @@
         <code id="cronlist">
         {% for url in urls %}
             # {{ 'Run cron:'|trans }} [{{ url.tag }}]<br />
-            {{ url.int }} curl --silent "{{ url.href }}" > /dev/null 2>&amp;1<br />
+            {{ url.int }} curl --silent "{{ url.exec_href }}" > /dev/null 2>&amp;1<br />
         {% endfor %}
-    </code></div><br />
+        <br />
+        </code>
+    </div>
 
-    <p>{{ 'Click here to run the cron jobs:'|trans }}</p>
-      <ul>
+    <p>{{ 'Click here to run the cron jobs:'|trans }}
+    <ul>
         {% for url in urls %}
-        <li><a href="{{ url.href }}&amp;output=xhtml">{{ 'Run cron:'|trans }} {{ url.tag }}</a></li>
+        <li><a href="{{ url.href }}">{{ 'Run cron:'|trans }} {{ url.tag }}</a></li>
         {% endfor %}
-      </ul>
-    </p>
+    </ul>
 
 {% endblock %}    
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/www/assets/css/cron.css b/vendor/simplesamlphp/simplesamlphp/modules/cron/www/assets/css/cron.css
index 459178ed6c..1f26a78d05 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/www/assets/css/cron.css
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/www/assets/css/cron.css
@@ -1,3 +1,4 @@
 code#cronlist {
-    font-size: 0.8vw;
+    font-size: 0.7vw;
+    white-space: nowrap;
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/www/cron.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/www/cron.php
index fb93059281..c6b9b7d0c8 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/www/cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/www/cron.php
@@ -1,49 +1,24 @@
 <?php
 
-$config = \SimpleSAML\Configuration::getInstance();
-$cronconfig = \SimpleSAML\Configuration::getConfig('module_cron.php');
-
-if (!is_null($cronconfig->getValue('key'))) {
-    if ($_REQUEST['key'] !== $cronconfig->getValue('key')) {
-        \SimpleSAML\Logger::error('Cron - Wrong key provided. Cron will not run.');
-        exit;
-    }
-}
-
-$cron = new \SimpleSAML\Module\cron\Cron();
-if (!$cron->isValidTag($_REQUEST['tag'])) {
-    SimpleSAML\Logger::error('Cron - Illegal tag ['.$_REQUEST['tag'].'].');
-    exit;
-}
-
-$url = \SimpleSAML\Utils\HTTP::getSelfURL();
-$time = date(DATE_RFC822);
-
-$croninfo = $cron->runTag($_REQUEST['tag']);
-$summary = $croninfo['summary'];
-
-if ($cronconfig->getValue('sendemail', true) && count($summary) > 0) {
-    $message = '<h1>Cron report</h1><p>Cron ran at '.$time.'</p>'.
-        '<p>URL: <code>'.$url.'</code></p>'.
-        '<p>Tag: '.$croninfo['tag']."</p>\n\n".
-        '<ul><li>'.join('</li><li>', $summary).'</li></ul>';
-
-    $toaddress = $config->getString('technicalcontact_email', 'na@example.org');
-    if ($toaddress == 'na@example.org') {
-        \SimpleSAML\Logger::error('Cron - Could not send email. [technicalcontact_email] not set in config.');
-    } else {
-        // Use $toaddress for both TO and FROM
-        $email = new \SimpleSAML\XHTML\EMail($toaddress, 'SimpleSAMLphp cron report', $toaddress);
-        $email->setBody($message);
-        $email->send();
-    }
-}
-
-if (isset($_REQUEST['output']) && $_REQUEST['output'] == "xhtml") {
-    $t = new \SimpleSAML\XHTML\Template($config, 'cron:croninfo-result.php', 'cron:cron');
-    $t->data['tag'] = $croninfo['tag'];
-    $t->data['time'] = $time;
-    $t->data['url'] = $url;
-    $t->data['summary'] = $summary;
-    $t->show();
+namespace SimpleSAML\Module\cron;
+
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use SimpleSAML\XHTML\Template;
+use Symfony\Component\HttpFoundation\Request;
+
+$config = Configuration::getInstance();
+$session = Session::getSessionFromRequest();
+$request = Request::createFromGlobals();
+
+$tag = $request->get('tag');
+$key = $request->get('key');
+$output = $request->get('output');
+
+$controller = new Controller\Cron($config, $session);
+$response = $controller->run($tag, $key, $output);
+if ($response instanceof Template) {
+    $response->show();
+} else {
+    $response->send();
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/cron/www/croninfo.php b/vendor/simplesamlphp/simplesamlphp/modules/cron/www/croninfo.php
index 8a0aac4d52..3f55ac3138 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/cron/www/croninfo.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/cron/www/croninfo.php
@@ -5,35 +5,15 @@
  * initializes the SimpleSAMLphp config class with the correct path.
  */
 
-require_once('_include.php');
+namespace SimpleSAML\Module\cron;
 
-// Load SimpleSAMLphp configuration and metadata
-$config = \SimpleSAML\Configuration::getInstance();
-$session = \SimpleSAML\Session::getSessionFromRequest();
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use Symfony\Component\HttpFoundation\Request;
 
-\SimpleSAML\Utils\Auth::requireAdmin();
+$config = Configuration::getInstance();
+$session = Session::getSessionFromRequest();
 
-$cronconfig = \SimpleSAML\Configuration::getConfig('module_cron.php');
-
-$key = $cronconfig->getValue('key', '');
-$tags = $cronconfig->getValue('allowed_tags');
-
-$def = [
-    'weekly' => "22 0 * * 0",
-    'daily' => "02 0 * * *",
-    'hourly' => "01 * * * *",
-    'default' => "XXXXXXXXXX",
-];
-
-$urls = [];
-foreach ($tags as $tag) {
-    $urls[] = [
-        'href' => \SimpleSAML\Module::getModuleURL('cron/cron.php', ['key' => $key, 'tag' => $tag]),
-        'tag' => $tag,
-        'int' => (array_key_exists($tag, $def) ? $def[$tag] : $def['default']),
-    ];
-}
-
-$t = new \SimpleSAML\XHTML\Template($config, 'cron:croninfo.tpl.php', 'cron:cron');
-$t->data['urls'] = $urls;
-$t->show();
+$controller = new Controller\Cron($config, $session);
+$response = $controller->info();
+$response->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/discopower/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/discopower/.php_cs.dist
new file mode 100644
index 0000000000..213731afe8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/config-templates',
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/discopower/.travis.yml
new file mode 100644
index 0000000000..0164f2a60e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/.travis.yml
@@ -0,0 +1,30 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.18.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/discopower/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/discopower/bin/check-syntax.sh
new file mode 100755
index 0000000000..6bbc93b288
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates lib templates tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/discopower/composer.json
new file mode 100644
index 0000000000..f254d0436e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-discopower",
+    "description": "Fancy tabbed discovery service with filtering capabilities where SPs can have different sets of metadata listed",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "discopower", "discovery"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\modules\\discopower\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "webmozart/assert": "~1.4 <1.6"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-discopower/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-discopower"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/config-templates/module_discopower.php b/vendor/simplesamlphp/simplesamlphp/modules/discopower/config-templates/module_discopower.php
index 498cadad83..a6354abb37 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/config-templates/module_discopower.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/config-templates/module_discopower.php
@@ -16,7 +16,7 @@
     /*
      * the 'tab' parameter allows you to limit the tabs to a specific list. (excluding unlisted tags)
      *
-     * 'tabs' => array('norway', 'finland'),
+     * 'tabs' => ['norway', 'finland'],
      */
 
     /*
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/dictionaries/tabs.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/discopower/dictionaries/tabs.translation.json
index cfa48b63ed..fb533b4276 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/dictionaries/tabs.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/dictionaries/tabs.translation.json
@@ -9,7 +9,8 @@
 		"af": "Noorwe\u00eb",
 		"el": "\u039d\u03bf\u03c1\u03b2\u03b7\u03b3\u03af\u03b1",
 		"xh": "Norowe",
-		"zu": "ENorway"
+		"zu": "ENorway",
+		"ca": "Noruega"
 	},
 	"kalmar": {
 		"es": "Kalmar",
@@ -18,7 +19,8 @@
 		"nl": "Kalmar",
 		"da": "Kalmar",
 		"af": "Kalmar",
-		"el": "Kalmar"
+		"el": "Kalmar",
+		"ca": "Kalmar"
 	},
 	"finland": {
 		"es": "Finlandia",
@@ -29,7 +31,8 @@
 		"da": "Finland",
 		"af": "Finland",
 		"el": "\u03a6\u03b9\u03bd\u03bb\u03b1\u03bd\u03b4\u03af\u03b1",
-		"xh": "Finlend"
+		"xh": "Finlend",
+		"ca": "Finlàndia"
 	},
 	"sweden": {
 		"es": "Suecia",
@@ -41,7 +44,8 @@
 		"af": "Swede",
 		"el": "\u03a3\u03bf\u03c5\u03b7\u03b4\u03af\u03b1",
 		"xh": "Swiden",
-		"zu": "Sweden"
+		"zu": "Sweden",
+		"ca": "Suècia"
 	},
 	"iceland": {
 		"es": "Islandia",
@@ -53,7 +57,8 @@
 		"af": "Ysland",
 		"el": "\u0399\u03c3\u03bb\u03b1\u03bd\u03b4\u03af\u03b1",
 		"xh": "Ayisilend",
-		"zu": "I-Iceland"
+		"zu": "I-Iceland",
+		"ca": "Islàndia"
 	},
 	"denmark": {
 		"es": "Dinamarca",
@@ -64,7 +69,8 @@
 		"da": "Danmark",
 		"af": "Denmark",
 		"el": "\u0394\u03b1\u03bd\u03af\u03b1",
-		"xh": "Dominikha"
+		"xh": "Dominikha",
+		"ca": "Dinamarca"
 	},
 	"switzerland": {
 		"es": "Suiza",
@@ -76,7 +82,8 @@
 		"af": "Switserland",
 		"el": "\u0395\u03bb\u03b2\u03b5\u03c4\u03af\u03b1",
 		"xh": "Swizalend",
-		"zu": "ESwitzerland"
+		"zu": "ESwitzerland",
+		"ca": "Suïssa"
 	},
 	"greece": {
 		"es": "Grecia",
@@ -86,8 +93,15 @@
 		"da": "Gr\u00e6kenland",
 		"af": "Griekeland",
 		"el": "\u0395\u03bb\u03bb\u03ac\u03b4\u03b1",
-		"xh": "Grisi"
+		"xh": "Grisi",
+		"ca": "Grècia"
 	},
+		"netherlands": {
+				"en": "The Netherlands",
+				"nl": "Nederland",
+				"de": "Niederlande",
+				"fr": "Les Pays-Bas"
+		},
 	"southafrica": {
 		"es": "Sud\u00e1frica",
 		"ru": "\u042e\u0436\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430",
@@ -98,7 +112,9 @@
 		"af": "Suid-Afrika",
 		"el": "\u039d\u03cc\u03c4\u03b9\u03b1 \u0391\u03c6\u03c1\u03b9\u03ba\u03ae",
 		"xh": "uMzantsi Afrika",
-		"zu": "iNingizimu Afrika"
+		"zu": "iNingizimu Afrika",
+		"st": "Afrika Boroa",
+		"ca": "Sud-Àfrica"
 	},
 	"edugain": {
 		"es": "Europa (eduGAIN)",
@@ -110,7 +126,8 @@
 		"af": "Europa (eduGAIN)",
 		"el": "\u0395\u03c5\u03c1\u03ce\u03c0\u03b7 (eduGAIN)",
 		"xh": "Yurophu (eduGAIN)",
-		"zu": "IYurophu (eduGAIN)"
+		"zu": "IYurophu (eduGAIN)",
+		"ca": "Europa (eduGAIN)"
 	},
 	"misc": {
 		"es": "Otros",
@@ -122,7 +139,9 @@
 		"af": "Verskeie",
 		"el": "\u0386\u03bb\u03bb\u03bf\u03b9 \u03c6\u03bf\u03c1\u03b5\u03af\u03c2",
 		"xh": "Ezahlukahlukeneyo",
-		"zu": "Ezihlukahlukene"
+		"zu": "Ezihlukahlukene",
+		"st": "Fapakaneng",
+		"ca": "Altres"
 	},
 	"incommon": {
 		"es": "InCommon",
@@ -130,7 +149,8 @@
 		"nl": "InCommon",
 		"da": "InCommon",
 		"af": "InCommon",
-		"el": "InCommon"
+		"el": "InCommon",
+		"ca": "InCommon"
 	},
 	"ukacessfederation": {
 		"es": "Federaci&oacute;n de Acceso de Reino Unido",
@@ -138,11 +158,15 @@
 		"nl": "UK Access Federation",
 		"da": "Storbritanniens adgangsf\u00f8deration",
 		"af": "UK Toegangs Federasie",
-		"el": "\u039f\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1 UK Access"
+		"el": "\u039f\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1 UK Access",
+		"ca": "Federeació d'accès del Regne Unit"
 	},
 	"incremental_search": {
 		"af": "Inkrementele soektog...",
+		"nl": "Zoeken...",
 		"zu": "Ukucinga okukhulayo...",
-		"xh": "Ukhangelo oluqhubekayo..."
+		"xh": "Ukhangelo oluqhubekayo...",
+		"st": "Patlo e Eketsang...",
+		"ca": "Cerca incremental..."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/lib/PowerIdPDisco.php b/vendor/simplesamlphp/simplesamlphp/modules/discopower/lib/PowerIdPDisco.php
index a0955cb32d..713feec1fe 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/lib/PowerIdPDisco.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/lib/PowerIdPDisco.php
@@ -2,6 +2,14 @@
 
 namespace SimpleSAML\Module\discopower;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Locale\Translate;
+use SimpleSAML\Logger;
+use SimpleSAML\Session;
+use SimpleSAML\Utils\HTTP;
+use SimpleSAML\XHTML\Template;
+use Webmozart\Assert\Assert;
+
 /**
  * This class implements a generic IdP discovery service, for use in various IdP discovery service pages. This should
  * reduce code duplication.
@@ -11,7 +19,6 @@
  * @author Andreas Åkre Solberg <andreas@uninett.no>, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class PowerIdPDisco extends \SimpleSAML\XHTML\IdPDisco
 {
     /**
@@ -51,12 +58,12 @@ public function __construct(array $metadataSets, $instance)
     {
         parent::__construct($metadataSets, $instance);
 
-        $this->discoconfig = \SimpleSAML\Configuration::getConfig('module_discopower.php');
+        $this->discoconfig = Configuration::getConfig('module_discopower.php');
 
         $this->cdcDomain = $this->discoconfig->getString('cdc.domain', null);
         if ($this->cdcDomain !== null && $this->cdcDomain[0] !== '.') {
             // ensure that the CDC domain starts with a dot ('.') as required by the spec
-            $this->cdcDomain = '.'.$this->cdcDomain;
+            $this->cdcDomain = '.' . $this->cdcDomain;
         }
 
         $this->cdcLifetime = $this->discoconfig->getInteger('cdc.lifetime', null);
@@ -69,10 +76,11 @@ public function __construct(array $metadataSets, $instance)
      * This is an helper function for logging messages. It will prefix the messages with our discovery service type.
      *
      * @param string $message The message which should be logged.
+     * @return void
      */
     protected function log($message)
     {
-        \SimpleSAML\Logger::info('PowerIdPDisco.'.$this->instance.': '.$message);
+        Logger::info('PowerIdPDisco.' . $this->instance . ': '.$message);
     }
 
 
@@ -135,7 +143,7 @@ protected function idplistStructured($list)
         }
 
         foreach ($slist as $tab => $tbslist) {
-            uasort($slist[$tab], ['\SimpleSAML\Module\discopower\PowerIdPDisco', 'mcmp']);
+            uasort($slist[$tab], [self::class, 'mcmp']);
         }
 
         return $slist;
@@ -216,8 +224,9 @@ protected function filterList($list)
         }
 
         $defaultrule = true;
-        if (array_key_exists('entities.include', $spmd['discopower.filter']) ||
-            array_key_exists('tags.include', $spmd['discopower.filter'])
+        if (
+            array_key_exists('entities.include', $spmd['discopower.filter'])
+            || array_key_exists('tags.include', $spmd['discopower.filter'])
         ) {
             $defaultrule = false;
         }
@@ -236,6 +245,7 @@ protected function filterList($list)
      * Handles a request to this discovery service.
      *
      * The IdP disco parameters should be set before calling this function.
+     * @return void
      */
     public function handleRequest()
     {
@@ -246,22 +256,8 @@ public function handleRequest()
         $idpList = $this->idplistStructured($this->filterList($idpList));
         $preferredIdP = $this->getRecommendedIdP();
 
-        $t = new \SimpleSAML\XHTML\Template($this->config, 'discopower:disco.tpl.php', 'disco');
-        $discoPowerTabs = [
-            'denmark' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:denmark}'),
-            'edugain' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:edugain}'),
-            'finland' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:finland}'),
-            'greece' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:greece}'),
-            'southafrica' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:southafrica}'),
-            'iceland' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:iceland}'),
-            'incommon' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:incommon}'),
-            'kalmar' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:kalmar}'),
-            'misc' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:misc}'),
-            'norway' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:norway}'),
-            'sweden' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:sweden}'),
-            'switzerland' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:switzerland}'),
-            'ukacessfederation' => \SimpleSAML\Locale\Translate::noop('{discopower:tabs:ukacessfederation}'),
-        ];
+        $t = new Template($this->config, 'discopower:disco.tpl.php', 'disco');
+        $translator = $t->getTranslator();
 
         $t->data['return'] = $this->returnURL;
         $t->data['returnIDParam'] = $this->returnIdParam;
@@ -271,6 +267,7 @@ public function handleRequest()
         $idpList = $this->processMetadata($t, $idpList, $preferredIdP);
 
         $t->data['idplist'] = $idpList;
+        $t->data['faventry'] = null;
         foreach ($idpList as $tab => $slist) {
             if (!empty($preferredIdP) && array_key_exists($preferredIdP, $slist)) {
                 $t->data['faventry'] = $slist[$preferredIdP];
@@ -278,37 +275,43 @@ public function handleRequest()
             }
         }
 
-        if (!empty($t->data['faventry'])) {
+        if (!is_null($t->data['faventry'])) {
             $t->data['autofocus'] = 'favouritesubmit';
         }
 
-        $search = '<script type="text/javascript">
-            $(document).ready(function() {
-                $("#tabdiv").tabs({ selected: '.$t->data['defaulttab'].' });';
-        $i = 0;
-        foreach ($idpList as $tab => $slist) {
-            $search .= "\n".'$("#query_'.$tab.'").liveUpdate("#list_'.$tab.'")'.
-            (($i++ == 0) && (empty($this->data['faventry'])) ? '.focus()' : '').';';
-        }
-        $search .= "});\n</script>";
+        /* store the tab list in the session */
+        $session = Session::getSessionFromRequest();
+        $session->setData('discopower:tabList', 'faventry', $t->data['faventry']);
+        $session->setData('discopower:tabList', 'tabs', array_keys($idpList));
+        $session->setData('discopower:tabList', 'defaulttab', $t->data['defaulttab']);
 
-        $t->data['search'] = $search;
         $t->data['score'] = $this->discoconfig->getValue('score', 'quicksilver');
-        $t->data['tabNames'] = $discoPowerTabs;
         $t->data['preferredidp'] = $preferredIdP;
-        $t->data['urlpattern'] = htmlspecialchars(\SimpleSAML\Utils\HTTP::getSelfURLNoQuery());
+        $t->data['urlpattern'] = htmlspecialchars(HTTP::getSelfURLNoQuery());
         $t->data['rememberenabled'] = $this->config->getBoolean('idpdisco.enableremember', false);
         $t->data['rememberchecked'] = $this->config->getBoolean('idpdisco.rememberchecked', false);
-        $t->data['jquery'] = ['core' => true, 'ui' => true];
+        foreach (array_keys($idpList) as $tab) {
+            if ($translator->getTag('{discopower:tabs:' . $tab . '}') === null) {
+                $translator->includeInlineTranslation('{discopower:tabs:' . $tab . '}', $tab);
+            }
+            $t->data['tabNames'][$tab] = $translator::noop('{discopower:tabs:' . $tab . '}');
+        }
         $t->show();
     }
 
+
+    /**
+     * @param \SimpleSAML\XHTML\Template $t
+     * @param array $metadata
+     * @param string $favourite
+     * @return array
+     */
     private function processMetadata($t, $metadata, $favourite)
     {
         $basequerystring = '?'.
-            'entityID='.urlencode($t->data['entityID']).'&amp;'.
-            'return='.urlencode($t->data['return']).'&amp;'.
-            'returnIDParam='.urlencode($t->data['returnIDParam']).'&amp;idpentityid=';
+            'entityID=' . urlencode($t->data['entityID']) . '&amp;' .
+            'return=' . urlencode($t->data['return']) . '&amp;' .
+            'returnIDParam=' . urlencode($t->data['returnIDParam']) . '&amp;idpentityid=';
 
         foreach ($metadata as $tab => $idps) {
             foreach ($idps as $entityid => $entity) {
@@ -341,17 +344,17 @@ private function processMetadata($t, $metadata, $favourite)
 
                 // HTML output
                 if ($entity['entityid'] === $favourite) {
-                    $html = '<a class="metaentry favourite" href="'.
-                        $basequerystring.urlencode($entity['entityid']).'">';
+                    $html = '<a class="metaentry favourite" href="' .
+                        $basequerystring.urlencode($entity['entityid']) . '">';
                 } else {
-                    $html = '<a class="metaentry" href="'.
-                        $basequerystring.urlencode($entity['entityid']).'">';
+                    $html = '<a class="metaentry" href="' .
+                        $basequerystring.urlencode($entity['entityid']) . '">';
                 }
                 $html .= $entity['translated'];
                 if (array_key_exists('icon', $entity) && $entity['icon'] !== null) {
-                    $iconUrl = \SimpleSAML\Utils\HTTP::resolveURL($entity['icon']);
-                    $html .= '<img alt="Icon for identity provider" class="entryicon" src="'.
-                        htmlspecialchars($iconUrl).'" />';
+                    $iconUrl = HTTP::resolveURL($entity['icon']);
+                    $html .= '<img alt="Icon for identity provider" class="entryicon" src="' .
+                        htmlspecialchars($iconUrl) . '" />';
                 }
                 $html .= '</a>';
                 $entity['html'] = $html;
@@ -394,6 +397,7 @@ private function getCDC()
      * This function overrides the corresponding function in the parent class, to add support for common domain cookie.
      *
      * @param string $idp The entityID of the IdP.
+     * @return void
      */
     protected function setPreviousIdP($idp)
     {
@@ -433,7 +437,7 @@ protected function setPreviousIdP($idp)
             'secure'   => true,
             'httponly' => false,
         ];
-        \SimpleSAML\Utils\HTTP::setCookie('_saml_idp', $newCookie, $params, false);
+        HTTP::setCookie('_saml_idp', $newCookie, $params, false);
     }
 
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/en/LC_MESSAGES/discopower.po b/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/en/LC_MESSAGES/discopower.po
index 30c54b1887..f628f7ea54 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/en/LC_MESSAGES/discopower.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/en/LC_MESSAGES/discopower.po
@@ -5,7 +5,7 @@ msgstr ""
 "Project-Id-Version: SimpleSAMLphp 1.15\n"
 "Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
 "POT-Creation-Date: 2016-10-12 09:23+0200\n"
-"PO-Revision-Date: 2016-10-14 12:14+0200\n"
+"PO-Revision-Date: 2019-03-20 15:27+0200\n"
 "Last-Translator: \n"
 "Language: en\n"
 "Language-Team: \n"
@@ -30,6 +30,9 @@ msgstr "South Africa"
 msgid "{discopower:tabs:kalmar}"
 msgstr "Kalmar"
 
+msgid "{discopower:tabs:netherlands}"
+msgstr "The Netherlands"
+
 msgid "{discopower:tabs:denmark}"
 msgstr "Denmark"
 
@@ -93,3 +96,6 @@ msgstr "Europe (eduGAIN)"
 msgid "InCommon"
 msgstr "InCommon"
 
+msgid "{discopower:tabs:incremental_search}"
+msgstr "Incremental search..."
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/nl/LC_MESSAGES/discopower.po b/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/nl/LC_MESSAGES/discopower.po
index a1922cf526..d38653d098 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/nl/LC_MESSAGES/discopower.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/nl/LC_MESSAGES/discopower.po
@@ -30,6 +30,9 @@ msgstr "Zuid-Afrika"
 msgid "{discopower:tabs:kalmar}"
 msgstr "Kalmar"
 
+msgid "{discopower:tabs:netherlands}"
+msgstr "Nederland"
+
 msgid "{discopower:tabs:denmark}"
 msgstr "Denemarken"
 
@@ -54,6 +57,9 @@ msgstr "Noorwegen"
 msgid "{discopower:tabs:misc}"
 msgstr "Overige"
 
+msgid "{discopower:tabs:incremental_search}"
+msgstr "Zoeken"
+
 msgid "Sweden"
 msgstr "Zweden"
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/st/LC_MESSAGES/discopower.po b/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/st/LC_MESSAGES/discopower.po
new file mode 100644
index 0000000000..e44e305067
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/locales/st/LC_MESSAGES/discopower.po
@@ -0,0 +1,34 @@
+
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: SimpleSAMLphp 1.15\n"
+"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
+"POT-Creation-Date: 2019-12-12 14:14+0200\n"
+"PO-Revision-Date: 2019-12-12 14:14+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+msgid "Incremental search..."
+msgstr "Patlo e Eketsang..."
+
+msgid "{discopower:tabs:incremental_search}"
+msgstr "Patlo e Eketsang..."
+
+msgid "{discopower:tabs:misc}"
+msgstr "Fapakaneng"
+
+msgid "{discopower:tabs:southafrica}"
+msgstr "Afrika Boroa"
+
+msgid "Miscellaneous"
+msgstr "Fapakaneng"
+
+msgid "South Africa"
+msgstr "Afrika Boroa"
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/discopower/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/discopower/psalm.xml
new file mode 100644
index 0000000000..dc0adee39f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp DiscoPower Module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-templates" />
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.tpl.php
index 3472a6e303..15ca23c9ea 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.tpl.php
@@ -1,23 +1,30 @@
 <?php
 
 $this->data['header'] = $this->t('selectidp');
-$this->data['jquery'] = ['core' => true, 'ui' => true, 'css' => true];
 
 $this->data['head'] = '<link rel="stylesheet" media="screen" type="text/css" href="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/css/uitheme1.12.1/jquery-ui.min.css').'" />';
+$this->data['head'] .= '<link rel="stylesheet" media="screen" type="text/css" href="'.
     SimpleSAML\Module::getModuleURL('discopower/assets/css/disco.css').'" />';
 
-$this->data['head'] .= '<script type="text/javascript" src="'.
-    SimpleSAML\Module::getModuleURL('discopower/assets/js/jquery.livesearch.js').'"></script>'."\n";
-$this->data['head'] .= '<script type="text/javascript" src="'.
-    SimpleSAML\Module::getModuleURL('discopower/assets/js/'.$this->data['score'].'.js').'"></script>'."\n";
-$this->data['head'] .= $this->data['search'];
-
 if (!empty($this->data['faventry'])) {
     $this->data['autofocus'] = 'favouritesubmit';
 }
 
 $this->includeAtTemplateBase('includes/header.php');
 
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/jquery-1.12.4.min.js').'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/jquery-ui-1.12.1.min.js').'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/jquery.livesearch.js').'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/'.$this->data['score'].'.js').'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/tablist.js').'"></script>'."\n";
+
+
 function showEntry($t, $metadata, $favourite = false)
 {
     $basequerystring = '?'.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.twig b/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.twig
index 5fd06df1b6..a21908ae23 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/templates/disco.twig
@@ -2,15 +2,14 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-    <link href="{{ baseurlpath }}style.css" rel="stylesheet" type="text/css" media="screen" />
-    <link rel="stylesheet" media="screen" type="text/css" href="/resources/uitheme1.8/jquery-ui.css" />
+    <link rel="stylesheet" media="screen" href="/{{ baseurlpath }}module.php/discopower/assets/css/uitheme1.12.1/jquery-ui.min.css">
+    <link rel="stylesheet" media="screen" href="/{{ baseurlpath }}module.php/discopower/assets/css/disco.css">
 {% endblock %}
 {% block postload %}
-    <script type="text/javascript" src="/resources/jquery-1.8.js"></script>
-    <script type="text/javascript" src="/resources/jquery-ui-1.8.js"></script>
-    <script type="text/javascript" src="{{ baseurlpath }}js/jquery.livesearch.js"></script>
-    <script type="text/javascript" src="{{ baseurlpath }}js/{{ score }}.js"></script>
-    {{ search|raw }}
+    <script src="/{{ baseurlpath }}module.php/discopower/assets/js/jquery-ui-1.12.1.min.js"></script>
+    <script src="/{{ baseurlpath }}module.php/discopower/assets/js/jquery.livesearch.js"></script>
+    <script src="/{{ baseurlpath }}module.php/discopower/assets/js/{{ score }}.js"></script>
+    <script src="/{{ baseurlpath }}module.php/discopower/assets/js/tablist.js"></script>
 {% endblock %}
 
 {% block content %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/discopower/tests/bootstrap.php
new file mode 100644
index 0000000000..35f80ea420
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/discopower';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 0000000000..1f851db2c9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
@@ -0,0 +1,5 @@
+�PNG
+
+���
IHDR�����������A����bKGD������	X�����	pHYs���H���H�F�k>����IDATH���!
+A���bl����A1{�V�Y0i��x��x�v����D�K_��O��9��a�Ք��}��^�JaȌ�0b�vBA�$,�Q���"_44���=�Sqc�yE��I�W
+<kA����i�0��<a$S��y.���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000000..a82e07c128
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR����������G#7v���bKGD�݊����	pHYs���H���H�F�k>���IDAT(�ch`��p���h��4�i���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 0000000000..f323d2943e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������������D���bKGD���1����	pHYs���H���H�F�k>���HIDAT8�cx��a�"��[�n{1�qc��po"��?3}`xR���1�s?��^^bxu��u)�뉣h���W�%R�|���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000000..8adf417e90
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������������D���bKGD���1����	pHYs���H���H�F�k>���HIDAT8�cx��0�F�ѳgύ��ax1��e&ë8��!obަ2��fx�����#3�ǵ��>��QD��@�$�.5o���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000000..3f88c6b520
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR�����������A����bKGD������	X�����	pHYs���H���H�F�k>����IDATH��ϱ
a�����\!V��J#X����ЋD}�
.f�>���>��P�կx���x����q��жuɚq���f+��6���[��\�‡����כW�T4r���6:]V:�,
(�Ŵ�8�yG-(d��	H���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 0000000000..d022fb79b5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������d����2������bKGD���1����	pHYs���H���H�F�k>���ZIDAT�cx|��Nhã����2<hc�_�p/��n,�
�[_n�g���p=����w2\je�X�pa��&�s��b8��p���"�����Y{���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000000..e723e17cb5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
@@ -0,0 +1,32 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD�"�b����	pHYs���H���H�F�k>��'IDATx��{he�}�?g����{��1)�����]K&qq�U�4kbiK�R(H��B��P(I�vJ�_��ӮIV�@nB�5i�N��iG�jq�&
~A#Q����rX'����9�:�ܫ{�3�E{�=�y�o~3g~��Mp�&����1Xxh8<�#dlЅ�Mx1�&��$�5~��V��	��c�$��ױ���,����	��ƹ�i���N:�Z
��ߊY���>�"�B���H!�������-C�u�8t�}����8�!�B��	*�OF�.[�aͲ��l��B&���1h�>��M]hN���4MAb���̐!(�hE�1�5jձcO�<6�e7��,e���S(��f�o�16+3�y
+JR|{�^3�^����{�88������~'����pxh8<4���
�g����������2��n6e̘�����{�����Q�����pӀ��P�A��iۺߖ�f�S����(�D��'�L�6=����T:s���f�q��羀l��.c�I
+���ǧ�=�i���M�>��ڠLN{U��&������&��{u��o�����.�.��4~#����pxh8<4���
�g��Û��p���^i����/�0���TW�c����Q��� �@)��y��u}`L��Uc���%T��������ȥ
+�A��R��@�?��P�-`����BKl�
b����Z}�������Ш��͢uJ��%U�]�K2��e
ts�Y���@,e�e���豅r��jcܭs��M�n�0
A���mP��y
�D�K(5�,�lN�&b�D�m�rwYDV����t�e$��謷�
�L���[��C��0O��	P��&��0����+��;�
�g���3@������pxh8<4����Y��`��O����F�Z<��h�\J!c��`����j
�;TK�Vr�0��ʹqc�cGz�䟾c�[ ̕P5�t�h�)���ti���З߭ty��׎�����&��M/Е����S���u����@��݅���n���b�9��`y�9�󉡔�Ya�SX�0e���q�J`nB���g����b�����3���4P�- k�**�@HC�z(}�򯂬�U����cj2��=��Ob�����3�
����R��05���1U�\8SMi�U��}���΀�l�Hl�N�
���J��q+%e��7s���"�<։�ּ�z����M�L�T��ƾP��1f�1i��Ѹ��Vp������pxh8<4�z�A��+ o`�I_�R�����~�~��f��սh`�Ic�K�h����Q�p��xx`=�j�`]|S�B�(������(��v���F3�4v�؁6��T��4
���5����:���*��-D#�n6��a��J<U���~�y(�1��(,�|t�z�}��d��j��0u]PT��-D}@�����
+�n�+[�Ύ� A�B�T���(V� K������BT<𑹗[F{�m��=��-�ڤ����$��.��JR�U
j��:X��e�n�e���bՅ��"C	��e2�@�Ј�݂�	�Ѱ���xxh8<4���
��1@kX6I��<��M*�Љ�Ѣ�+�b���04(�.�M3Z�<]&i�UuY�a��^2�w�ͻ�ɨn�U�@�n����E�4
���O�Us�.J���}��dw�Ed�p��� ��me^f���mF
gg������T��G4�Ѱ����m��������N��է��N�c�����������5�L�xi���D��9�|��%ܔ�h�P=�áb����o�p�VBG�X ,�#E��+�\�^��o�ʼdM��ɳ]�d����.�@ 䮚���D���e��FU6'g6��)��52p|��f��X�_a�"z��x���� �w�.c�t�
+��
�g���3@ñ�`"�i��K�9���s
D07�
+ӕS��E�oC�Y�Z�l'N��~_Sƞ��y���a��xK�������z�-&|(�ϜC�K������Xg�d����5Ig��8k8YTL=�,/
+]s��w-~��t�����e��	^�~�&6vh�}�Զ�:g���?m�bG!����1�:O8����]�%��2�����v
+�E�@�5"�6	Y�rXcRb��ݎ���E%���`�#�D��r¤��Z�:�ϛ!�x�R���h�!��}v�۴��ϳ����x�y}FrA1#�*�u�T�?>��!�x#�~��G���k���@3K@�:>P�R�����M�A|��e]K�g�F.B�����t�l��OY d��!(v�V�X��%m�#���I[RR�`2�T��	��H��w�Y�u=���b�YPEc�U%�&@��Ĺ�]��}�q���o7*�G�L�
��e�QX�5�U����-����³��8| ���_�ݟ��5\�5�p�VH^��\
�Fآ��a��a��5�l1�4[��#�b�o�P�1�E��is��wMJ'5�T���06�B|I�,b�����`�ՈP���X�k��B�$�[��-E�OHt�|�3�D�(i��d9�N6@x/ؠm�(�#�wj�P�t��/Z���ob�q%[:���3^�~a��5���5�����|E닃�^�E��$�L�-���_s,
+߫��㕔Ņ�&��
+�_�,�������#F�}����&���.��<4���
�g���O��rdh9�����M7L(5꓂.���?M(�����stզ��-?�:��[ڧC�r�]�'��YB�2�l�C|
l�eXS��pG��0KcI��~�u�L0/��y�Lt�r�I�?�R�%�����-�w�Ƿ�h���$L��J��V���Ϳ�Ӣ,�����g�
x�_7��l��4�*��u�M+�@�x�<}���q>��<�#��`�i�
+:=��*��ۿ�{��)��_��8hs���������p�CWғ�K�`B]H��"}���_P�N���t�Q�l��1Y�Q�h+����&?��x�5:�	֘aY�ҭ���=\��En��������.�Yʸ��J���E%uTj5�����F�'������b;[��v�ט4�u��6]�lkw�3�÷���,: ��%&��
�[|��|��|Yi�q`:�����qXc�2+u|~/�wrz�[j-�I>#���,�9�Q:�#,2�����5@�@%��S@@6ÅJ�{��6��{��)h���W�~q]����t��<�+|�'�0O�a����6���3�U��HW������l;�����'�Z9�Z\�o��O�嵁���e�e�Ƣ[o��da�����rEm&�ʧ�������3m���6��=�g�^S��x
+Hj���mi�(v��ۈ�{.�h�_���%�8��nF�7y{�����O���FS5�:�����/��ա���W�P�H+b�����Gx��/9��I�Yy�.����M�t��T�eە,�ѿ�-�R����e�d��
+��;�Ә:�9k��T�5��m����������E�G��|\Wu����ǣ��@^L���E���
��4���
�g���y��;
+J'U��䐎N׷�<�p2m���ӫ��.Z������Z5<� V
+,��p�3��w�=~�3j��ǿě�#����ʭ�|�S��f�yk��=C�n1]�C�'I_O��*,�J՞�D\\I���}�E�\�$�M�(�E��\�߮�?ƫw
+�����NJ��E�b�6��t�z�:<��u��d��k��vs!��PfM��7dT����3	��*S,�AZl+N����l�R�&{�I��T�G�O�*�M~�;������XFS��j����^�Q���N�n3�Z���0Ne�R�]�3�8��<�$@�˜c.�t�=�.{e��'�TI�s��u����>-?B��p���?���X�J	$�x�QJ�}�!#��Ո2�Ht!VɽV�\'���Y�3�6����6Yu��JOAa�[5e���]p9=7����t���_�y��?�OS���<V��q.��Ի���;�8�~��YE����KSȀ��Xjq@M��
���/�p�X��۴�[�S��c7�'S6	�E� ������_Ձ'�_��)^3�b�h���+Z	��"rLz�ZA��#��[��'�?�Z7{mZl�Ӭ�Q�De+^��o�*D��g��r؈;/�."��HF�Ƴ5��)F	���2�c.�W�~�`����VEl����6�R����8ظ�ky�k�.����`��Fp7pps"�"��KR{(us�[�%6
u�s�ͻ���,BD�����/�ȷ�_Pt?�Y�Vy�.s���Y�3����3������\�V*#��y�f2j��g����A��Ѣ�
+�g�-�5����Fh�-1�9�v��<�s	�����m�� =/�_f�WX�M�&�לi�†RvٗQt��_���"������Q<�(�1[��_~��b"T z3��sxh8��������p�`Z�/�NΧ���F��{�"p�i`��
+�gsO��s�.�G}��t<��9�ug����g�R`���&��X�t�岇�}�	������7����2J�X�e\��	08j=�XJ�Ql�l����x�6z(\5Q��I��=�l
+8�7Ɏ���E�a4�O�;�-��M�1Iy�vV�y^�b�EN��sQ���Cw[
�2	��V�Ǽ�	o�yw�7J����K'�Tu�l�>_�i���T��<͛<�iM
+�p������7�YMW���=�ӡl(����u�+���^j��>3��2N�묳}��j�H��Q
RT�Ȣ�� ���n�fݮ�~�+��c�iQ��<
����Ma=��|�*����
+�$@'��Ԍ��ǕqUO;�5~@��eI�2��9�w��"��O�~��s��s��k{‰��$�m��>����v�z��^2���v�ow�`a������4c��M C�����b�>����q:��o�=�-�p`_2�ng:6K��XV,����2�Ǿ��6���
�g���3@�� ��ś�s�a����R��WWB
+g-N�;F[��Ւa�A��V�L�F�<-m
+VbMC����7���K)�X����P�y�
�s�~��=�����<�ܒ�{�x!�=����Ãq�R��l�]���/���� 0�l)'�}�#�^tX��孋�t�8FC�Y�$)�PUBE�(~��Ҟ��V�2^��*SL�H�l��S��'IA[�������Z���x-V�"ȥ�J�+���\�|�5u�W��nLJ�k��ܟ���(0�0����JyꞄ���a���f��g����6���
�g���3@Ñg���[�}��Z����Q�k?ҳ=��z�I$Т�:�9FW��m�x��:\(�W���+��e���F�9��,��*�!Gh�D��L��8�[v��o�����)�A�a�K�5�S/�)^c����(��W�H�N�W8T�r=op��p]MC�O?���*��
+D΢O��b/�hs�0�ڜb�9�1C�9-����o�ۿ���ԗ��u���Q��Fc���|W�%@�HB�2�9�������/Dx�D`�U:�Ƈ�gi����"`�%��ᄽ
+������t
�E`t���6�2k�)P�E�ѿO,��?�k��_�yh(/����=@��u
�g���3@������v@]��<����]���~��WD�`��.��f���~�o��ʈ�N�VA��߈�ե�M�����
�^��y��M�Q|��ߛ^-{o�~��>��w���Ѓ
+��(��g��X���ץ�i��&�X
+u��D�U���͕l� ��ғޥ�ߞ���k�������PH�H�C��J�~��S�@O�� �׋�ѓy7���
�k {��25���of����ϫ�o���{���'!�'���Z%��q�*)�g���C\���#��\���'��0���P_���WL��7��&AlJ���\��� Z��p��,���Y�x��j�c�����O�(6z��I�V�� u�:ג���T��D��O��9�ׄ�Q<��*y
=���2��~����/?J,����WJ�Q�W�>����W��u�?��#G��/����4�"�K���{㧏�',I��ҟ综E;���|R�ݠ��~��W�7i8�6����pxh8<4���
��r�<}8� kG�o;��u�C��P��v�)��A�<$��ց;��{l��� ����� ��#`��F���C�!f�	Ӆ/`7��(��0R!9�9�z���@%!/m�]���Ad��hv�G�����3@������pxh8<4{����P/ 3@�}��	B&�^�16�{.
�����ߠa�Q�o
���2l���mt���!\%@�X���?5��ճa��~
��ʠM65wk��a�)T���F��_�
+2�$�x�5�_9!�VxRd�1!}����'�`�$����Uԇ��r�?�	�Q
+�`7`�.���k����_V����zԄ��p�]]�GO���LXCk�3����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000000..1f5f49756c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
@@ -0,0 +1,18 @@
+�PNG
+
+���
IHDR�����������IJ���PLTE.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.����o���YtRNS�3P���/"Uq@f`2�
!<BHK Z#'1S,�4���j���8E���|��������)��Q$�
+��b�J��mߜGc?o�h�@^����bKGD��H���	pHYs���H���H�F�k>��dIDATx��]c۶�H�阒]�K���d��%٫뺮��lm���w]����|�p��X�m�-��}<�w�(1$��	;�F�@��%��?����B,Lh{�t���#���T@�/?j�9	m��N� #���+`��`����I�
+��_�-s�ʹU0�M��[��
+s�4`x��š�#��
�D<�~؀�K��.4�]`��PDDDDDDĈq������Ek@����A�~�*���	!Y���X�`hv3\LX��Ot�J2b���ؓl�QI<��� �6�-X�lֈ�6�H��|=j�`E�iq����Cv:�q���C?�?���x�,��r*t�ݻ}|;�kP�4���d�Y����f����K��~[	>�X:+�i����ĆQV9\����e�'���A�tOS�:7��2����YsxM�ہ��B���&���z�>n�C��@��r@��*�a�ӝ���%��MFDDDDDD�T�ߖ���H,���E����RU��n
ب<��V-
@�/Nm�թ���������Hw����*�+��#��$o�e�{�% �7\X��ǀ���2��~0��&n��sbA,�D��
�A�V�I��|�
�Og���鴋�	�7�y	7Jf�����:_�w^��H	v{/O�9���<����Y�`+�� HRٰ����[��?��
+������=���c""""""F�˽�sG�<*k9c��E�8薽�������zfm��r�1�N�������nq�w��&=O�\}K`
+#���2��~��L�|?�m>�\�f��͹�:}�4ᦋ���{�)�n[��
+�̰E
+KY��D�ۇ-��	�+�Kl=�Ӄ��L`љ�|�%��n�	a�	���N�#��5�	(4���?�����EDDDD\o�W�Ffq;��\E��_������,���W!%�zE!F�¶.�(USHQ0d�w)T���8#p,�x�B��K���� �*�x��X��E�e������
+K솎%mK��X~s�FE���~������tdc��a��I���1��Af4��dH��c�G�S�B`��0�wev`����"�{��	�.�GDDDD�,d�O�6�k"qk��Me�fS_����U��KŌ&g~>n� �H�})��L���F%8(�)r���!�[4统qQk�0�m[Le���_�7���0�@>1 X0A��Z����Vc�E�V ���Lt�k�3�EJ��44�Zﮊ�N`rt�>`�˥�	�	�
A��HBLH�@��c���Uq=�j������cM����2�s����J���CL�iR �NQ���������0=���Yi�-�|4�V��]��]��B^�ޞ���_H������$�<�$�	
+a����=��d@�	(Z�Ap_�}�~s���:�N�{DC>����m�^��ƒ����S�&�, ;�N����&�B} ��<_A��B]H�u���N(B�0��{h���1�IK����Ds��j����'��M���8�.�ӫ1�h3�df}mq���	��n�U{��L�o��z\=?@	((���e�|=ơ麄�C�i����1r<|�OO�;�
`��H��p�Qy�zԈu�����Z���V���Ʋ�!�)��5m�C���2��Ly�g�;���֑�R���jW�a@��@V�L�&W���ru=Z
+�̥��=U���5}���������7�;b(�����nP&�s��k�4�����8�ͥ��0���1�U�W�v�k�18dq���T��ՌE]qH8�������G�F�����K�����'��r����Or���r�̧��6"fp��T�^3c��"�����n��Mم-�/��W=�tJ,��X�)���{�P
Rm|K����>mX�8v�5h��<������_{ꘀ�Y�F�|&_G;&�>^�����W⁃�&�K���(��81�EB@F&��;"L���'wfw��E-6��o&/̫'X�e,>~�ee��|���A����=)	d��Q�`}P[���K��N��˂����/�~)����O[d�O=�3E�l5'Y�$?��7�m���Tzզ.�\��.��` WE�����"""""v�)��V���<���K�ZX.Ex�~Ч)���ߚ�����W_}�5|��s��/!?����'poդ���tC3����@�Q�)��t��`���b!,dY9�6A2����������/튮���n�t�TK>����#]�L;zq�J���r���²[��\-t�ҽ�5
@�ͷϟ��n�T@��+;��c���Qh�C*���T�ڙ��A<Sku�µb�E�
/��$�Z���.e�j������_ʤrWaB6d���(��S�s[�|���竕
+/5R���(�4X������76����`3|���P��p�'�H~<R?M�2�)�  ��g��Vp��B�n�=�|W�ͬ\��V0_�81Oׄ�Kz||lP_��ω���lxX;ǀ�Ju�<��Ng[��]=�(�#]������p�P�a���i�������s�f��
+V�z��]ౚ������z>�Vr�?�f��?������
�Q�1�T`��} H�k���,{�VZˋT��ϛ�?I̯u�QK�LM�e͆��~��q������y�m0�9�S�;���j�����5 ���i��Q��]7k0�U�ޭ���G�kX����3#���lY��_Цx����j޶9��`�#
+M	[z��KuO_z˿Dܭ��*��kOJ�(7��n��\�e�
I�T�ƨ�l�/�U������߶uw�.�~���;#�r���.�����8
�o# 5L��h>1�i�����p��V�M�?�/u7��0� X@��L��+M�+�����{��Fkt�{�ŧ89�0`���. ĀC�R+\��/��t�R����;
�TӲ���]�aL���|�efđ��	�>�ۣ��G�|�P`P��8C1K՛�A�̍<�2��ۂ��K�r�l@L
+L��������8�@�E>`n�����PNԍ,��p�����E��Ɔ����Z�FlÎ;�����F���7��Ȯ;��
+��s�wSz)g7�{r�s��S��gȋ��(߄~�AWytX��$�NV����R�_��<6�p.�O�8�O[�OdDk>_��O�O�}����JS���d��mV�?�W(_��m� ��j���~=H IԁF>T/��{*]IGJ@i����qam�NF|Q�5���0+���E�S8�:�v�`p~v���j:B�����p96�o��ys%��������
�|@H�����]��+�@��t]W�k}}�����7��Fʮr����A�����B���\m�-�_�2PY8�������x�ՎN�.h�~���@+7��z5������t�_/������/�?���0�S>��)���z�i0n�/�B����`{D��W���#`����B��o���[,�g��FVЁ�pP߾���C]Bz�� ��,X�����X�fԃ����A�:H��� k�7��d�Z9��oc}o�]�0�vd�:R]�0�ve���]刈����j����у����|
	�?�+(��OǍ�+	�#��ys���ߍ�n�p���Fru<��.HȺotM��3h���}��߆P}�������˗��v�����P�}mǀ���?���W��Z@���������}���������@��@���FD�������l����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
new file mode 100644
index 0000000000..618f5b0ca7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
@@ -0,0 +1,30 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD�E�;�-���	pHYs���H���H�F�k>��mIDATx��{leG}�?g�K��$����U�!�>T��؈�J��i6A"�V��R%;��"���*UP)�
+�/���z�RJ�F��QP��z��BQH�VU������5sμ�9��^�3ߕ��{~����7s�7��<���.��`���� c���Ab/�@�[�V�D��0��3AX9�0�N��_�B���&���>~�>�
c�;ab�D�ߎE����Q�z��'k���M�ayԉ��6�!�:u:�:@RŤ�B�yDD���'�L��-�f�]S��q!��f�
+S�Q�&�S��7MC��r==3dJ��{��f�Z���S0�Ms��:0K٦g�ʿ��&H�U�=�mc�4�i?UĔG��U4�hc��Qb�]�!��hL���W/�
����@������pxh8�~�|�A��Qf?�ێ��1f¸����=u����Q�GJH��p����PϠI�w״m췥���ԧ>2���"�WÓP&{��n����T:s���f�q���H@���.c�I������~�S�s+�^|B�n�29�dH�������]��v�-ˌ-m�e�h�>�����q&ت��g�9x�#c�n��~!����pxh8��4^�/�
����o�#�Z@��S���^��4� KZKP�d�9���C@F[�����,��a+�����]8��v��K�qHl�w9ק�84�KB��ץ|��&��#��[�\C�����`��R��!�����:�F
+z��C���6��)A���T1wU.I�җ!4��ig�3w��������E:��q7����n�0uA���mP��y
�T�K(5ͬ�lNæb�T���rw�DV�]��t�e4���7�
�L���[��C��0��P��&��0����+��+�
����@������pxh8��4����Y��`��O����E�Z<��h�\J!��䞋��j
�;TK�Vr�0��ͬq�cˇ��u���a����p����E{B�w"�K��5���n-��c"w�v�T�6
T�hzီ|6�ŝ���Ι��N{	t��]��K��^m1(�6��m�3��'�R�f���`Ô�� �_�>��j�,�*�-E)�e��{�U�,��
\u���oV��:
`o��m�Ke�t��_W��O��dW3���Z
Քrv|�~^�g��`j�yc���p�*���f���b�]�M5��9��.��L��N��q+%����ۯ�0�vc�c�J��E�M5���kk�#I�<���x_��	�I#0D�w��4xh8��4^�/�
��^c���
+����d�r��DM{w�Q�t�e�{��^�`��b�r./��M:0գ��*����z���`]|S�B�(�e)�h͎/V����ܮ�"aO!�o�
,�u�^���Љ�^�=�z��t`�WeCC�MQϱo���0q��%���U�o?�<��@6��HG/����������uAQ-_�u||����ִ*2l��ٍ�uG�@� j
!�B���r�����	q�L!*)�h������.�V�{3����-��!�w�$dP�*�����/P[�t1���l3�hl�y�p������0b��g�L�} �3���$�%\/��.)TwQ�"uK7d�+�2�!��@������pxh8��4�'��aY$m��f�6�lB'�.D��
��Р��x7S�x��tI��eW�e}���d0�R�W��^ݢ��0](U�݋T�x����|��T�|����@v�^Df׹Lb��(�2��H��0n8;���_�Q�O��}D���&3{��Y��W�w��5*��e˗?�̖�G�
+�:H iZӖ)/MP���(:�!�/�|B��[i����:�Gf
�L�`�~��:z$aa���^����ʭ|P�- kbݞ<ەL&�xJ�AABȼ�Hvᑢ�[�yS��ə�w�NJuy��%pw�0�_a"z��x���� �3i�1|���=����@����%�JW����A���m�\����
��l��X�m9+�(��)������S��� or��ro*E`�Z��1��&=�ޗ�g�!�Rt<<�A.-V���+�l�|����suK��,&�ȇ��%����y�q�s��(A�K�*�q^�~����anb�1`�6��G�P�a�&.�	�)b���muL��I���fnE! k̠Ò��c��m���c�ȱD�-B֥֙�D`:G��e�tQ	��7�0���0��������YQ�Ӕ،?�mb�/�e׸L{8�<�
q�{��X4��$s���D@����s�9�����e8��\c(���Y���"�r���7��q6�u-	|��B����R���i�x!��9^P�HD�����g�t7K���|��2��"�.�t���V����w�E�u>�b�������f����a?q�h'y'r�y����#\��&��
+o+��Ԫ������|�Y��%��_Hp���"����k��1��*ɫ���U[��&x�9�xA��s�mf�e��<�_����7�;y�6m���i
�
+:�[��)�EB���7�̰����8f��CH��`⾿�h�)�����}�(�%m���'��&���
;��(�ݚ!�{:^����R��@���N���Kү"�*�<�V�敡�=��o�h~q���+`6I��i�I<#�����Z=^IE\`�0]1����%�D��A��^�a0f��,���c %[�Gxh8��4^�/������rdh9�����M7L)-�ӂ-���?K(����stբ�h-?�:��[ڧC�r�]�G�(�YB�3�|�C|
l�eXW��_�x�V8Ɗ�b����bQ����7�����V�4J�]������l!��=�
D?��'a`^����a�q��8���:-��O��YP��x�ۀ���֝��X�5Q�"�Gִ����W}���
+���I>ȓ<�c��b�YV
+6=��*��ۿ�-\��įi|��BH���J_F�Wx�CWғ�_��K�`B]J��"}�`�_R��β��&nDsp����t%G-�^���V�����yIc�b�9.hM�u����K��ĭ��6T���6��5Ko(�
+%Hz߲�:.��n�z�ōO�>���c��lpVZM_gڰ�C�v��eG{�����<_d�����0՗e���N�%N�y�ƍ����Ȅp��~�Ú�/���k�������n��������|��(G������#.�s��9�J�ۇ��l���[��6�ɻ�&�.X���{�����SDf�†�<����y?O�~��ƅDP���*~b���gco��s{;�����'�Z9�Z��.��O�孁���e��U�~?�Ӆ1N�3��ڶD�(��1Gx�x�k�S�H�I~ی?O��������k���,��i�(���ׁۈ�{.�h�_���5�؋�nF�7��0Q���O����S5�:�'����/��ա���J�r����
�.���KN�wu�e��r>n��-�U�$U`I�v%�����.A�U����e�d��
+��;�Ә:�+�a&�XĎ �y������������������G�с���	��"��4��pxh8��4^���	@d6�((�Ԕ{�C::[�>�H,
+�ɴNVN����hr.�~N������Z��`�3�᝼���K��Q�|$�%�t��!�Vn%�=�*�7����f��g(�m!fy���"�k�I6Y�/�eZ�ٳ���+���z�g�6W8ɦbQ%�y�{9����Ï�*ŕ�#��7��b-t��X�͕8y��nO�{]�!ټ�*���\� �(��p�2.�H�ٙ�d�.�^Z�(N���&�l�2�&k�	�U&ף���#~�.���7������6���58A7����}P:��BlkU�[�8�)�j�w0�$��W� ��!s\�������QF�n(qRK��:'�X���@����=$��x����|�5:��@��]���2�S�i�.�&��
+��$`
+8�t�����S =�&[#�߫��U3���Wҳq��^H{���➇�Z���4������"��A��H��#����U��0�+̱�1�Ɏ�;����O9���"�D�E
�C+n�U:�|a��ɔ�M|�?H������W1�$~=�k��U�џ���V������V�����l{���7�	�����^�;<�,�t[������T"��3SU9l��˾�H���x^�&�a�@���)�E��&�<<B4�(b����p������Ƶ\˫\�u��f�����7r����������^��Ci�[��.��h���_�^��mD�"DD�_3��e�������e��X�	�,�B@�fU���/�?���g���B�R���C�&��2���P�8��@3ZtS��<����v7�^#�另�;c'�Nȹ����6�g[�J!Az^ ?�<̯�oɛ�_s[Kg{(e�}�E�~J��,�m<<�����U���g
+"&B%��7�~�{��/�
G�l��4^�����j�����Ԓt���cA��0\(�����ܓ�Ԡ�Q�8��YN�Bݝ�?[���R��$�k���\�{�u���׾~�Q���q�)�8���z:G�G��UK�:�
07��6�-��
+WMY<�����
��2�Ѱ��$5�&v�}%��8�)#9&)/��K^2�+��B̳�i���\Ҥ����V�}�LD���1/i��n�]2č��>��I?U�7x���G�4�c�*�i��
+�5)�ñ>�wH�����f5[q���O�.���d&J_�~W\`G{�
|-���e/���Чk��d� E�����(���N�i�v=����C`�̲�Z���+���%m
+)s�!ī�6Fei�N��%���O*㪞v,s��@��%����4���tS/<E�%��0wr��k{ʉ2b�6ɻ��*���;�����zs�]�۝,�B��!,ų�uM�zȐ"��={����O���E����۴��w80���ۙ��%�\PL����
+��H�[/�
����@������G����9��A�Pi�G
+ѫ+!��'��^��u'þ��:�Z�@�LxZ�:�Ɩ����oQA_�RR�`��E��,���~�]M�y_��xD�$��&J�B�k�Q�@����3����=�A_��هA`��RN�#�"��tX��孋�0Z죡�Ԭa�t����R��Mi�C-�k��r�a�fH4@�C��ܓ���-��`$�~����Ul�$^�Ufr)�0�*-C�n9W-��@M�1��a���@7�g!�7
+?̣|�l�R��/ᭁytX5��L݇��p�����@������pxh8�`:{�1����J��5��#;���ǾD"�-��s�ct�Ln3�<D��B���d1w]���=4H�α�'�!���r�+t��d����eG���{h	@�.���k�q���v�e�5V�h.0�©|U������
+��C��u����k��G���O��C��Y�	�"@�E�"mNzP�S,��1����rzk�M}������y�.�{+j{���xL��wE^DPk�$�3�cA�Y�~Y���
+�/�C�H�F�����<m�47Ṟ�Q�3��Wa�o�~o�)�C�d݇��E�ƀl7�(̢b��s��ڸ���<<�Fx�~?@��m
����@������v@]��<����=���~��WD�`��.��f���~�o��ʈ�n�VA{_��ե�M�����
�^��y��M�Q|��ߟ^-{�~��>������Ѓ
+��(��g��X���7��i��&�X
+5WJ"�*V���J6s{��I��w�oO_��5~���YX�w(�R��!��m���)^�'��D������ɸ�����5�=�@��+���~���j��yQ`O�`�$�D��<B�F0C<�^%�@��?t�k3�}�@����{�^��y��U��|���pS�nĦ�t���e��=���$�v��>`����H_�B���T#%].Xx��D�ѫ�OR��2�E���\K"��R\T|��:m�O���
+�x��*y
=���2��~����/?J,����+%q�	�W�ޛ���3������?ܕ�?�������
�^���e������	+R����oҎ�5س�~�o����Bo
l8��4^�/�
����@�!��/ON�G�����ۮ2t]��С8�cݮ5�z=7���������ˮ���g���@�/�aE[��y#�3�#z��7L�.|��
+��(cR�c�S��m�Q�$�6�ץ{D���a�{T�_j8��4^�/�
����@ñ`�/����_g�"d���`�ɾ����0�
���{�����
�����C�j����_9��jD�Ջa�~?�	dc�[�����0�*a���������,�&
0��&�+���O�B4!��1��~��Ix����>�8�c��&�G)�j���I������=@�5@�v�&J?��Q��l�Ç@��Q�����?��^�������%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
new file mode 100644
index 0000000000..ee5e33f272
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
@@ -0,0 +1,35 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD��I�( ���	pHYs���H���H�F�k>��tIDATx��{le�}�?g�
k�u��J�>D�C�^�Q���M��H��*MU��
h�(*$H���R�*j�	�D�]����)Ż(M6��F�6!6�-
�xI���i�-�� HN�8��s�uι���g������f����7��3����ƣ��7�x^�/�2&�v&v^�DL�	l6I�-��o?��cn��D Iy�e�#d0+�0�3��~������0�g'L�V���[��R�C:B�~(��)$q�vXu�B@��E@`H�NG���`TA�%=]�qAw��J)��u)�9�:e9d`V��0�A{�=��BS*�ڦ�S��gFA��-(D���R˷@�"����g'�U�,eSwʿ���j���*�)l[����.HLyϰ��9�����j�a�I6��MR~��~�nG�ٕ�3�
����@������pxh8��4~=@>���(��mE��3a\`~��=u����Q�����[�f3W��A���i��oK}3wէ�gV�����,j���n2��*ߕ���m��M��]
y=��xn"�co�.�L"��7]��EC�:dHz�E@W�.�f+^�eƦ6vռE4��O���`��̴�.�)l�:��7����){�_Я��~"����pxh8��4^�/�
����/�#�\@��S��^�T�0sZs1�J�1�Pr��h�w�V��E�g���S��T��Q5�[	\B���O
+`+�˾>}����\�6��/0��k�g���1[
�Kh��l�Xʿ��_�Z�^IA���^�N�4v���OW=%i^�<��9��t�f �2����С��B�Hg�6����!u�\ҭZ�&蒶�
+�2����s	���U�]��i�T����� ��]�Uaq;]�A
�:�rG-3�<F�n��*�ݴ�T�ݯ	4<;���������@������pxh8��4^�ysh�,ux��$\j��"Z-�mo��SJ��9���{�
+���e˹[
�\�fָ�ұ��y�2LT��0�K@�9Լ��Ţ=���?Х��B���=c"��v�T�6
Tokza���9T����s&�6��ո���v�� }3�':��[�5�)�,�xU!��҃@}�����U� �kc��
+ꈡ����Y,]��`&߬('�u*�^�v	��O�wu�?}2�&�C����Ȗr�}ݾ^g�[`��y�c*�9s�"���f_��b��
+uuT?�M���f�
+
+e���ۏ�0e�vb�c�J��E�M%�6���Po��l�M`n�~Esչd�j|���z��)miOq/{�ک��Jq���A�G������pxh8��4^���a��+ ����ʥ�5�݃F�����+��Y�&{�˾����I�
�z��\e�X�����oJ}Hȯ�iW��)~�n��m߮ɞh�����l*7TP3k���XJ7R"�����"NX�U�}ٔއA���/(qW�\���v6�$2�
��-���˶Ezd��j��0u]PT{�[�:>>�L�DkZ�Y���ֺ�14�ZC�WU���b�d�12zB���Y�$i".�~A�i=�����Œ��۪>���E��AI�b�\Ϋ�������
+c6��O�SB\��ɅJ#"�RE�Ȱ_'��I.��aluI��������	��YX^�/�
����@����=h��$i3��7[��d:Qu!Ztw�Ul�~F��Ż�b�k�K"$-c��.�3���@��,�y�;i�-�JӉR�޽H���!���ɷjN��;��L�dw�Ed�p��� fO�,�j�T�q��������+
+򩸹�h[@Vef��6KV����x��\�b���|���l}_��$U+�W!��?o[�����y�B(�p3
��r_�5P�2ݚ�la�˱*�x��GXG$�`�W~9?�r+���y�-k��d����.�@ <]�����#<R�y0/��99����T�����^w�
����.�?0�ꠁ{�]0j"<�v�g��Qxh8��4^���$�S�L��@�����oԆ�5	�l\q+�VN�!��߆���j��L�b-����=UK<��׳�6��R���?S�j����b�s�'�\
+>U��\Z,��W�����4Ig��9��L�1�sa��R���O�^�.�P����(�>�K��\�c�6m^�um
��Ql��g�"�y[ө�D�/����[V�*3谨��X�m�@[�q�X#r,a��5�	kLK"0���񢐻(����q��A�O�VP��U
j�(�iJ��l�Wq����l�i�����x�S�� T!s��XD@����s�9�k����y8��\a���Y���"�r������v֗u-	��v!���H��
���
�4�<��@��(B$"Pd�V�Z��5Ɯ��	�ߦ�����s0k��B�5h$��=�dpϪ�_�@0+�������4@"h�O�t���c�ky5�v��z�K����\��1@ޒZ��]��B�_.܋ؿ�!���I��Xd��WpW0�Z%y9�s9�jaK���0��h�sN��,�lU�����X!����h�f!�2.)��0����� 6�B|Iq/�Ӽ��0�jD��F[,�5�
!m`�-�������$�J~1w�WQ�J�D#"YO��
�6hV�Q��5C��t��/���7	�8�-*�"����_E�U�y0�x�+Cxg�h|����+`6H��i�A|]�����Z=^JE\`20
+�~]���f 5X��`?S�0��Q^��?J�1�%[�Gxh8��4^�/�{��S�"��rؘ���ɛn�RZԧ[v�-�P����O��I'�Z~t�t����O�N�z����q����g����آ�4��X�����ԃ,s�e���q�9
,2�)�^���Ķ/�����(��rS?�=<��B|W{|�&~�OO�������
+�t�q���uZt�E��A��)n��7
�;O&-��+��D쏬iEcG����F�	?�c|�Ǹ��54�:�,lz��O�l	�7s��'~C���%B�f�2:`��ě਒�T��T��bjn�
+F�E���,�,p�n��F4'өkLWr�"�P[oa��o��s��k�qNkҭ����\��n��������.�Y�xS�V(A�����q��t+/ԫ-�u�p0w�-z��4��ƴaY�=zt���n��g~��2�7Y,,耄��L
d�=|�|�|Y�p�z��?2�\���f�˼���\~'f�{�[j,�	>#���(�9�a:��,��وK� �x�R��.  ��B%�f6����n�ϻV����/Σ������� %O��+|���!��I��6���3�e��HW����O�� vXIK�O�rZ�8���g�g8=C��2�9Ǫ[�P��B'���rAmK"zʻ�!����
+���m���6�뱾�3����y5����ܓ��"�[�<
�J��sϏ��U9Z^��8_�fD!Zq��_\���- ��-`<uQS,�y�����b�]z@h`�*�*GZ������>���)����D�g��鲔��i�qIb.JXT���bj�k�$��M��1^�K6�<��˿�9��C_��fr��E���M~���8]�T�xX��u5�_<���t_0PA���𶀆�@������p4O�"�qGA餦������v�GbQ���p�rz���E��3��3�U
�6����+��$�q?�W
+1���X�K<�8�
���[����sC!��}E~5C~=C�n1[x�LO
+��g�U�X���=�����̪�y�hs��l(&U�'/qg��v�|�^�8Sx(��o(�B�x�e�\�ӑ�����ľ�U��s���:�҅ͅ2k
+W�!�B�Ԝ�i�
V���EO�f�X6�g�A5�kOد2���jS���6ۼ�[J���S��j����Q��:(����Z���0Ne
+�Z�]L2�$����4@��8�B,���,�Nj(�t'�8.��JC�L�K�U���i��5�#�Xx�#|�U:��@��m��??d,^q5�L!��]�Mr��I4�pZ��;��>�g@��M�F�K�)(�}�f��U�.�{���]��~5��5������>�"����$c�����+�ן�?��Q���c�#
+�mK-6�)࿁���_�Y�n��G+��:�|a������"�~ϯ��ٯb�q�~=�+���,j�?�M��y
+9"�y��D���ʍn��g����6-z<�,+tK�����xW"�����'l��˾�H��[yJ�&�a�@�~/�9�"�a�%�$iѣ���6.S����8ظ�+y�+�*�o�jo�mp-���k��1	�u����%�=�����-�"�
+���4wq�-��Ր�E���K
+�|�Uf�G��
+-���Ua]X�r���x.�\���˅h�:"����LF�dF���5p���f�覊�)n�Yͣ�n��Fh�
1{�'��\���<ϫlik)$H�䇙�5��%y��kni�b
��/���O����E���OjZ�<�,�b�������P	���p�+�@��<[��/�
���#/��Z�wp6�$�5�D��E�����
+���|6w�^>7��{ԇ�Nĭ��Pw���f�>��k�7�/��c͗=��cM��ﴯ߁A�E`�q��:N*��N��Q����b�UG�`��ʟ�Ƴ���Cᨉ"��5�w5�.��&�v;����.ܱ��7e$�$��y�K�YE<[�y�8����M
+n�m%�U�4@��[��&����EC�(�.�/���b���C��>Z�1�_P�O�^�;�������!�N��wc��l�^���]`C1�L�����8GO{�
<��fpY�8���:�X�! ��W�Z���Vc��ʺ��b���+����_ݖ�fp9U�4��u
+*��QD�I�3cv�1e\�ݎe�(ֲ$��ؿ��.�]��z�)�/�>�>.|mO9Q��HN
�P��{����;�=�YJ���7'�[��ɂ-����b<
+Xӌ���2��@}�޺Pw�������aŨ�M�	lqG{R�\p��Dx�s��T3�X�ؓ�����@������pxh8���ѱx��e l TZ�B��H�a�e�c��t*ZHF��b52�iiS�[:�DH�S
+�))%��_rp�S���eUӮ@��*I�3�*�C�
+3��=���&�&5�CB���`����Ê�,o]���~����]3�t�������ح�jXe�x����0CTA3œy �5�{�t����!k@Q�V+Vr��
+3�e!�̰Bː�ۓ��O�A����԰‰	#	���U4V��D�ч�D����*Oݕ���<:�Xl��Bxh8�L`������pxh8��4y0���؃���J��k5��#;��ǮD"�-�鞺#t�Ln3ã|��Áysɩ�q�v��A2t�>�}�<���Jw�Z,ӱ:�-�*���%��A$�-�lp�I�d���5�S/���BGs�iN�z,v�~�79P�r5�q��p]MM�O?�m���~"g�ǀ�����9VhAmn`��0G�)�����ԧ_ԇ��U������W�1}�3�y
A�����p��;d��U���>X����J��x��<mV5'Ṟ�a�0�Wa��s��w��A2�����<w�F}b@�`fQ���=�{Ɂ�h�����s<���5P�ŏ�.�_�px[@������pxh82��P�~���G�Mt��M���-�v@]���ܠ�.߰�	�����~��K�9�4}��6��. ��/n�:��&"O�'�"�'G�SH��;U�k�A��'��U峕_������4]|]̅�+%�w~�tUFD�w_���/}�����e��7��%~�B*E�����K�����e�U�پ^̀����Y��`]�����2���Y���O�ޯF��g��E���OB�O���Z5��v�*)���*�C��63ه
��(��/�w0��zP_���WL��
+7��AlJ���(�� ��p��
,���Y����j�c�����w�(6z��I�V�?+�_�Ԓ�༔���D��O+��9�7��Q���*y
=���2��|���/?J,����+%q�{�^�?�@�r_O�ץ������^��c�A�o����.�J��㻏�,K��ҟ��E;��7|B`�N�]�a�+�/i8�5����pxh8��4^�/�
�hr?<}4� [��o���u�#�bP�u���\���������l�{l��V��{h��102p�1#=�СG�y�����/��(�b0V!9�9�z��&@%!m�]���A��ju�G�����@������pxh8��4�W�&��P? @�y��)B���	6��S�Y�&�ϰak�����ͽ�Y�6��pakݞ�}���(|�!,���W/�	���/��A�lj�֮�x�)T��I#}ˏ�Y�L`2eM�)���
+w�B4!��1����FIx���>�8�c��&�G)�j���I������}@�5��V�&J?��	Y�����!�\=jb��<�����h�jo���%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000000..7e8ebc180a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
@@ -0,0 +1,198 @@
+�PNG
+
+���
IHDR�����������IJ���PLTE�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+4�v����YtRNS�3P���/"Uq@f`2�
!<BHK Z#'1S,�4���j���8E���|��������)��Q$�
+��b�J��mߜGc?o�h�@^����bKGD��H���	pHYs���H���H�F�k>��dIDATx��]c۶�H�阒]�K���d��%٫뺮��lm���w]����|�p��X�m�-��}<�w�(1$��	;�F�@��%��?����B,Lh{�t���#���T@�/?j�9	m��N� #���+`��`����I�
+��_�-s�ʹU0�M��[��
+s�4`x��š�#��
�D<�~؀�K��.4�]`��PDDDDDDĈq������Ek@����A�~�*���	!Y���X�`hv3\LX��Ot�J2b���ؓl�QI<��� �6�-X�lֈ�6�H��|=j�`E�iq����Cv:�q���C?�?���x�,��r*t�ݻ}|;�kP�4���d�Y����f����K��~[	>�X:+�i����ĆQV9\����e�'���A�tOS�:7��2����YsxM�ہ��B���&���z�>n�C��@��r@��*�a�ӝ���%��MFDDDDDD�T�ߖ���H,���E����RU��n
ب<��V-
@�/Nm�թ���������Hw����*�+��#��$o�e�{�% �7\X��ǀ���2��~0��&n��sbA,�D��
�A�V�I��|�
�Og���鴋�	�7�y	7Jf�����:_�w^��H	v{/O�9���<����Y�`+�� HRٰ����[��?��
+������=���c""""""F�˽�sG�<*k9c��E�8薽�������zfm��r�1�N�������nq�w��&=O�\}K`
+#���2��~��L�|?�m>�\�f��͹�:}�4ᦋ���{�)�n[��
+�̰E
+KY��D�ۇ-��	�+�Kl=�Ӄ��L`љ�|�%��n�	a�	���N�#��5�	(4���?�����EDDDD\o�W�Ffq;��\E��_������,���W!%�zE!F�¶.�(USHQ0d�w)T���8#p,�x�B��K���� �*�x��X��E�e������
+K솎%mK��X~s�FE���~������tdc��a��I���1��Af4��dH��c�G�S�B`��0�wev`����"�{��	�.�GDDDD�,d�O�6�k"qk��Me�fS_����U��KŌ&g~>n� �H�})��L���F%8(�)r���!�[4统qQk�0�m[Le���_�7���0�@>1 X0A��Z����Vc�E�V ���Lt�k�3�EJ��44�Zﮊ�N`rt�>`�˥�	�	�
A��HBLH�@��c���Uq=�j������cM����2�s����J���CL�iR �NQ���������0=���Yi�-�|4�V��]��]��B^�ޞ���_H������$�<�$�	
+a����=��d@�	(Z�Ap_�}�~s���:�N�{DC>����m�^��ƒ����S�&�, ;�N����&�B} ��<_A��B]H�u���N(B�0��{h���1�IK����Ds��j����'��M���8�.�ӫ1�h3�df}mq���	��n�U{��L�o��z\=?@	((���e�|=ơ麄�C�i����1r<|�OO�;�
`��H��p�Qy�zԈu�����Z���V���Ʋ�!�)��5m�C���2��Ly�g�;���֑�R���jW�a@��@V�L�&W���ru=Z
+�̥��=U���5}���������7�;b(�����nP&�s��k�4�����8�ͥ��0���1�U�W�v�k�18dq���T��ՌE]qH8�������G�F�����K�����'��r����Or���r�̧��6"fp��T�^3c��"�����n��Mم-�/��W=�tJ,��X�)���{�P
Rm|K����>mX�8v�5h��<������_{ꘀ�Y�F�|&_G;&�>^�����W⁃�&�K���(��81�EB@F&��;"L���'wfw��E-6��o&/̫'X�e,>~�ee��|���A����=)	d��Q�`}P[���K��N��˂����/�~)����O[d�O=�3E�l5'Y�$?��7�m���Tzզ.�\��.��` WE�����"""""v�)��V���<���K�ZX.Ex�~Ч)���ߚ�����W_}�5|��s��/!?����'poդ���tC3����@�Q�)��t��`���b!,dY9�6A2����������/튮���n�t�TK>����#]�L;zq�J���r���²[��\-t�ҽ�5
@�ͷϟ��n�T@��+;��c���Qh�C*���T�ڙ��A<Sku�µb�E�
/��$�Z���.e�j������_ʤrWaB6d���(��S�s[�|���竕
+/5R���(�4X������76����`3|���P��p�'�H~<R?M�2�)�  ��g��Vp��B�n�=�|W�ͬ\��V0_�81Oׄ�Kz||lP_��ω���lxX;ǀ�Ju�<��Ng[��]=�(�#]������p�P�a���i�������s�f��
+V�z��]ౚ������z>�Vr�?�f��?������
�Q�1�T`��} H�k���,{�VZˋT��ϛ�?I̯u�QK�LM�e͆��~��q������y�m0�9�S�;���j�����5 ���i��Q��]7k0�U�ޭ���G�kX����3#���lY��_Цx����j޶9��`�#
+M	[z��KuO_z˿Dܭ��*��kOJ�(7��n��\�e�
I�T�ƨ�l�/�U������߶uw�.�~���;#�r���.�����8
�o# 5L��h>1�i�����p��V�M�?�/u7��0� X@��L��+M�+�����{��Fkt�{�ŧ89�0`���. ĀC�R+\��/��t�R����;
�TӲ���]�aL���|�efđ��	�>�ۣ��G�|�P`P��8C1K՛�A�̍<�2��ۂ��K�r�l@L
+L��������8�@�E>`n�����PNԍ,��p�����E��Ɔ����Z�FlÎ;�����F���7��Ȯ;��
+��s�wSz)g7�{r�s��S��gȋ��(߄~�AWytX��$�NV����R�_��<6�p.�O�8�O[�OdDk>_��O�O�}����JS���d��mV�?�W(_��m� ��j���~=H IԁF>T/��{*]IGJ@i����qam�NF|Q�5���0+���E�S8�:�v�`p~v���j:B�����p96�o��ys%��������
�|@H�����]��+�@��t]W�k}}�����7��Fʮr����A�����B���\m�-�_�2PY8�������x�ՎN�.h�~���@+7��z5������t�_/������/�?���0�S>��)���z�i0n�/�B����`{D��W���#`����B��o���[,�g��FVЁ�pP߾���C]Bz�� ��,X�����X�fԃ����A�:H��� k�7��d�Z9��oc}o�]�0�vd�:R]�0�ve���]刈����j����у����|
	�?�+(��OǍ�+	�#��ys���ߍ�n�p���Fru<��.HȺotM��3h���}��߆P}�������˗��v�����P�}mǀ���?���W��Z@���������}���������@��@���FD�������l����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/jquery-ui.min.css b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/jquery-ui.min.css
new file mode 100644
index 0000000000..b3fe46344d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/css/uitheme1.12.1/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.12.1 - 2019-05-26
+* http://jqueryui.com
+* Includes: core.css, tabs.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=smoothness&cornerRadiusShadow=8px&offsetLeftShadow=-8px&offsetTopShadow=-8px&thicknessShadow=8px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=aaaaaa&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cd0a0a&fcError=cd0a0a&borderColorError=cd0a0a&bgImgOpacityError=95&bgTextureError=glass&bgColorError=fef1ec&iconColorHighlight=2e83ff&fcHighlight=363636&borderColorHighlight=fcefa1&bgImgOpacityHighlight=55&bgTextureHighlight=glass&bgColorHighlight=fbf9ee&iconColorActive=454545&fcActive=212121&borderColorActive=aaaaaa&bgImgOpacityActive=65&bgTextureActive=glass&bgColorActive=ffffff&iconColorHover=454545&fcHover=212121&borderColorHover=999999&bgImgOpacityHover=75&bgTextureHover=glass&bgColorHover=dadada&iconColorDefault=888888&fcDefault=555555&borderColorDefault=d3d3d3&bgImgOpacityDefault=75&bgTextureDefault=glass&bgColorDefault=e6e6e6&iconColorContent=222222&fcContent=222222&borderColorContent=aaaaaa&bgImgOpacityContent=75&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=222222&fcHeader=222222&borderColorHeader=aaaaaa&bgImgOpacityHeader=75&bgTextureHeader=highlight_soft&bgColorHeader=cccccc&cornerRadius=4px&fsDefault=1.1em&fwDefault=normal&ffDefault=Verdana%2CArial%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa}
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-1.12.4.min.js b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-1.12.4.min.js
new file mode 100644
index 0000000000..e836475870
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-1.12.4.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-ui-1.12.1.min.js b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-ui-1.12.1.min.js
new file mode 100644
index 0000000000..25398a1674
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/jquery-ui-1.12.1.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
+}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
+this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
+}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
+},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
+},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
+},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
+this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/quicksilver.js b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/quicksilver.js
index 079ea87d5c..d8ca764f81 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/quicksilver.js
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/quicksilver.js
@@ -38,7 +38,7 @@
 String.prototype.score = function (abbreviation,offset) {
     offset = offset || 0 // TODO: I think this is unused... remove
  
-    if (abbreviation.length == 0) {
+    if (abbreviation.length === 0) {
         return 0.9
     }
     if (abbreviation.length > this.length) {
@@ -57,7 +57,7 @@ String.prototype.score = function (abbreviation,offset) {
             continue;
         }
 
-        var next_string = this.substring(index+sub_abbreviation.length)
+        var next_string = this.substring(index + sub_abbreviation.length)
         var next_abbreviation = null
 
         if (i >= abbreviation.length) {
@@ -74,8 +74,8 @@ String.prototype.score = function (abbreviation,offset) {
             if (index != 0) {
                 var j = 0;
                 var c = this.charCodeAt(index - 1)
-                if ( c==32 || c == 9) {
-                    for (var j=(index-2); j >= 0; j--) {
+                if ( c == 32 || c == 9) {
+                    for (j = (index - 2); j >= 0; j--) {
                         c = this.charCodeAt(j)
                         score -= ((c == 32 || c == 9) ? 1 : 0.15)
                     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/suggest.js b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/suggest.js
index b404edd0a0..c30e7ba6a1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/suggest.js
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/suggest.js
@@ -11,13 +11,13 @@ String.prototype.score = function (abbreviation,offset) {
         for (var i = 0; i < suggest_cache['len']; ++i) {
             suggest_cache['re'][i] = new Array();
             // /\b<x>/ doesn't work when <x> i a non-ascii - oddly enough \s does ...
-            suggest_cache['re'][i]['initialword'] = new RegExp("^"+words[i], "i");
-            suggest_cache['re'][i]['word'] = new RegExp("[\\s-()_]"+words[i], "i");
+            suggest_cache['re'][i]['initialword'] = new RegExp("^" + words[i], "i");
+            suggest_cache['re'][i]['word'] = new RegExp("[\\s-()_]" + words[i], "i");
         }
     }
 
-    for (var i = 0; i < suggest_cache['len']; ++i) {
-        if (!(this.match(suggest_cache['re'][i]['initialword']) || this.match(suggest_cache['re'][i]['word']))) {
+    for (var j = 0; j < suggest_cache['len']; ++j) {
+        if (!(this.match(suggest_cache['re'][j]['initialword']) || this.match(suggest_cache['re'][j]['word']))) {
             return 0;
         }
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/tablist.js b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/tablist.js
new file mode 100644
index 0000000000..695d0dd744
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/assets/js/tablist.js
@@ -0,0 +1,13 @@
+$(document).ready(function () {
+    $("#tabdiv").tabs();
+    $.getJSON("tablist.php", function(data) {
+        $("#tabdiv").select(data["default"]);
+        for (var i = 0; i < data["tabs"].length; i++) {
+            var tab = data["tabs"][i];
+            $("#query_" + tab).liveUpdate("#list_" + tab);
+            if (data["faventry"] === null && i === 0) {
+                $("#query_" + tab).focus();
+            }
+        }
+    });
+});
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/tablist.php b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/tablist.php
new file mode 100644
index 0000000000..cbeb85152f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/discopower/www/tablist.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * An AJAX handler to retrieve a list of disco tabs from the session.
+ * This allows us to dynamically update the tab list without inline javascript.
+ *
+ * @author Guy Halse, http://orcid.org/0000-0002-9388-8592
+ * @package SimpleSAMLphp
+ */
+
+$session = \SimpleSAML\Session::getSessionFromRequest();
+$tabs = $session->getData('discopower:tabList', 'tabs');
+$faventry = $session->getData('discopower:tabList', 'faventry');
+$defaulttab = $session->getData('discopower:tabList', 'defaulttab');
+
+if (!is_array($tabs)) {
+    throw new \SimpleSAML\Error\Exception('Could not get tab list from session');
+}
+
+// handle JSON vs JSONP requests
+if (isset($_REQUEST['callback'])) {
+    if (!preg_match('/^[a-z0-9_]+$/i', $_REQUEST['callback'], $matches)) {
+        throw new \SimpleSAML\Error\Exception('Unsafe JSONP callback function name "' . $matches[0] . '"');
+    }
+    $jsonp = true;
+    header('Content-Type: application/javascript');
+    echo addslashes($matches[0]) . '(';
+} else {
+    $jsonp = false;
+    header('Content-Type: application/json');
+}
+
+echo json_encode(
+    [
+        'faventry' => $faventry,
+        'default' => $defaulttab,
+        'tabs' => $tabs,
+    ]
+);
+
+if ($jsonp) {
+    echo ');';
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.php_cs.dist
new file mode 100644
index 0000000000..9649d08b88
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.php_cs.dist
@@ -0,0 +1,15 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.travis.yml
new file mode 100644
index 0000000000..3c250287a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/bin/check-syntax.sh
new file mode 100755
index 0000000000..7fc4fcd3da
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/composer.json
new file mode 100644
index 0000000000..b4c0ff482c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/composer.json
@@ -0,0 +1,41 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver",
+    "description": "An example for SAML attributes queries",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "exampleattributeserver"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\exampleattributeserver\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-exampleattributeserver"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/default-enable
similarity index 59%
rename from vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/default-disable
rename to vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/default-enable
index fa0bd82e2d..25615cb47c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/default-disable
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/default-enable
@@ -1,3 +1,3 @@
 This file indicates that the default state of this module
-is disabled. To enable, create a file named enable in the
+is enabled. To disable, create a file named disable in the
 same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/psalm.xml
new file mode 100644
index 0000000000..9326f7da9c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/psalm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp exampleattributeserver module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/tests/bootstrap.php
new file mode 100644
index 0000000000..67beffd16e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/www/attributeserver.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/www/attributeserver.php
index 9bdbe415a1..84aad77dd1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/www/attributeserver.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleattributeserver/www/attributeserver.php
@@ -10,10 +10,13 @@
 
 $idpEntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
 
-
-$spEntityId = $query->getIssuer();
-if ($spEntityId === null) {
+$issuer = $query->getIssuer();
+if ($issuer === null) {
     throw new \SimpleSAML\Error\BadRequest('Missing <saml:Issuer> in <samlp:AttributeQuery>.');
+} elseif (is_string($issuer)) {
+    $spEntityId = $issuer;
+} else {
+    $spEntityId = $issuer->getValue();
 }
 
 $idpMetadata = $metadata->getMetaDataConfig($idpEntityId, 'saml20-idp-hosted');
@@ -41,6 +44,7 @@
     $returnAttributes = [];
 } else {
     foreach ($returnAttributes as $name => $values) {
+        /** @var array $values */
         if (!array_key_exists($name, $attributes)) {
             // We don't have this attribute
             unset($returnAttributes[$name]);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Process/RedirectTest.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Process/RedirectTest.php
index 13ff82dbd2..2e52b99f81 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Process/RedirectTest.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Process/RedirectTest.php
@@ -1,18 +1,22 @@
 <?php
 
-namespace SimpleSAML\Module\exampleautth\Auth\Process;
+namespace SimpleSAML\Module\exampleauth\Auth\Process;
+
+use SimpleSAML\Auth;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
 
 /**
  * A simple processing filter for testing that redirection works as it should.
  *
  */
-
 class RedirectTest extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * Initialize processing of the redirect test.
      *
      * @param array &$state  The state we should update.
+     * @return void
      */
     public function process(&$state)
     {
@@ -23,8 +27,8 @@ public function process(&$state)
         $state['Attributes']['RedirectTest1'] = ['OK'];
 
         // Save state and redirect
-        $id = \SimpleSAML\Auth\State::saveState($state, 'exampleauth:redirectfilter-test');
-        $url = \SimpleSAML\Module::getModuleURL('exampleauth/redirecttest.php');
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
+        $id = Auth\State::saveState($state, 'exampleauth:redirectfilter-test');
+        $url = Module::getModuleURL('exampleauth/redirecttest.php');
+        Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/External.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/External.php
index 48a032a36b..60c2ebfef2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/External.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/External.php
@@ -2,6 +2,11 @@
 
 namespace SimpleSAML\Module\exampleauth\Auth\Source;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Error;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+
 /**
  * Example external authentication source.
  *
@@ -22,7 +27,6 @@
  *
  * @package SimpleSAMLphp
  */
-
 class External extends \SimpleSAML\Auth\Source
 {
     /**
@@ -30,6 +34,7 @@ class External extends \SimpleSAML\Auth\Source
      */
     const AUTHID = 'SimpleSAML\Module\exampleauth\Auth\Source\External.AuthId';
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -47,10 +52,11 @@ public function __construct($info, $config)
         // Do any other configuration we need here
     }
 
+
     /**
      * Retrieve attributes for the user.
      *
-     * @return array|NULL  The user's attributes, or NULL if the user isn't authenticated.
+     * @return array|null  The user's attributes, or NULL if the user isn't authenticated.
      */
     private function getUser()
     {
@@ -91,10 +97,12 @@ private function getUser()
         return $attributes;
     }
 
+
     /**
      * Log in using an external authentication helper.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -121,7 +129,7 @@ public function authenticate(&$state)
          * First we add the identifier of this authentication source
          * to the state array, so that we know where to resume.
          */
-        $state['exampleauth:AuthID'] = self::AUTHID;
+        $state['exampleauth:AuthID'] = $this->authId;
 
         /*
          * We need to save the $state-array, so that we can resume the
@@ -136,14 +144,14 @@ public function authenticate(&$state)
          * and restores it in another location, and thus bypasses steps in
          * the authentication process.
          */
-        $stateId = \SimpleSAML\Auth\State::saveState($state, 'exampleauth:External');
+        $stateId = Auth\State::saveState($state, 'exampleauth:External');
 
         /*
          * Now we generate a URL the user should return to after authentication.
          * We assume that whatever authentication page we send the user to has an
          * option to return the user to a specific page afterwards.
          */
-        $returnTo = \SimpleSAML\Module::getModuleURL('exampleauth/resume.php', [
+        $returnTo = Module::getModuleURL('exampleauth/resume.php', [
             'State' => $stateId,
         ]);
 
@@ -154,7 +162,7 @@ public function authenticate(&$state)
          * is also part of this module, but in a real example, this would likely be
          * the absolute URL of the login page for the site.
          */
-        $authPage = \SimpleSAML\Module::getModuleURL('exampleauth/authpage.php');
+        $authPage = Module::getModuleURL('exampleauth/authpage.php');
 
         /*
          * The redirect to the authentication page.
@@ -162,7 +170,7 @@ public function authenticate(&$state)
          * Note the 'ReturnTo' parameter. This must most likely be replaced with
          * the real name of the parameter for the login page.
          */
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($authPage, [
+        Utils\HTTP::redirectTrustedURL($authPage, [
             'ReturnTo' => $returnTo,
         ]);
 
@@ -172,13 +180,16 @@ public function authenticate(&$state)
         assert(false);
     }
 
+
     /**
      * Resume authentication process.
      *
      * This function resumes the authentication process after the user has
      * entered his or her credentials.
      *
-     * @param array &$state  The authentication state.
+     * @return void
+     * @throws \SimpleSAML\Error\BadRequest
+     * @throws \SimpleSAML\Error\Exception
      */
     public static function resume()
     {
@@ -187,26 +198,27 @@ public static function resume()
          * it in the 'State' request parameter.
          */
         if (!isset($_REQUEST['State'])) {
-            throw new \SimpleSAML\Error\BadRequest('Missing "State" parameter.');
+            throw new Error\BadRequest('Missing "State" parameter.');
         }
 
         /*
          * Once again, note the second parameter to the loadState function. This must
          * match the string we used in the saveState-call above.
          */
-        $state = \SimpleSAML\Auth\State::loadState($_REQUEST['State'], 'exampleauth:External');
+        /** @var array $state */
+        $state = Auth\State::loadState($_REQUEST['State'], 'exampleauth:External');
 
         /*
          * Now we have the $state-array, and can use it to locate the authentication
          * source.
          */
-        $source = \SimpleSAML\Auth\Source::getById($state['exampleauth:AuthID']);
+        $source = Auth\Source::getById($state['exampleauth:AuthID']);
         if ($source === null) {
             /*
              * The only way this should fail is if we remove or rename the authentication source
              * while the user is at the login page.
              */
-            throw new \SimpleSAML\Error\Exception('Could not find authentication source with id '.$state[self::AUTHID]);
+            throw new Error\Exception('Could not find authentication source with id ' . $state[self::AUTHID]);
         }
 
         /*
@@ -215,7 +227,7 @@ public static function resume()
          * change config/authsources.php while an user is logging in.
          */
         if (!($source instanceof self)) {
-            throw new \SimpleSAML\Error\Exception('Authentication source type changed.');
+            throw new Error\Exception('Authentication source type changed.');
         }
 
         /*
@@ -231,7 +243,7 @@ public static function resume()
              * Here we simply throw an exception, but we could also redirect the user back to the
              * login page.
              */
-            throw new \SimpleSAML\Error\Exception('User not authenticated after login page.');
+            throw new Error\Exception('User not authenticated after login page.');
         }
 
         /*
@@ -240,7 +252,7 @@ public static function resume()
          */
 
         $state['Attributes'] = $attributes;
-        \SimpleSAML\Auth\Source::completeAuth($state);
+        Auth\Source::completeAuth($state);
 
         /*
          * The completeAuth-function never returns, so we never get this far.
@@ -248,11 +260,13 @@ public static function resume()
         assert(false);
     }
 
+
     /**
      * This function is called when the user start a logout operation, for example
      * by logging out of a SP that supports single logout.
      *
      * @param array &$state  The logout state array.
+     * @return void
      */
     public function logout(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/StaticSource.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/StaticSource.php
index d81dd32563..8d0dc72e14 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/StaticSource.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/StaticSource.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\exampleauth\Auth\Source;
 
+use SimpleSAML\Utils;
+
 /**
  * Example authentication source.
  *
@@ -11,14 +13,15 @@
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class StaticSource extends \SimpleSAML\Auth\Source
 {
     /**
      * The attributes we return.
+     * @var array
      */
     private $attributes;
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -35,17 +38,19 @@ public function __construct($info, $config)
 
         // Parse attributes
         try {
-            $this->attributes = \SimpleSAML\Utils\Attributes::normalizeAttributesArray($config);
+            $this->attributes = Utils\Attributes::normalizeAttributesArray($config);
         } catch (\Exception $e) {
-            throw new \Exception('Invalid attributes for authentication source '.
-                $this->authId.': '.$e->getMessage());
+            throw new \Exception('Invalid attributes for authentication source ' .
+                $this->authId . ': ' . $e->getMessage());
         }
     }
 
+
     /**
      * Log in using static attributes.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/UserPass.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/UserPass.php
index 19da260bbd..30239a6c29 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/UserPass.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/lib/Auth/Source/UserPass.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\exampleauth\Auth\Source;
 
+use SimpleSAML\Error;
+use SimpleSAML\Utils;
+
 /**
  * Example authentication source - username & password.
  *
@@ -17,9 +20,12 @@ class UserPass extends \SimpleSAML\Module\core\Auth\UserPassBase
     /**
      * Our users, stored in an associative array. The key of the array is "<username>:<password>",
      * while the value of each element is a new array with the attributes for each user.
+     *
+     * @var array
      */
     private $users;
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -40,29 +46,30 @@ public function __construct($info, $config)
         foreach ($config as $userpass => $attributes) {
             if (!is_string($userpass)) {
                 throw new \Exception(
-                    'Invalid <username>:<password> for authentication source '.$this->authId.': '.$userpass
+                    'Invalid <username>:<password> for authentication source ' . $this->authId . ': ' . $userpass
                 );
             }
 
             $userpass = explode(':', $userpass, 2);
             if (count($userpass) !== 2) {
                 throw new \Exception(
-                    'Invalid <username>:<password> for authentication source '.$this->authId.': '.$userpass[0]
+                    'Invalid <username>:<password> for authentication source ' . $this->authId . ': ' . $userpass[0]
                 );
             }
             $username = $userpass[0];
             $password = $userpass[1];
 
             try {
-                $attributes = \SimpleSAML\Utils\Attributes::normalizeAttributesArray($attributes);
+                $attributes = Utils\Attributes::normalizeAttributesArray($attributes);
             } catch (\Exception $e) {
-                throw new \Exception('Invalid attributes for user '.$username.
-                    ' in authentication source '.$this->authId.': '.$e->getMessage());
+                throw new \Exception('Invalid attributes for user ' . $username .
+                    ' in authentication source ' . $this->authId . ': ' . $e->getMessage());
             }
-            $this->users[$username.':'.$password] = $attributes;
+            $this->users[$username . ':' . $password] = $attributes;
         }
     }
 
+
     /**
      * Attempt to log in using the given username and password.
      *
@@ -81,9 +88,9 @@ protected function login($username, $password)
         assert(is_string($username));
         assert(is_string($password));
 
-        $userpass = $username.':'.$password;
+        $userpass = $username . ':' . $password;
         if (!array_key_exists($userpass, $this->users)) {
-            throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
+            throw new Error\Error('WRONGUSERPASS');
         }
 
         return $this->users[$userpass];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.tpl.php
new file mode 100644
index 0000000000..fd112ff59f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.tpl.php
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>exampleauth login page</title>
+  </head>
+  <body>
+    <h1>exampleauth login page</h1>
+    <p>
+      In this example you can log in with two accounts: <code>student</code> and <code>admin</code>.
+      In both cases, the password is the same as the username.
+    </p>
+    <form method="post" action="?">
+      <p>
+        Username:
+        <input type="text" name="username">
+      </p>
+      <p>
+        Password:
+        <input type="text" name="password">
+      </p>
+      <input type="hidden" name="ReturnTo" value="<?= htmlspecialchars($this->data['returnTo']) ?>">
+      <p><input type="submit" value="Log in"></p>
+    </form>
+<?php if($this->data['badUserPass']): ?>
+    <p>!!! Bad username or password !!!</p>
+<?php endif; ?>
+  </body>
+</html>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.twig b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.twig
new file mode 100644
index 0000000000..4a68e334cb
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/templates/authenticate.twig
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>exampleauth login page</title>
+  </head>
+  <body>
+    <h1>exampleauth login page</h1>
+    <p>
+      In this example you can log in with two accounts: <code>student</code> and <code>admin</code>.
+      In both cases, the password is the same as the username.
+    </p>
+    <form method="post" action="?">
+      <p>
+        Username:
+        <input type="text" name="username">
+      </p>
+      <p>
+        Password:
+        <input type="text" name="password">
+      </p>
+      <input type="hidden" name="ReturnTo" value="{{ returnTo|escape('html') }}">
+      <p><input type="submit" value="Log in"></p>
+    </form>
+{% if badUserPass == true %}
+    <p>!!! Bad username or password !!!</p>
+{% endif %}
+  </body>
+</html>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/authpage.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/authpage.php
index 6c34995ec7..795a13cba8 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/authpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/authpage.php
@@ -15,30 +15,27 @@
 
 $returnTo = \SimpleSAML\Utils\HTTP::checkURLAllowed($_REQUEST['ReturnTo']);
 
-/*
+/**
  * The following piece of code would never be found in a real authentication page. Its
  * purpose in this example is to make this example safer in the case where the
- * administrator of * the IdP leaves the exampleauth-module enabled in a production
+ * administrator of the IdP leaves the exampleauth-module enabled in a production
  * environment.
  *
  * What we do here is to extract the $state-array identifier, and check that it belongs to
  * the exampleauth:External process.
  */
-
 if (!preg_match('@State=(.*)@', $returnTo, $matches)) {
     die('Invalid ReturnTo URL for this example.');
 }
-\SimpleSAML\Auth\State::loadState(urldecode($matches[1]), 'exampleauth:External');
 
-/*
+/**
  * The loadState-function will not return if the second parameter does not
  * match the parameter passed to saveState, so by now we know that we arrived here
  * through the exampleauth:External authentication page.
  */
+\SimpleSAML\Auth\State::loadState(urldecode($matches[1]), 'exampleauth:External');
 
-/*
- * Our list of users.
- */
+// our list of users.
 $users = [
     'student' => [
         'password' => 'student',
@@ -56,11 +53,7 @@
     ],
 ];
 
-/*
- * Time to handle login responses.
- * Since this is a dummy example, we accept any data.
- */
-
+// time to handle login responses; since this is a dummy example, we accept any data
 $badUserPass = false;
 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     $username = (string) $_REQUEST['username'];
@@ -85,35 +78,9 @@
     }
 }
 
-/*
- * If we get this far, we need to show the login page to the user.
- */
-?><!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>exampleauth login page</title>
-</head>
-<body>
-<h1>exampleauth login page</h1>
-<p>
-In this example you can log in with two accounts: <code>student</code> and <code>admin</code>.
-In both cases, the password is the same as the username.
-</p>
-<?php if ($badUserPass) { ?>
-<p>Bad username or password.</p>
-<?php } ?>
-<form method="post" action="?">
-<p>
-Username:
-<input type="text" name="username">
-</p>
-<p>
-Password:
-<input type="text" name="password">
-</p>
-<input type="hidden" name="ReturnTo" value="<?php echo htmlspecialchars($returnTo); ?>">
-<p><input type="submit" value="Log in"></p>
-</form>
-</body>
-</html>
+// if we get this far, we need to show the login page to the user
+$config = \SimpleSAML\Configuration::getInstance();
+$t = new \SimpleSAML\XHTML\Template($config, 'exampleauth:authenticate.tpl.php');
+$t->data['badUserPass'] = $badUserPass;
+$t->data['returnTo'] = $returnTo;
+$t->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/redirecttest.php b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/redirecttest.php
index 9d605277d3..ff06102cd2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/redirecttest.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/exampleauth/www/redirecttest.php
@@ -10,6 +10,8 @@
 if (!array_key_exists('StateId', $_REQUEST)) {
     throw new \SimpleSAML\Error\BadRequest('Missing required StateId query parameter.');
 }
+
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($_REQUEST['StateId'], 'exampleauth:redirectfilter-test');
 
 $state['Attributes']['RedirectTest2'] = ['OK'];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.php_cs.dist
new file mode 100644
index 0000000000..59267ee96c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/templates',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.travis.yml
new file mode 100644
index 0000000000..725b371c66
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/.travis.yml
@@ -0,0 +1,29 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+
+script:
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/composer.json
new file mode 100644
index 0000000000..6d120cec7b
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-expirycheck",
+    "description": "The expirycheck module validates user's expiry date",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "expirycheck"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Alex Mihičinac",
+            "email": "alexm@arnes.si"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\expirycheck\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "webmozart/assert": "~1.4"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.10"
+    },
+    "support": {
+        "issues": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck/issues",
+        "source": "https://github.com/simplesamlphp/simplesamlphp-module-expirycheck"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/default-enable
similarity index 59%
rename from vendor/simplesamlphp/simplesamlphp/modules/expirycheck/default-disable
rename to vendor/simplesamlphp/simplesamlphp/modules/expirycheck/default-enable
index fa0bd82e2d..25615cb47c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/default-disable
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/default-enable
@@ -1,3 +1,3 @@
 This file indicates that the default state of this module
-is disabled. To enable, create a file named enable in the
+is enabled. To disable, create a file named disable in the
 same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/dictionaries/expwarning.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/dictionaries/expwarning.translation.json
index 18dc57dc10..5bbf5361b4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/dictionaries/expwarning.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/dictionaries/expwarning.translation.json
@@ -13,7 +13,9 @@
 		"af": "Jy het nie toegang na die diens nie",
 		"el": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1",
 		"xh": "Awunalo ufikelelo kule nkonzo",
-		"zu": "Awukwazi ukufinyelela le sevisi"
+		"zu": "Awukwazi ukufinyelela le sevisi",
+		"st": "Ha o na phihlello ho tshebeletso ena",
+		"ca": "No teniu accés a aquest servei"
 	},
 	"no_access_to": {
 		"sl": "Dostop zavrnjen, ker je va\u0161e uporabni\u0161ko (NetID) %NETID% ime poteklo!",
@@ -29,7 +31,9 @@
 		"af": "Jou rekening %NETID% het verval, toegang verbode!",
 		"el": "\u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 %NETID% u03ad\u03c7\u03b5\u03b9 \u03bb\u03ae\u03be\u03b5\u03b9 - \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7!",
 		"zu": "I-akhawunti yakho ethi %NETID% iphelelwe isikhathi, ukufinyelela kwenqatshiwe!",
-		"xh": "Iakhawunti yakho %NETID% iphelelwe, ufikelelo lukhatyiwe!"
+		"xh": "Iakhawunti yakho %NETID% iphelelwe, ufikelelo lukhatyiwe!",
+		"st": "Akhaonto ya hao %NETID% e feletswe ke nako, phihlello e hanetswe.!",
+		"ca": "El vostre compte %NETID% ha caducat, accés denegat!"
 	},
 	"contact_home": {
 		"sl": "Mo\u017enost dostopa do storitve ureja va\u0161a doma\u010da organizacija. Obrnite se na njihov oddelek za pomo\u010d uporabnikom.",
@@ -44,7 +48,9 @@
 		"af": "Toegang tot dienste word beheer deur jou tuis organisasie. Kontak asseblief jou plaaslike IT ondersteuning vir navrae.",
 		"el": "\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b9\u03c2 \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b5\u03c2 \u03b5\u03bb\u03ad\u03b3\u03c7\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u039f\u03b9\u03ba\u03b5\u03af\u03bf \u03a6\u03bf\u03c1\u03ad\u03b1. \u0393\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b1\u03b9\u03c4\u03ad\u03c1\u03c9 \u03b5\u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2, \u03c0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b1\u03c0\u03b5\u03c5\u03b8\u03c5\u03bd\u03b8\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03bf \u03c4\u03bf\u03c0\u03b9\u03ba\u03cc \u0393\u03c1\u03b1\u03c6\u03b5\u03af\u03bf \u0391\u03c1\u03c9\u03b3\u03ae\u03c2 \u03a7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd.",
 		"zu": "Ukufinyelela amasevisi kulawulwa inhlangano yakho yasekhaya. Sicela uthinte ukusekela kwakho kwe-IT kwasendaweni uma unemibuzo.",
-		"xh": "Ufikelelo kwiinkonzo lulawulwa ngumbutho wakho wekhaya. Nceda uqhagamshelane nenkxaso yakho ye-IT yasekuhlaleni ngemibuzo."
+		"xh": "Ufikelelo kwiinkonzo lulawulwa ngumbutho wakho wekhaya. Nceda uqhagamshelane nenkxaso yakho ye-IT yasekuhlaleni ngemibuzo.",
+		"st": "Phihlello ho ditshebeletso e laolwa ke khampani ya heno. Ka kopo ikopanye le ba tshehetso ya IT ba heno ba lehae bakeng sa dipotso.",
+		"ca": "L’accés als serveis està controlat per la vostra organització principal. Poseu-vos en contacte amb el vostre suport informàtic local per resoldre els dubtes."
 	},
 	"expiry_date_text": {
 		"sl": "Datum poteka:",
@@ -60,7 +66,9 @@
 		"af": "Verval datum:",
 		"el": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03bb\u03ae\u03be\u03b7\u03c2 \u03b9\u03c3\u03c7\u03cd\u03bf\u03c2:",
 		"xh": "Umhla wpkuphelelwa:",
-		"zu": "Usuku lokuphelelwa isikhathi:"
+		"zu": "Usuku lokuphelelwa isikhathi:",
+		"st": "Letsatsi la phello:",
+		"ca": "Data de caducitat:"
 	},
 	"warning_header": {
 		"sl": "Pozor! Va\u0161e uporabni\u0161ko ime (NetID) %NETID% bo poteklo \u010dez %DAYSLEFT% %DAYS%!",
@@ -75,7 +83,9 @@
 		"af": "Waarskuwing, jou rekening %NETID% sal verval in %DAYSLEFT% %DAYS%!",
 		"el": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7: \u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 %NETID% \u03b8\u03b1 \u03bb\u03ae\u03be\u03b5\u03b9 \u03c3\u03b5 %DAYSLEFT% %DAYS%!",
 		"zu": "Isixwayiso, i-akhawunti yakho ethi %NETID% izophelelwa isikhathi ezinsukwini ezingu-%DAYSLEFT% %DAYS%!",
-		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa %DAYSLEFT% %DAYS%!"
+		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa %DAYSLEFT% %DAYS%!",
+		"st": "Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako nakong ya %DAYSLEFT% %DAYS%!",
+		"ca": "Advertència, el vostre compte %NETID% caducarà en %DAYSLEFT% %DAYS%!"
 	},
 	"warning_header_today": {
 		"sl": "Pozor! Va\u0161e uporabni\u0161ko ime (NetID) %NETID% pote\u010de danes!",
@@ -90,7 +100,9 @@
 		"af": "Waarskuwing, jou rekening %NETID% verval vandag!",
 		"el": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7: \u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 %NETID% \u03bb\u03ae\u03b3\u03b5\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1!",
 		"zu": "Isixwayiso, i-akhawunti yakho ethi %NETID% izophelelwa isikhathi namuhla!",
-		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa namhlanje!"
+		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa namhlanje!",
+		"st": "Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako kajeno!",
+		"ca": "Advertència, el vostre compte %NETID% caducarà avui!"
 	},
 	"warning": {
 		"sl": "Pozor! Va\u0161e uporabni\u0161ko ime (NetID) %NETID% bo poteklo \u010dez %DAYSLEFT% %DAYS%!",
@@ -105,7 +117,9 @@
 		"af": "Waarskuwing, jou rekening %NETID% sal verval in %DAYSLEFT% %DAYS%!",
 		"el": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7: \u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 %NETID% \u03b8\u03b1 \u03bb\u03ae\u03be\u03b5\u03b9 \u03c3\u03b5 %DAYSLEFT% %DAYS%!",
 		"zu": "Isixwayiso, i-akhawunti yakho ethi %NETID% izophelelwa isikhathi ezinsukwini ezingu-%DAYSLEFT% %DAYS%!",
-		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa %DAYSLEFT% %DAYS%!"
+		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa %DAYSLEFT% %DAYS%!",
+		"st": "Tlhokomediso, akhoanto ya hao %NETID% e tla fellwa ke nako nakong ya %DAYSLEFT% %DAYS%!",
+		"ca": "Advertència, el vostre compte %NETID% caducarà en %DAYSLEFT% %DAYS%!"
 	},
 	"warning_today": {
 		"sl": "Pozor! Va\u0161e uporabni\u0161ko ime (NetID) %NETID% pote\u010de danes!",
@@ -120,7 +134,9 @@
 		"af": "Waarskuwing, jou rekening %NETID% verval vandag!",
 		"el": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7: \u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 %NETID% \u03bb\u03ae\u03b3\u03b5\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1!",
 		"xh": "Isilumkiso, iakhawunti yakho %NETID% iza kuphelelwa namhlanje!",
-		"zu": "Isixwayiso, i-akhawunti yakho ethi %NETID% izophelelwa isikhathi namuhla!"
+		"zu": "Isixwayiso, i-akhawunti yakho ethi %NETID% izophelelwa isikhathi namuhla!",
+		"st": "Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako kajeno!",
+		"ca": "Advertència, el vostre compte %NETID% caducarà avui!"
 	},
 	"day": {
 		"sl": "dan",
@@ -135,7 +151,9 @@
 		"af": "dag",
 		"el": "\u03b7\u03bc\u03ad\u03c1\u03b1",
 		"xh": "usuku",
-		"zu": "usuku"
+		"zu": "usuku",
+		"st": "letsatsi",
+		"ca": "dia"
 	},
 	"days": {
 		"sl": "dni",
@@ -150,7 +168,9 @@
 		"af": "dae",
 		"el": "\u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
 		"zu": "izinsuku",
-		"xh": "iintsuku"
+		"xh": "iintsuku",
+		"st": "matsatsi",
+		"ca": "dies"
 	},
 	"btn_continue": {
 		"sl": "Zavedam se tega, nadaljuj...",
@@ -166,6 +186,8 @@
 		"af": "Ek is bewus hiervan, gaan voort...",
 		"el": "\u0395\u03af\u03bc\u03b1\u03b9 \u03b5\u03bd\u03ae\u03bc\u03b5\u03c1\u03bf\u03c2 - \u03c3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1",
 		"xh": "Ndiyakuqonda oku, qhubeka...",
-		"zu": "Ngiyakwazi lokhu, qhubeka..."
+		"zu": "Ngiyakwazi lokhu, qhubeka...",
+		"st": "Ke lemohile ka sena, tswela pele...",
+		"ca": "Sóc conscient d'això, continua..."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/lib/Auth/Process/ExpiryDate.php b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/lib/Auth/Process/ExpiryDate.php
index ddd5befc15..e95854e164 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/lib/Auth/Process/ExpiryDate.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/lib/Auth/Process/ExpiryDate.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\Module\expirycheck\Auth\Process;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+use Webmozart\Assert\Assert;
+
 /**
  * Filter which show "about to expire" warning or deny access if netid is expired.
  *
@@ -21,26 +27,32 @@
  * @author Alex Mihičinac, ARNES. <alexm@arnes.si>
  * @package SimpleSAMLphp
  */
-
 class ExpiryDate extends \SimpleSAML\Auth\ProcessingFilter
 {
+    /** @var int */
     private $warndaysbefore = 0;
+
+    /** @var string|null */
     private $netid_attr = null;
+
+    /** @var string|null */
     private $expirydate_attr = null;
+
+    /** @var string */
     private $date_format = 'd.m.Y';
 
 
     /**
      * Initialize this filter.
      *
-     * @param array $config  Configuration information about this filter.
+     * @param array &$config  Configuration information about this filter.
      * @param mixed $reserved  For future use.
      */
-    public function __construct($config, $reserved)
+    public function __construct(&$config, $reserved)
     {
         parent::__construct($config, $reserved);
 
-        assert(is_array($config));
+        Assert::isArray($config);
 
         if (array_key_exists('warndaysbefore', $config)) {
             $this->warndaysbefore = $config['warndaysbefore'];
@@ -75,12 +87,14 @@ public function __construct($config, $reserved)
         }
     }
 
+
     /**
      * Show expirational warning if remaining days is equal or under defined $warndaysbefore
-     * @param integer $expireOnDate
-     * @param integer $warndaysbefore
-     * @return bool
      *
+     * @param array &$state
+     * @param int $expireOnDate
+     * @param int $warndaysbefore
+     * @return bool
      */
     public function shWarning(&$state, $expireOnDate, $warndaysbefore)
     {
@@ -97,11 +111,12 @@ public function shWarning(&$state, $expireOnDate, $warndaysbefore)
         return false;
     }
 
+
     /**
-     *  Check if given date is older than today
-     *  @param integer $expireOnDate
-     *  @return bool
+     * Check if given date is older than today
      *
+     * @param int $expireOnDate
+     * @return bool
      */
     public function checkDate($expireOnDate)
     {
@@ -115,10 +130,12 @@ public function checkDate($expireOnDate)
         }
     }
 
+
     /**
      * Apply filter
      *
      * @param array &$state  The current state.
+     * @return void
      */
     public function process(&$state)
     {
@@ -129,32 +146,32 @@ public function process(&$state)
         $expireOnDate = strtotime($state['Attributes'][$this->expirydate_attr][0]);
 
         if ($this->shWarning($state, $expireOnDate, $this->warndaysbefore)) {
-            assert(is_array($state));
+            Assert::isArray($state);
             if (isset($state['isPassive']) && $state['isPassive'] === true) {
                 // We have a passive request. Skip the warning.
                 return;
             }
 
-            \SimpleSAML\Logger::warning('expirycheck: NetID '.$netId.' is about to expire!');
+            Logger::warning('expirycheck: NetID '.$netId.' is about to expire!');
 
             // Save state and redirect
             $state['expireOnDate'] = date($this->date_format, $expireOnDate);
             $state['netId'] = $netId;
-            $id = \SimpleSAML\Auth\State::saveState($state, 'expirywarning:about2expire');
-            $url = \SimpleSAML\Module::getModuleURL('expirycheck/about2expire.php');
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
+            $id = Auth\State::saveState($state, 'expirywarning:about2expire');
+            $url = Module::getModuleURL('expirycheck/about2expire.php');
+            Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
         }
 
         if (!$this->checkDate($expireOnDate)) {
-            \SimpleSAML\Logger::error('expirycheck: NetID '.$netId.
+            Logger::error('expirycheck: NetID '.$netId.
                 ' has expired ['.date($this->date_format, $expireOnDate).']. Access denied!');
 
             /* Save state and redirect. */
             $state['expireOnDate'] = date($this->date_format, $expireOnDate);
             $state['netId'] = $netId;
-            $id = \SimpleSAML\Auth\State::saveState($state, 'expirywarning:expired');
-            $url = \SimpleSAML\Module::getModuleURL('expirycheck/expired.php');
-            \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
+            $id = Auth\State::saveState($state, 'expirywarning:expired');
+            $url = Module::getModuleURL('expirycheck/expired.php');
+            Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
         }
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/locales/st/LC_MESSAGES/expirycheck.po b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/locales/st/LC_MESSAGES/expirycheck.po
new file mode 100644
index 0000000000..d6f4dd1861
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/locales/st/LC_MESSAGES/expirycheck.po
@@ -0,0 +1,89 @@
+
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: SimpleSAMLphp 1.15\n"
+"Report-Msgid-Bugs-To: simplesamlphp-translation@googlegroups.com\n"
+"POT-Creation-Date: 2019-12-12 12:11+0200\n"
+"PO-Revision-Date: 2019-12-12 12:11+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 1.3\n"
+
+msgid "{expirycheck:expwarning:contact_home}"
+msgstr ""
+"Phihlello ho ditshebeletso e laolwa ke khampani ya heno. Ka kopo ikopanye"
+" le ba tshehetso ya IT ba heno ba lehae bakeng sa dipotso."
+
+msgid "{expirycheck:expwarning:access_denied}"
+msgstr "Ha o na phihlello ho tshebeletso ena"
+
+msgid "I am aware of this, continue..."
+msgstr "Ke lemohile ka sena, tswela pele..."
+
+msgid "You do not have access to this service"
+msgstr "Ha o na phihlello ho tshebeletso ena"
+
+msgid "{expirycheck:expwarning:days}"
+msgstr "matsatsi"
+
+msgid "days"
+msgstr "matsatsi"
+
+msgid "day"
+msgstr "letsatsi"
+
+msgid "{expirycheck:expwarning:warning_today}"
+msgstr "Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako kajeno!"
+
+msgid "Expiration date:"
+msgstr "Letsatsi la phello:"
+
+msgid "{expirycheck:expwarning:no_access_to}"
+msgstr "Akhaonto ya hao %NETID% e feletswe ke nako, phihlello e hanetswe.!"
+
+msgid "{expirycheck:expwarning:expiry_date_text}"
+msgstr "Letsatsi la phello:"
+
+msgid "{expirycheck:expwarning:warning_header}"
+msgstr ""
+"Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako nakong ya "
+"%DAYSLEFT% %DAYS%!"
+
+msgid "{expirycheck:expwarning:btn_continue}"
+msgstr "Ke lemohile ka sena, tswela pele..."
+
+msgid ""
+"Access to services is controlled by your home organization. Please "
+"contact your local IT support for questions."
+msgstr ""
+"Phihlello ho ditshebeletso e laolwa ke khampani ya heno. Ka kopo ikopanye"
+" le ba tshehetso ya IT ba heno ba lehae bakeng sa dipotso."
+
+#, python-format
+msgid "Warning, your account %NETID% will expire in %DAYSLEFT% %DAYS%!"
+msgstr ""
+"Tlhokomediso, akhoanto ya hao %NETID% e tla fellwa ke nako nakong ya "
+"%DAYSLEFT% %DAYS%!"
+
+msgid "{expirycheck:expwarning:warning}"
+msgstr ""
+"Tlhokomediso, akhoanto ya hao %NETID% e tla fellwa ke nako nakong ya "
+"%DAYSLEFT% %DAYS%!"
+
+msgid "{expirycheck:expwarning:day}"
+msgstr "letsatsi"
+
+msgid "Your account %NETID% has expired, access denied!"
+msgstr "Akhaonto ya hao %NETID% e feletswe ke nako, phihlello e hanetswe.!"
+
+msgid "{expirycheck:expwarning:warning_header_today}"
+msgstr "Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako kajeno!"
+
+msgid "Warning, your account %NETID% will expire today!"
+msgstr "Tlhokomediso, akhaonto ya hao %NETID% e tla fellwa ke nako kajeno!"
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/phpunit.xml
new file mode 100644
index 0000000000..0540658da5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/phpunit.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>./vendor/simplesamlphp/simplesamlphp-test-framework/tests/</directory>
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/psalm.xml
new file mode 100644
index 0000000000..6775b5f473
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/psalm.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp expirycheck module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="templates" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+
+        <!-- Ignore InvalidScope on template-scripts - Remove for 2.0 -->
+        <InvalidScope>
+            <errorLevel type="suppress">
+                <file name="templates/*.tpl.php" />
+            </errorLevel>
+        </InvalidScope>
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/about2expire.php b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/about2expire.tpl.php
similarity index 96%
rename from vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/about2expire.php
rename to vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/about2expire.tpl.php
index 6b135f807f..c6600164c4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/about2expire.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/about2expire.tpl.php
@@ -29,7 +29,7 @@
 }
 ?>
 
-<h3><?php echo $warning; ?></h3>
+<h3><?php echo $this->data['warning']; ?></h3>
 <p><?php echo $this->t('{expirycheck:expwarning:expiry_date_text}')." ".$this->data['expireOnDate']; ?></p>
 <input type="submit" name="yes" id="yesbutton" value="<?php echo $buttonContinue; ?>" />
 </form>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/expired.php b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/expired.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/expired.php
rename to vendor/simplesamlphp/simplesamlphp/modules/expirycheck/templates/expired.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/tests/bootstrap.php
new file mode 100644
index 0000000000..193fa93618
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/expirycheck';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/about2expire.php b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/about2expire.php
index 1f1766c7e7..7a3bc22abd 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/about2expire.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/about2expire.php
@@ -12,6 +12,7 @@
     throw new \SimpleSAML\Error\BadRequest('Missing required StateId query parameter.');
 }
 $id = $_REQUEST['StateId'];
+/** @psalm-var array $state */
 $state = \SimpleSAML\Auth\State::loadState($id, 'expirywarning:about2expire');
 
 if (array_key_exists('yes', $_REQUEST)) {
@@ -27,41 +28,40 @@
 $t->data['autofocus'] = 'yesbutton';
 $t->data['yesTarget'] = \SimpleSAML\Module::getModuleURL('expirycheck/about2expire.php');
 $t->data['yesData'] = ['StateId' => $id];
-$t->data['warning'] = $warning;
 $t->data['expireOnDate'] = $state['expireOnDate'];
 $t->data['netId'] = $state['netId'];
 
 if ($daysleft == 0) {
     # netid will expire today
-    $this->data['header'] = $this->t('{expirycheck:expwarning:warning_header_today}', [
-                                '%NETID%' => htmlspecialchars($this->data['netId'])
+    $t->data['header'] = $t->t('{expirycheck:expwarning:warning_header_today}', [
+                                '%NETID%' => htmlspecialchars($t->data['netId'])
                         ]);
-    $this->data['warning'] = $this->t('{expirycheck:expwarning:warning_today}', [
-                                '%NETID%' => htmlspecialchars($this->data['netId'])
+    $t->data['warning'] = $t->t('{expirycheck:expwarning:warning_today}', [
+                                '%NETID%' => htmlspecialchars($t->data['netId'])
                         ]);
 } elseif ($daysleft == 1) {
     # netid will expire in one day
 
-    $this->data['header'] = $this->t('{expirycheck:expwarning:warning_header}', [
-                                '%NETID%' => htmlspecialchars($this->data['netId']),
-                                '%DAYS%' => $this->t('{expirycheck:expwarning:day}'),
+    $t->data['header'] = $t->t('{expirycheck:expwarning:warning_header}', [
+                                '%NETID%' => htmlspecialchars($t->data['netId']),
+                                '%DAYS%' => $t->t('{expirycheck:expwarning:day}'),
                                 '%DAYSLEFT%' => htmlspecialchars($daysleft),
                         ]);
-    $this->data['warning'] = $this->t('{expirycheck:expwarning:warning}', [
-                                '%NETID%' => htmlspecialchars($this->data['netId']),
-                                '%DAYS%' => $this->t('{expirycheck:expwarning:day}'),
+    $t->data['warning'] = $t->t('{expirycheck:expwarning:warning}', [
+                                '%NETID%' => htmlspecialchars($t->data['netId']),
+                                '%DAYS%' => $t->t('{expirycheck:expwarning:day}'),
                                 '%DAYSLEFT%' => htmlspecialchars($daysleft),
                         ]);
 } else {
     # netid will expire in next <daysleft> days
-    $this->data['header'] = $this->t('{expirycheck:expwarning:warning_header}', [
-                                '%NETID%' => htmlspecialchars($this->data['netId']),
-                                '%DAYS%' => $this->t('{expirycheck:expwarning:days}'),
+    $t->data['header'] = $t->t('{expirycheck:expwarning:warning_header}', [
+                                '%NETID%' => htmlspecialchars($t->data['netId']),
+                                '%DAYS%' => $t->t('{expirycheck:expwarning:days}'),
                                 '%DAYSLEFT%' => htmlspecialchars($daysleft),
                         ]);
-    $this->data['warning'] = $this->t('{expirycheck:expwarning:warning}', [
-                                '%NETID%' => htmlspecialchars($this->data['netId']),
-                                '%DAYS%' => $this->t('{expirycheck:expwarning:days}'),
+    $t->data['warning'] = $t->t('{expirycheck:expwarning:warning}', [
+                                '%NETID%' => htmlspecialchars($t->data['netId']),
+                                '%DAYS%' => $t->t('{expirycheck:expwarning:days}'),
                                 '%DAYSLEFT%' => htmlspecialchars($daysleft),
                         ]);
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/expired.php b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/expired.php
index 2d3d3b3e8d..95af697a12 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/expired.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/expirycheck/www/expired.php
@@ -11,6 +11,7 @@
 if (!array_key_exists('StateId', $_REQUEST)) {
     throw new \SimpleSAML\Error\BadRequest('Missing required StateId query parameter.');
 }
+/** @psalm-var array $state */
 $state = \SimpleSAML\Auth\State::loadState($_REQUEST['StateId'], 'expirywarning:expired');
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/ldap/.php_cs.dist
new file mode 100644
index 0000000000..e7d314696c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/.php_cs.dist
@@ -0,0 +1,15 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/ldap/.travis.yml
new file mode 100644
index 0000000000..3c250287a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/ldap/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/ldap/bin/check-syntax.sh
new file mode 100755
index 0000000000..db6dc4b014
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib tests -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/ldap/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/ldap/composer.json
new file mode 100644
index 0000000000..c994f0750c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/composer.json
@@ -0,0 +1,48 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-ldap",
+    "description": "A module that provides authentication against LDAP stores",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "ldap"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        },
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\ldap\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "suggest": {
+        "ext-ldap": "Needed when using LDAP authentication in SimpleSAMLphp"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-ldap/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-ldap"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/docs/ldap.md b/vendor/simplesamlphp/simplesamlphp/modules/ldap/docs/ldap.md
index 0ca2869067..fa730f5e19 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/ldap/docs/ldap.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/docs/ldap.md
@@ -42,6 +42,11 @@ authentication source:
 		 */
 		'attributes' => NULL,
 
+		/*
+		 * Which attributes should be base64 encoded after retrieval from the LDAP server.
+		 */
+		'attributes.binary' => ['jpegPhoto', 'objectGUID', 'objectSid', 'mS-DS-ConsistencyGuid'],
+
 		/*
 		 * The pattern which should be used to create the user's DN given the username.
 		 * %username% in this pattern will be replaced with the user's username.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Ldap.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Ldap.php
new file mode 100644
index 0000000000..4cdd62eee7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Ldap.php
@@ -0,0 +1,864 @@
+<?php
+
+namespace SimpleSAML\Module\ldap\Auth;
+
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+
+/**
+ * Constants defining possible errors
+ */
+
+define('ERR_INTERNAL', 1);
+define('ERR_NO_USER', 2);
+define('ERR_WRONG_PW', 3);
+define('ERR_AS_DATA_INCONSIST', 4);
+define('ERR_AS_INTERNAL', 5);
+define('ERR_AS_ATTRIBUTE', 6);
+
+// not defined in earlier PHP versions
+if (!defined('LDAP_OPT_DIAGNOSTIC_MESSAGE')) {
+    define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
+}
+
+/**
+ * The LDAP class holds helper functions to access an LDAP database.
+ *
+ * @author Andreas Aakre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
+ * @author Anders Lund, UNINETT AS. <anders.lund@uninett.no>
+ * @package SimpleSAMLphp
+ */
+
+class Ldap
+{
+    /**
+     * LDAP link identifier.
+     *
+     * @var resource
+     */
+    protected $ldap;
+
+    /**
+     * LDAP user: authz_id if SASL is in use, binding dn otherwise
+     *
+     * @var string|null
+     */
+    protected $authz_id = null;
+
+    /**
+     * Timeout value, in seconds.
+     *
+     * @var int
+     */
+    protected $timeout = 0;
+
+    /**
+     * Private constructor restricts instantiation to getInstance().
+     *
+     * @param string $hostname
+     * @param bool $enable_tls
+     * @param bool $debug
+     * @param int $timeout
+     * @param int $port
+     * @param bool $referrals
+     * @psalm-suppress NullArgument
+     */
+    public function __construct(
+        $hostname,
+        $enable_tls = true,
+        $debug = false,
+        $timeout = 0,
+        $port = 389,
+        $referrals = true
+    ) {
+        // Debug
+        Logger::debug('Library - LDAP __construct(): Setup LDAP with '.
+            'host=\''.$hostname.
+            '\', tls='.var_export($enable_tls, true).
+            ', debug='.var_export($debug, true).
+            ', timeout='.var_export($timeout, true).
+            ', referrals='.var_export($referrals, true));
+
+        /*
+         * Set debug level before calling connect. Note that this passes
+         * NULL to ldap_set_option, which is an undocumented feature.
+         *
+         * OpenLDAP 2.x.x or Netscape Directory SDK x.x needed for this option.
+         */
+        if ($debug && !ldap_set_option(null, LDAP_OPT_DEBUG_LEVEL, 7)) {
+            Logger::warning('Library - LDAP __construct(): Unable to set debug level (LDAP_OPT_DEBUG_LEVEL) to 7');
+        }
+
+        /*
+         * Prepare a connection for to this LDAP server. Note that this function
+         * doesn't actually connect to the server.
+         */
+        $resource = @ldap_connect($hostname, $port);
+        if ($resource === false) {
+            throw $this->makeException(
+                'Library - LDAP __construct(): Unable to connect to \''.$hostname.'\'',
+                ERR_INTERNAL
+            );
+        }
+        $this->ldap = $resource;
+
+        // Enable LDAP protocol version 3
+        if (!@ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, 3)) {
+            throw $this->makeException(
+                'Library - LDAP __construct(): Failed to set LDAP Protocol version (LDAP_OPT_PROTOCOL_VERSION) to 3',
+                ERR_INTERNAL
+            );
+        }
+
+        // Set referral option
+        if (!@ldap_set_option($this->ldap, LDAP_OPT_REFERRALS, $referrals)) {
+            throw $this->makeException(
+                'Library - LDAP __construct(): Failed to set LDAP Referrals (LDAP_OPT_REFERRALS) to '.$referrals,
+                ERR_INTERNAL
+            );
+        }
+
+        // Set timeouts, if supported
+        // (OpenLDAP 2.x.x or Netscape Directory SDK x.x needed)
+        $this->timeout = $timeout;
+        if ($timeout > 0) {
+            if (!@ldap_set_option($this->ldap, LDAP_OPT_NETWORK_TIMEOUT, $timeout)) {
+                Logger::warning(
+                    'Library - LDAP __construct(): Unable to set timeouts (LDAP_OPT_NETWORK_TIMEOUT) to '.$timeout
+                );
+            }
+            if (!@ldap_set_option($this->ldap, LDAP_OPT_TIMELIMIT, $timeout)) {
+                Logger::warning(
+                    'Library - LDAP __construct(): Unable to set timeouts (LDAP_OPT_TIMELIMIT) to '.$timeout
+                );
+            }
+        }
+
+        // Enable TLS, if needed
+        if (stripos($hostname, "ldaps:") === false && $enable_tls) {
+            if (!@ldap_start_tls($this->ldap)) {
+                throw $this->makeException('Library - LDAP __construct():'.
+                    ' Unable to force TLS', ERR_INTERNAL);
+            }
+        }
+    }
+
+
+    /**
+     * Convenience method to create an LDAPException as well as log the
+     * description.
+     *
+     * @param string $description The exception's description
+     * @param int|null $type The exception's type
+     * @return \Exception
+     */
+    private function makeException($description, $type = null)
+    {
+        $errNo = @ldap_errno($this->ldap);
+
+        // Decide exception type and return
+        if ($type !== null) {
+            if ($errNo !== 0) {
+                // Only log real LDAP errors; not success
+                Logger::error($description.'; cause: \''.ldap_error($this->ldap).'\' (0x'.dechex($errNo).')');
+            } else {
+                Logger::error($description);
+            }
+
+            switch ($type) {
+                case ERR_INTERNAL:// 1 - ExInternal
+                    return new Error\Exception($description, $errNo);
+                case ERR_NO_USER:// 2 - ExUserNotFound
+                    return new Error\UserNotFound($description, $errNo);
+                case ERR_WRONG_PW:// 3 - ExInvalidCredential
+                    return new Error\InvalidCredential($description, $errNo);
+                case ERR_AS_DATA_INCONSIST:// 4 - ExAsDataInconsist
+                    return new Error\AuthSource('ldap', $description);
+                case ERR_AS_INTERNAL:// 5 - ExAsInternal
+                    return new Error\AuthSource('ldap', $description);
+            }
+        } else {
+            if ($errNo !== 0) {
+                $description .= '; cause: \''.ldap_error($this->ldap).'\' (0x'.dechex($errNo).')';
+                if (@ldap_get_option($this->ldap, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extendedError)
+                    && !empty($extendedError)
+                ) {
+                    $description .= '; additional: \''.$extendedError.'\'';
+                }
+            }
+            switch ($errNo) {
+                case 0x20://LDAP_NO_SUCH_OBJECT
+                    Logger::warning($description);
+                    return new Error\UserNotFound($description, $errNo);
+                case 0x31://LDAP_INVALID_CREDENTIALS
+                    Logger::info($description);
+                    return new Error\InvalidCredential($description, $errNo);
+                case -1://NO_SERVER_CONNECTION
+                    Logger::error($description);
+                    return new Error\AuthSource('ldap', $description);
+                default:
+                    Logger::error($description);
+                    return new Error\AuthSource('ldap', $description);
+            }
+        }
+        return new \Exception('Unknown LDAP error.');
+    }
+
+
+    /**
+     * Search for DN from a single base.
+     *
+     * @param string $base
+     * Indication of root of subtree to search
+     * @param string|array $attribute
+     * The attribute name(s) to search for.
+     * @param string $value
+     * The attribute value to search for.
+     * Additional search filter
+     * @param string|null $searchFilter
+     * The scope of the search
+     * @param string $scope
+     * @return string
+     * The DN of the resulting found element.
+     * @throws Error\Exception if:
+     * - Attribute parameter is wrong type
+     * @throws Error\AuthSource if:
+     * - Not able to connect to LDAP server
+     * - False search result
+     * - Count return false
+     * - Searche found more than one result
+     * - Failed to get first entry from result
+     * - Failed to get DN for entry
+     * @throws Error\UserNotFound if:
+     * - Zero entries were found
+     * @psalm-suppress TypeDoesNotContainType
+     */
+    private function search($base, $attribute, $value, $searchFilter = null, $scope = "subtree")
+    {
+        // Create the search filter
+        /** @var array $attribute */
+        $attribute = self::escape_filter_value($attribute, false);
+
+        /** @var string $value */
+        $value = self::escape_filter_value($value, true);
+
+        $filter = '';
+        foreach ($attribute as $attr) {
+            $filter .= '('.$attr.'='.$value.')';
+        }
+        $filter = '(|'.$filter.')';
+
+        // Append LDAP filters if defined
+        if ($searchFilter !== null) {
+            $filter = "(&".$filter."".$searchFilter.")";
+        }
+
+        // Search using generated filter
+        Logger::debug('Library - LDAP search(): Searching base ('.$scope.') \''.$base.'\' for \''.$filter.'\'');
+        if ($scope === 'base') {
+            $result = @ldap_read($this->ldap, $base, $filter, [], 0, 0, $this->timeout, LDAP_DEREF_NEVER);
+        } elseif ($scope === 'onelevel') {
+            $result = @ldap_list($this->ldap, $base, $filter, [], 0, 0, $this->timeout, LDAP_DEREF_NEVER);
+        } else {
+            $result = @ldap_search($this->ldap, $base, $filter, [], 0, 0, $this->timeout, LDAP_DEREF_NEVER);
+        }
+
+        if ($result === false) {
+            throw $this->makeException(
+                'Library - LDAP search(): Failed search on base \''.$base.'\' for \''.$filter.'\''
+            );
+        }
+
+        // Sanity checks on search results
+        $count = @ldap_count_entries($this->ldap, $result);
+        if ($count === false) {
+            throw $this->makeException('Library - LDAP search(): Failed to get number of entries returned');
+        } elseif ($count > 1) {
+            // More than one entry is found. External error
+            throw $this->makeException(
+                'Library - LDAP search(): Found '.$count.' entries searching base \''.$base.'\' for \''.$filter.'\'',
+                ERR_AS_DATA_INCONSIST
+            );
+        } elseif ($count === 0) {
+            // No entry is fond => wrong username is given (or not registered in the catalogue). User error
+            throw $this->makeException(
+                'Library - LDAP search(): Found no entries searching base \''.$base.'\' for \''.$filter.'\'',
+                ERR_NO_USER
+            );
+        }
+
+
+        // Resolve the DN from the search result
+        $entry = @ldap_first_entry($this->ldap, $result);
+        if ($entry === false) {
+            throw $this->makeException(
+                'Library - LDAP search(): Unable to retrieve result after searching base \''.
+                    $base.'\' for \''.$filter.'\''
+            );
+        }
+        $dn = @ldap_get_dn($this->ldap, $entry);
+        if ($dn === false) {
+            throw $this->makeException(
+                'Library - LDAP search(): Unable to get DN after searching base \''.$base.'\' for \''.$filter.'\''
+            );
+        }
+        return $dn;
+    }
+
+
+    /**
+     * Search for a DN.
+     *
+     * @param string|array $base
+     * The base, or bases, which to search from.
+     * @param string|array $attribute
+     * The attribute name(s) searched for.
+     * @param string $value
+     * The attribute value searched for.
+     * @param bool $allowZeroHits
+     * Determines if the method will throw an exception if no hits are found.
+     * Defaults to FALSE.
+     * @param string|null $searchFilter
+     * Additional searchFilter to be added to the (attribute=value) filter
+     * @param string $scope
+     * The scope of the search
+     * @return string|null
+     * The DN of the matching element, if found. If no element was found and
+     * $allowZeroHits is set to FALSE, an exception will be thrown; otherwise
+     * NULL will be returned.
+     * @throws Error\AuthSource if:
+     * - LDAP search encounter some problems when searching cataloge
+     * - Not able to connect to LDAP server
+     * @throws Error\UserNotFound if:
+     * - $allowZeroHits is FALSE and no result is found
+     *
+     */
+    public function searchfordn(
+        $base,
+        $attribute,
+        $value,
+        $allowZeroHits = false,
+        $searchFilter = null,
+        $scope = 'subtree'
+    ) {
+        // Traverse all search bases, returning DN if found
+        $bases = \SimpleSAML\Utils\Arrays::arrayize($base);
+        foreach ($bases as $current) {
+            try {
+                // Single base search
+                $result = $this->search($current, $attribute, $value, $searchFilter, $scope);
+
+                // We don't hawe to look any futher if user is found
+                if (!empty($result)) {
+                    return $result;
+                }
+                // If search failed, attempt the other base DNs
+            } catch (Error\UserNotFound $e) {
+                // Just continue searching
+            }
+        }
+        // Decide what to do for zero entries
+        Logger::debug('Library - LDAP searchfordn(): No entries found');
+        if ($allowZeroHits) {
+            // Zero hits allowed
+            return null;
+        } else {
+            // Zero hits not allowed
+            throw $this->makeException('Library - LDAP searchfordn(): LDAP search returned zero entries for'.
+                ' filter \'('.join(' | ', \SimpleSAML\Utils\Arrays::arrayize($attribute)).' = '.$value.')\' on base(s) \'('.join(' & ', $bases).')\'', 2);
+        }
+    }
+
+
+    /**
+     * This method was created specifically for the ldap:AttributeAddUsersGroups->searchActiveDirectory()
+     * method, but could be used for other LDAP search needs. It will search LDAP and return all the entries.
+     *
+     * @throws \Exception
+     * @param string|array $bases
+     * @param string|array $filters Array of 'attribute' => 'values' to be combined into the filter,
+     *     or a raw filter string
+     * @param string|array $attributes Array of attributes requested from LDAP
+     * @param array $binaryAttributes Array of attributes that need to be base64 encoded
+     * @param bool $and If multiple filters defined, then either bind them with & or |
+     * @param bool $escape Weather to escape the filter values or not
+     * @param string $scope The scope of the search
+     * @return array
+     */
+    public function searchformultiple(
+        $bases,
+        $filters,
+        $attributes = [],
+        $binaryAttributes = [],
+        $and = true,
+        $escape = true,
+        $scope = 'subtree'
+    ) {
+        // Escape the filter values, if requested
+        if ($escape) {
+            $filters = $this->escape_filter_value($filters, false);
+        }
+
+        // Build search filter
+        $filter = '';
+        if (is_array($filters)) {
+            foreach ($filters as $attribute => $value) {
+                $filter .= "($attribute=$value)";
+            }
+            if (count($filters) > 1) {
+                $filter = ($and ? '(&' : '(|').$filter.')';
+            }
+        } else {
+            $filter = $filters;
+        }
+
+        // Verify filter was created
+        if ($filter == '' || $filter == '(=)') {
+            throw $this->makeException('ldap:LdapConnection->search_manual : No search filters defined', ERR_INTERNAL);
+        }
+
+        // Verify at least one base was passed
+        $bases = (array) $bases;
+        if (empty($bases)) {
+            throw $this->makeException('ldap:LdapConnection->search_manual : No base DNs were passed', ERR_INTERNAL);
+        }
+
+        $attributes = \SimpleSAML\Utils\Arrays::arrayize($attributes);
+
+        // Search each base until result is found
+        $result = false;
+        foreach ($bases as $base) {
+            if ($scope === 'base') {
+                $result = @ldap_read($this->ldap, $base, $filter, $attributes, 0, 0, $this->timeout);
+            } elseif ($scope === 'onelevel') {
+                $result = @ldap_list($this->ldap, $base, $filter, $attributes, 0, 0, $this->timeout);
+            } else {
+                $result = @ldap_search($this->ldap, $base, $filter, $attributes, 0, 0, $this->timeout);
+            }
+
+            if ($result !== false && @ldap_count_entries($this->ldap, $result) > 0) {
+                break;
+            }
+        }
+
+        // Verify that a result was found in one of the bases
+        if ($result === false) {
+            throw $this->makeException(
+                'ldap:LdapConnection->search_manual : Failed to search LDAP using base(s) ['.
+                implode('; ', $bases).'] with filter ['.$filter.']. LDAP error ['.
+                ldap_error($this->ldap).']'
+            );
+        } elseif (@ldap_count_entries($this->ldap, $result) < 1) {
+            throw $this->makeException(
+                'ldap:LdapConnection->search_manual : No entries found in LDAP using base(s) ['.
+                implode('; ', $bases).'] with filter ['.$filter.']',
+                ERR_NO_USER
+            );
+        }
+
+        // Get all results
+        $results = ldap_get_entries($this->ldap, $result);
+        if ($results === false) {
+            throw $this->makeException(
+                'ldap:LdapConnection->search_manual : Unable to retrieve entries from search results'
+            );
+        }
+
+        // parse each entry and process its attributes
+        for ($i = 0; $i < $results['count']; $i++) {
+            $entry = $results[$i];
+
+            // iterate over the attributes of the entry
+            for ($j = 0; $j < $entry['count']; $j++) {
+                $name = $entry[$j];
+                $attribute = $entry[$name];
+
+                // decide whether to base64 encode or not
+                for ($k = 0; $k < $attribute['count']; $k++) {
+                    // base64 encode binary attributes
+                    if (in_array($name, $binaryAttributes, true)) {
+                        $results[$i][$name][$k] = base64_encode($attribute[$k]);
+                    }
+                }
+            }
+        }
+
+        // Remove the count and return
+        unset($results['count']);
+        return $results;
+    }
+
+
+    /**
+     * Bind to LDAP with a specific DN and password. Simple wrapper around
+     * ldap_bind() with some additional logging.
+     *
+     * @param string $dn
+     * The DN used.
+     * @param string $password
+     * The password used.
+     * @param array $sasl_args
+     * Array of SASL options for SASL bind
+     * @return bool
+     * Returns TRUE if successful, FALSE if
+     * LDAP_INVALID_CREDENTIALS, LDAP_X_PROXY_AUTHZ_FAILURE,
+     * LDAP_INAPPROPRIATE_AUTH, LDAP_INSUFFICIENT_ACCESS
+     * @throws Error\Exception on other errors
+     */
+    public function bind($dn, $password, array $sasl_args = null)
+    {
+        if ($sasl_args != null) {
+            if (!function_exists('ldap_sasl_bind')) {
+                $ex_msg = 'Library - missing SASL support';
+                throw $this->makeException($ex_msg);
+            }
+
+            // SASL Bind, with error handling
+            $authz_id = $sasl_args['authz_id'];
+            $error = @ldap_sasl_bind(
+                $this->ldap,
+                $dn,
+                $password,
+                $sasl_args['mech'],
+                $sasl_args['realm'],
+                $sasl_args['authc_id'],
+                $sasl_args['authz_id'],
+                $sasl_args['props']
+            );
+        } else {
+            // Simple Bind, with error handling
+            $authz_id = $dn;
+            $error = @ldap_bind($this->ldap, $dn, $password);
+        }
+
+        if ($error === true) {
+            // Good
+            $this->authz_id = $authz_id;
+            Logger::debug('Library - LDAP bind(): Bind successful with DN \''.$dn.'\'');
+            return true;
+        }
+
+        /* Handle errors
+         * LDAP_INVALID_CREDENTIALS
+         * LDAP_INSUFFICIENT_ACCESS */
+        switch (ldap_errno($this->ldap)) {
+            case 32: // LDAP_NO_SUCH_OBJECT
+                // no break
+            case 47: // LDAP_X_PROXY_AUTHZ_FAILURE
+                // no break
+            case 48: // LDAP_INAPPROPRIATE_AUTH
+                // no break
+            case 49: // LDAP_INVALID_CREDENTIALS
+                // no break
+            case 50: // LDAP_INSUFFICIENT_ACCESS
+                return false;
+            default:
+                break;
+        }
+
+        // Bad
+        throw $this->makeException('Library - LDAP bind(): Bind failed with DN \''.$dn.'\'');
+    }
+
+
+    /**
+     * Applies an LDAP option to the current connection.
+     *
+     * @throws Exception
+     * @param mixed $option
+     * @param mixed $value
+     * @return void
+     */
+    public function setOption($option, $value)
+    {
+        // Attempt to set the LDAP option
+        if (!@ldap_set_option($this->ldap, $option, $value)) {
+            throw $this->makeException(
+                'ldap:LdapConnection->setOption : Failed to set LDAP option ['.
+                $option.'] with the value ['.$value.'] error: '.ldap_error($this->ldap),
+                ERR_INTERNAL
+            );
+        }
+
+        // Log debug message
+        Logger::debug(
+            'ldap:LdapConnection->setOption : Set the LDAP option ['.
+            $option.'] with the value ['.$value.']'
+        );
+    }
+
+
+    /**
+     * Search a given DN for attributes, and return the resulting associative
+     * array.
+     *
+     * @param string $dn
+     * The DN of an element.
+     * @param string|array $attributes
+     * The names of the attribute(s) to retrieve. Defaults to NULL; that is,
+     * all available attributes. Note that this is not very effective.
+     * @param array $binaryAttributes
+     * The names of the attribute(s) to base64 encode
+     * @param int $maxsize
+     * The maximum size of any attribute's value(s). If exceeded, the attribute
+     * will not be returned.
+     * @return array
+     * The array of attributes and their values.
+     * @see http://no.php.net/manual/en/function.ldap-read.php
+     */
+    public function getAttributes($dn, $attributes = null, $binaryAttributes = [], $maxsize = null)
+    {
+        // Preparations, including a pretty debug message...
+        $description = 'all attributes';
+        if (is_array($attributes)) {
+            $description = '\''.join(',', $attributes).'\'';
+        } else {
+            // Get all attributes...
+            // TODO: Verify that this originally was the intended behaviour. Could $attributes be a string?
+            $attributes = [];
+        }
+        Logger::debug('Library - LDAP getAttributes(): Getting '.$description.' from DN \''.$dn.'\'');
+
+        // Attempt to get attributes
+        // TODO: Should aliases be dereferenced?
+        /** @var array $attributes */
+        $result = @ldap_read($this->ldap, $dn, 'objectClass=*', $attributes, 0, 0, $this->timeout);
+        if ($result === false) {
+            throw $this->makeException('Library - LDAP getAttributes(): Failed to get attributes from DN \''.$dn.'\'');
+        }
+        $entry = @ldap_first_entry($this->ldap, $result);
+        if ($entry === false) {
+            throw $this->makeException('Library - LDAP getAttributes(): Could not get first entry from DN \''.$dn.'\'');
+        }
+        unset($attributes);
+
+        /** @var array|false $attributes */
+        $attributes = @ldap_get_attributes($this->ldap, $entry);
+        if ($attributes === false) {
+            throw $this->makeException(
+                'Library - LDAP getAttributes(): Could not get attributes of first entry from DN \''.$dn.'\''
+            );
+        }
+
+        // Parsing each found attribute into our result set
+        $result = []; // Recycling $result... Possibly bad practice.
+        for ($i = 0; $i < $attributes['count']; $i++) {
+            // Ignore attributes that exceed the maximum allowed size
+            $name = $attributes[$i];
+            $attribute = $attributes[$name];
+
+            // Deciding whether to base64 encode
+            $values = [];
+            for ($j = 0; $j < $attribute['count']; $j++) {
+                $value = $attribute[$j];
+
+                if (!empty($maxsize) && strlen($value) > $maxsize) {
+                    // Ignoring and warning
+                    Logger::warning('Library - LDAP getAttributes(): Attribute \''.
+                        $name.'\' exceeded maximum allowed size by '.(strlen($value) - $maxsize));
+                    continue;
+                }
+
+                // Base64 encode binary attributes
+                if (in_array($name, $binaryAttributes)) {
+                    $values[] = base64_encode($value);
+                } else {
+                    $values[] = $value;
+                }
+            }
+
+            // Adding
+            $result[$name] = $values;
+        }
+
+        // We're done
+        Logger::debug('Library - LDAP getAttributes(): Found attributes \'('.join(',', array_keys($result)).')\'');
+        return $result;
+    }
+
+
+    /**
+     * Enter description here...
+     *
+     * @param array $config
+     * @param string $username
+     * @param string $password
+     * @return array|false
+     */
+    public function validate($config, $username, $password = null)
+    {
+        /**
+         * Escape any characters with a special meaning in LDAP. The following
+         * characters have a special meaning (according to RFC 2253):
+         * ',', '+', '"', '\', '<', '>', ';', '*'
+         * These characters are escaped by prefixing them with '\'.
+         */
+        $username = addcslashes($username, ',+"\\<>;*');
+
+        if (isset($config['priv_user_dn'])) {
+            $this->bind($config['priv_user_dn'], $config['priv_user_pw']);
+        }
+        if (isset($config['dnpattern'])) {
+            $dn = str_replace('%username%', $username, $config['dnpattern']);
+        } else {
+            /** @var string $dn */
+            $dn = $this->searchfordn($config['searchbase'], $config['searchattributes'], $username, false);
+        }
+
+        if ($password !== null) {
+            // checking users credentials ... assuming below that she may read her own attributes ...
+            // escape characters with a special meaning, also in the password
+            $password = addcslashes($password, ',+"\\<>;*');
+            if (!$this->bind($dn, $password)) {
+                Logger::info(
+                    'Library - LDAP validate(): Failed to authenticate \''.$username.'\' using DN \''.$dn.'\''
+                );
+                return false;
+            }
+        }
+
+        /**
+         * Retrieve attributes from LDAP
+         */
+        $attributes = $this->getAttributes($dn, $config['attributes'], $config['attributes.binary']);
+        return $attributes;
+    }
+
+
+    /**
+     * Borrowed function from PEAR:LDAP.
+     *
+     * Escapes the given VALUES according to RFC 2254 so that they can be safely used in LDAP filters.
+     *
+     * Any control characters with an ACII code < 32 as well as the characters with special meaning in
+     * LDAP filters "*", "(", ")", and "\" (the backslash) are converted into the representation of a
+     * backslash followed by two hex digits representing the hexadecimal value of the character.
+     *
+     * @static
+     * @param string|array $values Array of values to escape
+     * @param bool $singleValue
+     * @return string|array Array $values, but escaped
+     */
+    public static function escape_filter_value($values = [], $singleValue = true)
+    {
+        // Parameter validation
+        $values = \SimpleSAML\Utils\Arrays::arrayize($values);
+
+        foreach ($values as $key => $val) {
+            if ($val === null) {
+                $val = '\0'; // apply escaped "null" if string is empty
+            } else {
+                // Escaping of filter meta characters
+                $val = str_replace('\\', '\5c', $val);
+                $val = str_replace('*', '\2a', $val);
+                $val = str_replace('(', '\28', $val);
+                $val = str_replace(')', '\29', $val);
+
+                // ASCII < 32 escaping
+                $val = self::asc2hex32($val);
+            }
+
+            $values[$key] = $val;
+        }
+        if ($singleValue) {
+            return $values[0];
+        }
+        return $values;
+    }
+
+
+    /**
+     * Borrowed function from PEAR:LDAP.
+     *
+     * Converts all ASCII chars < 32 to "\HEX"
+     *
+     * @param string $string String to convert
+     *
+     * @static
+     * @return string
+     */
+    public static function asc2hex32($string)
+    {
+        for ($i = 0; $i < strlen($string); $i++) {
+            $char = substr($string, $i, 1);
+            if (ord($char) < 32) {
+                $hex = dechex(ord($char));
+                if (strlen($hex) == 1) {
+                    $hex = '0'.$hex;
+                }
+                $string = str_replace($char, '\\'.$hex, $string);
+            }
+        }
+        return $string;
+    }
+
+    /**
+     * Convert SASL authz_id into a DN
+     *
+     * @param string $searchBase
+     * @param array $searchAttributes
+     * @param string $authz_id
+     * @return string|null
+     */
+    private function authzidToDn($searchBase, $searchAttributes, $authz_id)
+    {
+        if (preg_match("/^dn:/", $authz_id)) {
+            return preg_replace("/^dn:/", "", $authz_id);
+        }
+
+        if (preg_match("/^u:/", $authz_id)) {
+            return $this->searchfordn(
+                $searchBase,
+                $searchAttributes,
+                preg_replace("/^u:/", "", $authz_id)
+            );
+        }
+        return $authz_id;
+    }
+
+    /**
+     * ldap_exop_whoami accessor, if available. Use requested authz_id
+     * otherwise.
+     *
+     * ldap_exop_whoami() has been provided as a third party patch that
+     * waited several years to get its way upstream:
+     * http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/databases/php-ldap/files
+     *
+     * When it was integrated into PHP repository, the function prototype
+     * was changed, The new prototype was used in third party patch for
+     * PHP 7.0 and 7.1, hence the version test below.
+     *
+     * @param string $searchBase
+     * @param array $searchAttributes
+     * @throws \Exception
+     * @return string
+     */
+    public function whoami($searchBase, $searchAttributes)
+    {
+        $authz_id = '';
+        if (function_exists('ldap_exop_whoami')) {
+            if (version_compare(phpversion(), '7', '<')) {
+                /** @psalm-suppress TooManyArguments */
+                if (ldap_exop_whoami($this->ldap, $authz_id) === false) {
+                    throw $this->makeException('LDAP whoami exop failure');
+                }
+            } else {
+                /** @var string|false $authz_id */
+                $authz_id = ldap_exop_whoami($this->ldap);
+                if ($authz_id === false) {
+                    throw $this->makeException('LDAP whoami exop failure');
+                }
+            }
+        } else {
+            $authz_id = $this->authz_id;
+        }
+
+        $dn = $this->authzidToDn($searchBase, $searchAttributes, $authz_id);
+
+        if (empty($dn)) {
+            throw $this->makeException('Cannot figure userID');
+        }
+
+        return $dn;
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddFromLDAP.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddFromLDAP.php
index a1062376d9..8ac64a37ec 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddFromLDAP.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddFromLDAP.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\ldap\Auth\Process;
 
+use SimpleSAML\Module\ldap\Auth\Ldap;
+
 /**
  * Filter to add attributes to the identity by executing a query against an LDAP directory
  *
@@ -34,7 +36,6 @@
  * @author Remy Blom <remy.blom@hku.nl>
  * @package SimpleSAMLphp
  */
-
 class AttributeAddFromLDAP extends BaseFilter
 {
     /**
@@ -45,6 +46,13 @@ class AttributeAddFromLDAP extends BaseFilter
     protected $search_attributes;
 
 
+    /**
+     * LDAP attributes to base64 encode
+     *
+     * @var array
+     */
+    protected $binary_attributes;
+
     /**
      * LDAP search filter to use in the LDAP query
      *
@@ -60,6 +68,7 @@ class AttributeAddFromLDAP extends BaseFilter
      */
     protected $attr_policy;
 
+
     /**
      * Initialize this filter.
      *
@@ -120,6 +129,7 @@ public function __construct($config, $reserved)
         parent::__construct($config, $reserved);
 
         // Get filter specific config options
+        $this->binary_attributes = $this->config->getArray('attributes.binary', []);
         $this->search_attributes = $this->config->getArrayize('attributes', []);
         if (empty($this->search_attributes)) {
             $new_attribute = $this->config->getString('attribute.new', '');
@@ -136,6 +146,7 @@ public function __construct($config, $reserved)
      * Add attributes from an LDAP server.
      *
      * @param array &$request The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -152,7 +163,7 @@ public function process(&$request)
             $arrSearch[] = '%'.$attr.'%';
 
             if (strlen($val[0]) > 0) {
-                $arrReplace[] = \SimpleSAML\Auth\LDAP::escape_filter_value($val[0]);
+                $arrReplace[] = Ldap::escape_filter_value($val[0]);
             } else {
                 $arrReplace[] = '';
             }
@@ -187,6 +198,7 @@ public function process(&$request)
                 $this->base_dn,
                 $filter,
                 array_values($this->search_attributes),
+                $this->binary_attributes,
                 true,
                 false
             );
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddUsersGroups.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddUsersGroups.php
index f1bfe5e0a4..5e3d63bf28 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddUsersGroups.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/AttributeAddUsersGroups.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\ldap\Auth\Process;
 
+use SimpleSAML\Utils\Arrays;
+
 /**
  * Does a reverse membership lookup on the logged in user,
  * looking for groups it is a member of and adds them to
@@ -10,7 +12,6 @@
  * @author Ryan Panning <panman@traileyes.com>
  * @package SimpleSAMLphp
  */
-
 class AttributeAddUsersGroups extends BaseFilter
 {
     /**
@@ -21,6 +22,7 @@ class AttributeAddUsersGroups extends BaseFilter
      *
      * @throws \SimpleSAML\Error\Exception
      * @param $request
+     * @return void
      */
     public function process(&$request)
     {
@@ -319,7 +321,7 @@ protected function searchActiveDirectory($dn)
             ' Member Attribute: '.$map['member'].
             ' Type Attribute: '.$map['type'].
             ' Type Value: '.$this->type_map['group'].
-            ' Base: '.implode('; ', $this->base_dn)
+            ' Base: '.implode('; ', Arrays::Arrayize($this->base_dn))
         );
 
         // AD connections should have this set
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/BaseFilter.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/BaseFilter.php
index f7de0656fc..81f1e18997 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/BaseFilter.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/Auth/Process/BaseFilter.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\ldap\Auth\Process;
 
+use SimpleSAML\Module\ldap\Auth\Ldap;
+
 /**
  * This base LDAP filter class can be extended to enable real
  * filter classes direct access to the authsource ldap config
@@ -14,7 +16,6 @@
  * @author Remy Blom <remy.blom@hku.nl>
  * @package SimpleSAMLphp
  */
-
 abstract class BaseFilter extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
@@ -50,9 +51,9 @@ abstract class BaseFilter extends \SimpleSAML\Auth\ProcessingFilter
      * Instance, object of the ldap connection. Stored here to
      * be access later during processing.
      *
-     * @var \SimpleSAML\Auth\Ldap
+     * @var \SimpleSAML\Module\ldap\Auth\Ldap|null
      */
-    private $ldap;
+    private $ldap = null;
 
 
     /**
@@ -90,8 +91,8 @@ abstract class BaseFilter extends \SimpleSAML\Auth\ProcessingFilter
      * instance/object and stores everything in class members.
      *
      * @throws \SimpleSAML\Error\Exception
-     * @param array $config
-     * @param $reserved
+     * @param array &$config
+     * @param mixed $reserved
      */
     public function __construct(&$config, $reserved)
     {
@@ -250,17 +251,18 @@ public function __construct(&$config, $reserved)
         );
     }
 
+
     /**
      * Getter for the LDAP connection object. Created this getter
      * rather than setting in the constructor to avoid unnecessarily
      * connecting to LDAP when it might not be needed.
      *
-     * @return \SimpleSAML\Auth\Ldap
+     * @return \SimpleSAML\Module\ldap\Auth\Ldap
      */
     protected function getLdap()
     {
         // Check if already connected
-        if ($this->ldap) {
+        if (isset($this->ldap)) {
             return $this->ldap;
         }
 
@@ -288,13 +290,14 @@ protected function getLdap()
         );
 
         // Connect to the LDAP server to be queried during processing
-        $this->ldap = new \SimpleSAML\Auth\LDAP($hostname, $enable_tls, $debug, $timeout, $port, $referrals);
+        $this->ldap = new Ldap($hostname, $enable_tls, $debug, $timeout, $port, $referrals);
         $this->ldap->bind($username, $password);
 
         // All done
         return $this->ldap;
     }
 
+
     /**
      * Local utility function to get details about a variable,
      * basically converting it to a string to be used in a log
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/ConfigHelper.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/ConfigHelper.php
index d4dcff33ad..fb63dffa4d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/ConfigHelper.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/lib/ConfigHelper.php
@@ -100,6 +100,11 @@ class ConfigHelper
      */
     private $attributes;
 
+    /**
+     * The attributes that are marked binary in the LDAP-schema. They will be base64 encoded.
+     */
+    protected $binaryAttributes;
+
     /**
      * The user cannot get all attributes, privileged reader required
      */
@@ -162,6 +167,7 @@ public function __construct($config, $location)
         }
 
         $this->attributes = $config->getArray('attributes', null);
+        $this->binaryAttributes = $config->getArray('attributes.binary', []);
     }
 
 
@@ -186,7 +192,7 @@ public function login($username, $password, array $sasl_args = null)
             throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
         }
 
-        $ldap = new \SimpleSAML\Auth\LDAP(
+        $ldap = new Auth\Ldap(
             $this->hostname,
             $this->enableTLS,
             $this->debug,
@@ -205,6 +211,10 @@ public function login($username, $password, array $sasl_args = null)
                 }
             }
 
+            /**
+             * PHPdoc changed in SSP 1.18; Remove it after release
+             * @var string|null $dn
+             */
             $dn = $ldap->searchfordn(
                 $this->searchBase,
                 $this->searchAttributes,
@@ -213,6 +223,7 @@ public function login($username, $password, array $sasl_args = null)
                 $this->searchFilter,
                 $this->searchScope
             );
+
             if ($dn === null) {
                 /* User not found with search. */
                 \SimpleSAML\Logger::info($this->location.': Unable to find users DN. username=\''.$username.'\'');
@@ -238,7 +249,7 @@ public function login($username, $password, array $sasl_args = null)
             }
         }
 
-        return $ldap->getAttributes($dn, $this->attributes);
+        return $ldap->getAttributes($dn, $this->attributes, $this->binaryAttributes);
     }
 
 
@@ -253,7 +264,7 @@ public function login($username, $password, array $sasl_args = null)
      * @param bool $allowZeroHits
      * Determines if the method will throw an exception if no
      * hits are found. Defaults to FALSE.
-     * @return string
+     * @return string|null
      * The DN of the matching element, if found. If no element was
      * found and $allowZeroHits is set to FALSE, an exception will
      * be thrown; otherwise NULL will be returned.
@@ -266,7 +277,7 @@ public function login($username, $password, array $sasl_args = null)
      */
     public function searchfordn($attribute, $value, $allowZeroHits)
     {
-        $ldap = new \SimpleSAML\Auth\LDAP(
+        $ldap = new Auth\Ldap(
             $this->hostname,
             $this->enableTLS,
             $this->debug,
@@ -295,13 +306,21 @@ public function searchfordn($attribute, $value, $allowZeroHits)
         );
     }
 
-    public function getAttributes($dn, $attributes = null)
+
+    /**
+     * @param string $dn
+     * @param array|null $attributes
+     * @param array $binaryAttributes
+     * @return array
+     * @throws \Exception
+     */
+    public function getAttributes($dn, $attributes = null, $binaryAttributes = [])
     {
         if ($attributes == null) {
             $attributes = $this->attributes;
         }
 
-        $ldap = new \SimpleSAML\Auth\LDAP(
+        $ldap = new Auth\Ldap(
             $this->hostname,
             $this->enableTLS,
             $this->debug,
@@ -317,6 +336,6 @@ public function getAttributes($dn, $attributes = null)
                 throw new \Exception('Error authenticating using privileged DN & password.');
             }
         }
-        return $ldap->getAttributes($dn, $attributes);
+        return $ldap->getAttributes($dn, $attributes, $binaryAttributes);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/ldap/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/ldap/psalm.xml
new file mode 100644
index 0000000000..c30d4dbb08
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/psalm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp LDAP module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/bootstrap.php
new file mode 100644
index 0000000000..210aa3082f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/ldap';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/lib/Auth/Process/BaseFilterTest.php b/vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/lib/Auth/Process/BaseFilterTest.php
new file mode 100644
index 0000000000..0c05e2cace
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/ldap/tests/lib/Auth/Process/BaseFilterTest.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace SimpleSAML\Test\Module\ldap\Auth\Process;
+
+use PHPUnit\Framework\TestCase;
+use SimpleSAML\Module\ldap\Auth\Process\BaseFilter;
+
+class BaseFilterTest extends TestCase
+{
+    /**
+     * @return void
+     */
+    public function testVarExportHidesLdapPassword()
+    {
+        $stub = $this->getMockBuilder(BaseFilter::class)
+            ->disableOriginalConstructor()
+            ->getMockForAbstractClass();
+        $class = new \ReflectionClass($stub);
+        $method = $class->getMethod('var_export');
+        $method->setAccessible(true);
+
+        $this->assertEquals(
+            "array ( 'ldap.hostname' => 'ldap://172.17.101.32', 'ldap.port' => 389, 'ldap.password' => '********', )",
+            $method->invokeArgs($stub, [[
+                'ldap.hostname' => 'ldap://172.17.101.32',
+                'ldap.port' => 389,
+                'ldap.password' => 'password',
+            ]])
+        );
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.php_cs.dist
new file mode 100644
index 0000000000..795e2b10a6
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/hooks',
+        __DIR__ . '/templates',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.travis.yml
new file mode 100644
index 0000000000..a876f36124
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+
+script:
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-json.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/composer.json
new file mode 100644
index 0000000000..6d26095160
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/composer.json
@@ -0,0 +1,43 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-memcachemonitor",
+    "description": "A module that is able display usage statistics of a memcache(d) store",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "memcachemonitor"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        },
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "simplesamlphp/simplesamlphp-test-framework": "~0.0.6"
+    },
+    "extra": {
+        "ssp-mixedcase-module-name": "memcacheMonitor"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-memcachemonitor"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_configpage.php b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_configpage.php
index 4debe964ee..497c84893a 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_configpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_configpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add the memcacheMonitor module to the config page.
  *
  * @param \SimpleSAML\XHTML\Template &$template The template that we should alter in this hook.
+ * @return void
  */
-
 function memcacheMonitor_hook_configpage(\SimpleSAML\XHTML\Template &$template)
 {
     $template->data['links']['memcacheMonitor'] = [
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_frontpage.php
index d25437327a..9a1b4f07b7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_frontpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add the simple consenet admin module to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
-
 function memcacheMonitor_hook_frontpage(&$links)
 {
     assert(is_array($links));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_sanitycheck.php b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_sanitycheck.php
index a7a36c415d..ce95aada19 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_sanitycheck.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/hooks/hook_sanitycheck.php
@@ -6,8 +6,8 @@
  * This function verifies that all memcache servers work.
  *
  * @param array &$hookinfo  hookinfo
+ * @return void
  */
-
 function memcacheMonitor_hook_sanitycheck(&$hookinfo)
 {
     assert(is_array($hookinfo));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/psalm.xml
new file mode 100644
index 0000000000..89fcf3f9a0
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/psalm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Memcache Monitor"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="hooks" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/templates/memcachestat.twig b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/templates/memcachestat.twig
index fdc4af4bd0..c75ee0a3cd 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/templates/memcachestat.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/templates/memcachestat.twig
@@ -2,7 +2,7 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-    <link href="{{ baseurlpath }}assets/css/memcacheMonitor.css" rel="stylesheet" />
+    <link href="/{{ baseurlpath }}module.php/memcacheMonitor/assets/css/memcacheMonitor.css" rel="stylesheet">
 {% endblock %}
 
 {% block content %}
@@ -15,6 +15,7 @@
             {% endfor %}
         </tr>
         {% for rowTitle, rowData in table %}
+        {% if rowTitles[rowTitle] is defined %}
         <tr>
             <th class="rowtitle" style="text-align: right">{{ rowTitles[rowTitle]|trans }}</th>
             {% for key, colTitle in colTitles %}
@@ -25,6 +26,7 @@
             {% endif %}
             {% endfor %}
         </tr>
+        {% endif %}
         {% endfor %}
     </table>
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/tests/bootstrap.php
new file mode 100644
index 0000000000..e635385d76
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/www/memcachestat.php b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/www/memcachestat.php
index fde791e558..0e79858b98 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/www/memcachestat.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcacheMonitor/www/memcachestat.php
@@ -1,10 +1,19 @@
 <?php
 
+/**
+ * @param int $input
+ * @return string
+ */
 function tdate($input)
 {
     return date(DATE_RFC822, $input);
 }
 
+
+/**
+ * @param int $input
+ * @return string
+ */
 function hours($input)
 {
     if ($input < 60) {
@@ -19,6 +28,11 @@ function hours($input)
     return number_format($input / (24 * 60 * 60), 2).' days';
 }
 
+
+/**
+ * @param int $input
+ * @return string
+ */
 function humanreadable($input)
 {
     $output = "";
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/.travis.yml
new file mode 100644
index 0000000000..69769c6526
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/README.md b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/README.md
new file mode 100644
index 0000000000..cea74f253d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/README.md
@@ -0,0 +1,109 @@
+SimpleSAMLphp AuthMemCookie module
+==================================
+
+This module implements [Auth MemCookie](https://zenprojects.github.io/Apache-Authmemcookie-Module/) support for SimpleSAMLphp. This allows
+you to integrate SimpleSAMLphp with web applications written in languages other than PHP.
+
+*AuthMemCookie* works by reading authentication data from a *memcache* server and setting environment variables based on
+the attributes found in this data. It also allows you to use the default **Apache access control** features to restrict
+access to your site.
+
+Requisites
+----------
+
+This module requires you to install and set up the following requirements:
+
+* SimpleSAMLphp running as a [Service Provider](https://simplesamlphp.org/docs/stable/simplesamlphp-sp).
+* A *memcache* server.
+* [Auth MemCookie](https://zenprojects.github.io/Apache-Authmemcookie-Module/) .
+
+Installation
+------------
+
+Once you have installed SimpleSAMLphp, installing this module is very simple. First of all, you will need to [download
+Composer](https://getcomposer.org/) if you haven't already. After installing Composer, just execute the following
+command in the root of your SimpleSAMLphp installation:
+
+```
+./composer.phar require simplesamlphp/simplesamlphp-module-memcookie:dev-master
+```
+
+where `dev-master` instructs Composer to install the `master` branch from the Git repository. See the
+[releases](https://github.com/simplesamlphp/simplesamlphp-module-memcookie/releases) available if you want to use a
+stable version of the module.
+
+The module is enabled by default. If you want to disable the module once installed, you just need to create a file named
+`disable` in the `modules/memcookie` directory inside your SimpleSAMLphp installation.
+
+Configuration
+-------------
+
+The first step to use this module is to configure *Auth MemCookie* appropriately. The following example (that you can
+find also in `extra/auth_memcookie.conf`) might be helpful:
+
+```
+<Location />
+    # This is a list of memcache servers which Auth MemCookie
+    # should use. 
+    # Note that this list must list the same servers as the
+    # 'authmemcookie.servers'-option in config.php in the
+    # configuration for simpleSAMLphp.
+    #
+    # The syntax for this option is inherited from: http://docs.libmemcached.org/libmemcached_configuration.html 
+    Auth_memCookie_Memcached_Configuration "--SERVER=127.0.0.1:11211"
+
+    # This must be set to 'on' to enable Auth MemCookie for
+    # this directory.
+    Auth_memCookie_Authoritative on
+
+    # This adjusts the maximum number of data elements in the
+    # session data. The default is 10, which can be to low.
+    Auth_memCookie_SessionTableSize "40"
+
+    # These two commands are required to enable access control
+    # in Apache.
+    AuthType Cookie
+    AuthName "My Login"
+
+    # This command causes apache to redirect to the given
+    # URL when we receive a '401 Authorization Required'
+    # error. We redirect to "/simplesaml/module.php/memcookie/auth.php",
+    # which initializes a login to the IdP.
+    ErrorDocument 401 "/simplesaml/module.php/memcookie/auth.php"
+</Location>
+
+<Location /protected>
+    # This allows all authenticated users to access the
+    # directory. To learn more about the 'Require' command,
+    # please look at:
+    # http://httpd.apache.org/docs/2.0/mod/core.html#require
+    Require valid-user
+</Location>
+```
+
+Once *Auth MemCookie* has been correctly configured, you need to configure the module itself by editing the
+`config/authmemcookie.php` file. Set the `username` configuration option to the name of an attribute that you are sure
+to receive and that will identify the user unambiguously. Read the instructions in the file itself if you need help to
+configure it.
+
+If you already have an *auth source* configured and working in SimpleSAMLphp, and all your memcookie configuration
+options are correct, you are ready to go! Make sure to reload Apache so that it uses the new configuration and *Auth
+MemCookie* is loaded. Then you can point your browser to the location that you have protected in Apache and it should
+redirect you automatically to the IdP for authentication.
+
+In order to see all the environment variables you have available in the protected location, you can drop a PHP script
+like the following in there and access it from your browser after authenticating to your IdP:
+
+```
+<html>
+ <body>
+  <table>
+<?php
+    foreach ($_SERVER as $key => $value) {
+        echo "   <tr><td>".htmlspecialchars($key)."</td><td>".htmlspecialchars($value)."</td></tr>\n";
+    }
+?>
+  </table>
+ </body>
+</html>
+```
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/composer.json
new file mode 100644
index 0000000000..994b242d1d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/composer.json
@@ -0,0 +1,31 @@
+{
+  "name": "simplesamlphp/simplesamlphp-module-memcookie",
+  "description": "A SimpleSAMLphp module that allows integration with Auth MemCookie, allowing web applications written in other languages than PHP to integrate with SimpleSAMLphp.",
+  "type": "simplesamlphp-module",
+  "keywords": [ "SimpleSAMLphp", "Auth MemCookie", "apache", "cookies"],
+  "homepage": "https://simplesamlphp.org/",
+  "license": "LGPL-2.1",
+  "authors": [
+    {
+      "name": "Olav Morken",
+      "email": "olav.morken@uninett.no"
+    },
+    {
+      "name": "Jaime Perez Crespo",
+      "email": "jaime.perez@uninett.no"
+    }
+  ],
+  "require": {
+    "php": ">=5.6",
+    "simplesamlphp/composer-module-installer": ">=1.1.6"
+  },
+  "require-dev": {
+    "phpunit/phpunit": "~5.7",
+    "simplesamlphp/simplesamlphp": "^1.17",
+    "simplesamlphp/simplesamlphp-test-framework": "^0.0.6"
+  },
+  "support": {
+    "issues": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/issues",
+    "source": "https://github.com/simplesamlphp/simplesamlphp-module-memcookie/"
+  }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/config-templates/authmemcookie.php b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/config-templates/authmemcookie.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/config-templates/authmemcookie.php
rename to vendor/simplesamlphp/simplesamlphp/modules/memcookie/config-templates/authmemcookie.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/default-enable b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/default-enable
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/extra/auth_memcookie.conf b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/extra/auth_memcookie.conf
new file mode 100644
index 0000000000..a3477a80bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/extra/auth_memcookie.conf
@@ -0,0 +1,38 @@
+<Location />
+    # This is a list of memcache servers which Auth MemCookie
+    # should use. 
+    # Note that this list must list the same servers as the
+    # 'authmemcookie.servers'-option in config.php in the
+    # configuration for simpleSAMLphp.
+    #
+    # The syntax for this option is inherited from: http://docs.libmemcached.org/libmemcached_configuration.html 
+    Auth_memCookie_Memcached_Configuration "--SERVER=127.0.0.1:11211"
+
+    # This must be set to 'on' to enable Auth MemCookie for
+    # this directory.
+    Auth_memCookie_Authoritative on
+
+    # This adjusts the maximum number of data elements in the
+    # session data. The default is 10, which can be to low.
+    Auth_memCookie_SessionTableSize "40"
+
+    # These two commands are required to enable access control
+    # in Apache.
+    AuthType Cookie
+    AuthName "My Login"
+
+    # This command causes apache to redirect to the given
+    # URL when we receive a '401 Authorization Required'
+    # error. We redirect to "/simplesaml/module.php/memcookie/auth.php",
+    # which initializes a login to the IdP.
+    ErrorDocument 401 "/simplesaml/module.php/memcookie/auth.php"
+</Location>
+
+<Location /protected>
+    # This allows all authenticated users to access the
+    # directory. To learn more about the 'Require' command,
+    # please look at:
+    # http://httpd.apache.org/docs/2.0/mod/core.html#require
+    Require valid-user
+</Location>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/AuthMemCookie.php b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/lib/AuthMemCookie.php
similarity index 66%
rename from vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/AuthMemCookie.php
rename to vendor/simplesamlphp/simplesamlphp/modules/memcookie/lib/AuthMemCookie.php
index 6b4455400c..d5ecc4d88a 100644
--- a/vendor/simplesamlphp/simplesamlphp/lib/SimpleSAML/AuthMemCookie.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/lib/AuthMemCookie.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace SimpleSAML;
+namespace SimpleSAML\Module\memcookie;
 
 /**
  * This is a helper class for the Auth MemCookie module.
@@ -8,22 +8,19 @@
  *
  * @author Olav Morken, UNINETT AS.
  * @package SimpleSAMLphp
- *
- * @deprecated This class has been deprecated and will be removed in SSP 2.0. Use the memcookie module instead.
  */
-
 class AuthMemCookie
 {
     /**
-     * @var AuthMemCookie This is the singleton instance of this class.
+     * @var AuthMemCookie|null This is the singleton instance of this class.
      */
     private static $instance = null;
 
 
     /**
-     * @var Configuration The configuration for Auth MemCookie.
+     * @var \SimpleSAML\Configuration The configuration for Auth MemCookie.
      */
-    private $amcConfig;
+    private $config;
 
 
     /**
@@ -47,7 +44,7 @@ public static function getInstance()
     private function __construct()
     {
         // load AuthMemCookie configuration
-        $this->amcConfig = Configuration::getConfig('authmemcookie.php');
+        $this->config = \SimpleSAML\Configuration::getConfig('authmemcookie.php');
     }
 
 
@@ -58,7 +55,7 @@ private function __construct()
      */
     public function getAuthSource()
     {
-        return $this->amcConfig->getString('authsource');
+        return $this->config->getString('authsource');
     }
 
 
@@ -66,11 +63,11 @@ public function getAuthSource()
      * This function retrieves the name of the cookie from the configuration.
      *
      * @return string The name of the cookie.
-     * @throws Exception If the value of the 'cookiename' configuration option is invalid.
+     * @throws \Exception If the value of the 'cookiename' configuration option is invalid.
      */
     public function getCookieName()
     {
-        $cookieName = $this->amcConfig->getString('cookiename', 'AuthMemCookie');
+        $cookieName = $this->config->getString('cookiename', 'AuthMemCookie');
         if (!is_string($cookieName) || strlen($cookieName) === 0) {
             throw new \Exception(
                 "Configuration option 'cookiename' contains an invalid value. This option should be a string."
@@ -88,7 +85,7 @@ public function getCookieName()
      */
     public function getUsernameAttr()
     {
-        $usernameAttr = $this->amcConfig->getString('username', null);
+        $usernameAttr = $this->config->getString('username', null);
 
         return $usernameAttr;
     }
@@ -97,11 +94,11 @@ public function getUsernameAttr()
     /**
      * This function retrieves the name of the attribute which contains the groups from the configuration.
      *
-     * @return string The name of the attribute which contains the groups.
+     * @return string|null The name of the attribute which contains the groups.
      */
     public function getGroupsAttr()
     {
-        $groupsAttr = $this->amcConfig->getString('groups', null);
+        $groupsAttr = $this->config->getString('groups', null);
 
         return $groupsAttr;
     }
@@ -110,34 +107,38 @@ public function getGroupsAttr()
     /**
      * This function creates and initializes a Memcache object from our configuration.
      *
-     * @return \Memcache A Memcache object initialized from our configuration.
-     * @throws \Exception If the servers configuration is invalid.
+     * @return \Memcache|\Memcached A Memcache object initialized from our configuration.
      */
     public function getMemcache()
     {
-        $memcacheHost = $this->amcConfig->getString('memcache.host', '127.0.0.1');
-        $memcachePort = $this->amcConfig->getInteger('memcache.port', 11211);
+        $memcacheHost = $this->config->getString('memcache.host', '127.0.0.1');
+        $memcachePort = $this->config->getInteger('memcache.port', 11211);
+
+        $class = class_exists('\Memcache') ? '\Memcache' : (class_exists('\Memcached') ? '\Memcached' : false);
 
-        $class = class_exists('Memcache') ? '\Memcache' : (class_exists('Memcached') ? '\Memcached' : false);
         if (!$class) {
-            throw new \Exception(
-                'Missing Memcached implementation. You must install either the Memcache or Memcached extension.'
-            );
+            throw new \Exception('Missing Memcached implementation. You must install either the Memcache or Memcached extension.');
         }
 
-        // Create the Memcache(d) object.
-        $memcache = new $class();
+        /** @psalm-suppress InvalidStringClass */
+        $memcache = new $class;
 
         foreach (explode(',', $memcacheHost) as $memcacheHost) {
-            $memcache->addServer($memcacheHost, $memcachePort);
+            if ($memcache instanceof \Memcached) {
+                $memcache->addServer($memcacheHost, $memcachePort);
+            } else {
+                $memcache->addServer($memcacheHost, $memcachePort, true);
+            }
         }
 
+        /** @var \Memcache|\Memcached $memcache */
         return $memcache;
     }
 
 
     /**
      * This function logs the user out by deleting the session information from memcache.
+     * @return void
      */
     private function doLogout()
     {
@@ -161,6 +162,7 @@ private function doLogout()
 
     /**
      * This function implements the logout handler. It deletes the information from Memcache.
+     * @return void
      */
     public static function logoutHandler()
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/psalm.xml
new file mode 100644
index 0000000000..c257963f61
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/psalm.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Memcookie"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-templates" />
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+
+    <stubs>
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/memcache.php" />
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/memcached.php" />
+    </stubs>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/tests/bootstrap.php
new file mode 100644
index 0000000000..0fda7dc8d5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/memcookie';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/memcookie/www/auth.php b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/www/auth.php
new file mode 100644
index 0000000000..9235245550
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/memcookie/www/auth.php
@@ -0,0 +1,90 @@
+<?php
+
+use SimpleSAML\Utils;
+use SimpleSAML\Module\memcookie\AuthMemCookie;
+
+/**
+ * This file implements an script which can be used to authenticate users with Auth MemCookie.
+ * See: https://zenprojects.github.io/Apache-Authmemcookie-Module/
+ *
+ * The configuration for this script is stored in config/authmemcookie.php.
+ *
+ * The file extra/auth_memcookie.conf contains an example of how Auth Memcookie can be configured
+ * to use SimpleSAMLphp.
+ */
+
+// load SimpleSAMLphp configuration
+$ssp_cf = \SimpleSAML\Configuration::getInstance();
+
+// load Auth MemCookie configuration
+$amc_cf = AuthMemCookie::getInstance();
+
+$sourceId = $amc_cf->getAuthSource();
+$s = new SimpleSAML\Auth\Simple($sourceId);
+
+// check if the user is authorized. We attempt to authenticate the user if not
+$s->requireAuth();
+
+// generate session id and save it in a cookie
+$sessionID = Utils\Random::generateID();
+$cookieName = $amc_cf->getCookieName();
+Utils\HTTP::setCookie($cookieName, $sessionID);
+
+// generate the authentication information
+$attributes = $s->getAttributes();
+
+$authData = [];
+
+// username
+$usernameAttr = $amc_cf->getUsernameAttr();
+if (!array_key_exists($usernameAttr, $attributes)) {
+    throw new \SimpleSAML\Error\Exception(
+        "The user doesn't have an attribute named '".$usernameAttr.
+        "'. This attribute is expected to contain the username."
+    );
+}
+$authData['UserName'] = $attributes[$usernameAttr];
+
+// groups
+$groupsAttr = $amc_cf->getGroupsAttr();
+if ($groupsAttr !== null) {
+    if (!array_key_exists($groupsAttr, $attributes)) {
+        throw new \SimpleSAML\Error\Exception(
+            "The user doesn't have an attribute named '".$groupsAttr.
+            "'. This attribute is expected to contain the groups the user is a member of."
+        );
+    }
+    $authData['Groups'] = $attributes[$groupsAttr];
+} else {
+    $authData['Groups'] = [];
+}
+
+$authData['RemoteIP'] = $_SERVER['REMOTE_ADDR'];
+
+foreach ($attributes as $n => $v) {
+    $authData['ATTR_'.$n] = $v;
+}
+
+// store the authentication data in the memcache server
+$data = '';
+foreach ($authData as $n => $v) {
+    if (is_array($v)) {
+        $v = implode(':', $v);
+    }
+    $data .= $n.'='.$v."\r\n";
+}
+
+$memcache = $amc_cf->getMemcache();
+$expirationTime = $s->getAuthData('Expire');
+if ($memcache instanceof \Memcached) {
+    $memcache->set($sessionID, $data, $expirationTime);
+} else {
+    $memcache->set($sessionID, $data, 0, $expirationTime);
+}
+
+// register logout handler
+$session = \SimpleSAML\Session::getSessionFromRequest();
+$session->registerLogoutHandler($sourceId, '\SimpleSAML\Module\memcookie\AuthMemCookie', 'logoutHandler');
+
+// redirect the user back to this page to signal that the login is completed
+Utils\HTTP::redirectTrustedURL(Utils\HTTP::getSelfURL());
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.php_cs.dist
new file mode 100644
index 0000000000..59267ee96c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/templates',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.travis.yml
new file mode 100644
index 0000000000..1e79c514f8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/.travis.yml
@@ -0,0 +1,30 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/check-syntax.sh
new file mode 100755
index 0000000000..ba71433b22
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates hooks lib templates tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/metarefresh.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/metarefresh.php
index b02fb75a6a..87def0acdc 100755
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/metarefresh.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/bin/metarefresh.php
@@ -5,6 +5,7 @@
  * This script can be used to generate metadata for SimpleSAMLphp
  * based on an XML metadata file.
  */
+use RobRichards\XMLSecLibs\XMLSecurityDSig;
 
 
 // This is the base directory of the SimpleSAMLphp installation
@@ -44,6 +45,11 @@
  */
 $validateFingerprint = null;
 
+/* $validateFingerprintAlgorithm is the algorithm to use to compute the fingerprint of the
+ * certificate that signed the metadata.
+ */
+$validateFingerprintAlgorithm = null;
+
 // This variable contains the files we will parse
 $files = [];
 
@@ -97,6 +103,9 @@
             }
             $validateFingerprint = $v;
             break;
+        case '--validate-fingerprint-algorithm':
+            $validateFingerprintAlgorithm = $v;
+            break;
         case '--help':
             printHelp();
             exit(0);
@@ -134,6 +143,9 @@
     if (isset($validateFingerprint)) {
         $source['validateFingerprint'] = $validateFingerprint;
     }
+    if (isset($validateFingerprintAlgorithm)) {
+        $source['validateFingerprintAlgorithm'] = $validateFingerprintAlgorithm;
+    }
     $metaloader->loadSource($source);
 }
 
@@ -145,6 +157,7 @@
 
 /**
  * This function prints the help output.
+ * @return void
  */
 function printHelp()
 {
@@ -167,6 +180,10 @@ function printHelp()
     echo '                              Check the signature of the metadata,'."\n";
     echo '                              and check the fingerprint of the'."\n";
     echo '                              certificate against <FINGERPRINT>.'."\n";
+    echo ' --validate-fingerprint-algorithm=<ALGORITHM>'."\n";
+    echo '                              Use <ALGORITHM> to validate fingerprint of'."\n";
+    echo '                              the certificate that signed the metadata.'."\n";
+    echo '                              Default: '.XMLSecurityDSig::SHA1.".\n";
     echo ' -h, --help                   Print this help.'."\n";
     echo ' -o=<DIR>, --out-dir=<DIR>    Write the output to this directory. The'."\n";
     echo '                              default directory is metadata-generated/.'."\n";
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/composer.json
new file mode 100644
index 0000000000..f23f5501bc
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/composer.json
@@ -0,0 +1,41 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-metarefresh",
+    "description": "The metarefresh module will download and parse metadata documents and store them locally",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "metarefresh"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\metarefresh\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.18",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-metarefresh/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-metarefresh"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/config-templates/config-metarefresh.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/config-templates/config-metarefresh.php
index c8009d4c27..333b75dee3 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/config-templates/config-metarefresh.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/config-templates/config-metarefresh.php
@@ -44,6 +44,7 @@
                         'rollover.crt',
                     ],
                     'validateFingerprint' => '59:1D:4B:46:70:46:3E:ED:A9:1F:CC:81:6D:C0:AF:2A:09:2A:A8:01',
+                    #'validateFingerprintAlgorithm' => RobRichards\XMLSecLibs\XMLSecurityDSig::SHA1,
                     'template' => [
                         'tags' => ['kalmar'],
                         'authproc' => [
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/dictionaries/metarefresh.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/dictionaries/metarefresh.translation.json
index 2023ecba4f..6067187dd3 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/dictionaries/metarefresh.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/dictionaries/metarefresh.translation.json
@@ -1,9 +1,12 @@
 {
     "frontpage_link": {
+    	"ca": "Metarefresh: obtenir metadades"
     },
     "metarefresh_header": {
+    	"ca": "Obtenció de Metarefresh"
     },
     "no_output": {
+    	"ca": "No s’ha produït cap sortida de metarefresh."
     }
 }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-automated_metadata.md b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/docs/simplesamlphp-automated_metadata.md
similarity index 74%
rename from vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-automated_metadata.md
rename to vendor/simplesamlphp/simplesamlphp/modules/metarefresh/docs/simplesamlphp-automated_metadata.md
index cc40de2ceb..fdf33ecbeb 100644
--- a/vendor/simplesamlphp/simplesamlphp/docs/simplesamlphp-automated_metadata.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/docs/simplesamlphp-automated_metadata.md
@@ -103,6 +103,38 @@ Here's an example of a possible configuration for both the Kalmar Federation and
 				'outputDir' 	=> 'metadata/metarefresh-ukaccess/',
 				'outputFormat' => 'serialize',
 			],
+			'edugain' => [
+				'cron'          => ['daily'],
+				'sources'       => [
+					[
+						'src' => 'https://metadata.surfconext.nl/edugain-downstream.xml',
+						'certificates' => [
+							'SURFconext-metadata-signer.pem',
+						],
+					],
+				],
+				'attributewhitelist' => [
+					[
+						'#EntityAttributes#' => [
+							'#urn:oasis:names:tc:SAML:attribute:assurance-certification#'
+							 => ['#https://refeds.org/sirtfi#'],
+							'#http://macedir.org/entity-category-support#'
+							 => ['#http://refeds.org/category/research-and-scholarship#'],
+						],
+					],
+					[
+						'#RegistrationInfo#' => [
+							'#registrationAuthority#'
+							=> '#http://www.surfconext.nl/#',
+						],
+						'#EntityAttributes#' => [
+							'#urn:oasis:names:tc:SAML:attribute:assurance-certification#'
+							=> ['#https://refeds.org/sirtfi#'],
+						],
+					],
+				],
+			],
+                    ],
 		]
 	];
 
@@ -162,13 +194,38 @@ Each metadata source has the following options:
     don't need this option if you don't want to validate the signature
     on the metadata.
 
+`validateFingerprintAlgorithm`
+:   Algorithm used to compute the signing certificate's fingerprint. Defaults to
+    `XMLSecurityDSig::SHA1`.
+
 `template`
 :   This is an array which will be combined with the metadata fetched to
     generate the final metadata array.
 
 `types`
-:	Same as the option with the same name at the metadata set level. This option has precedence when both are specified,
-	allowing a more fine grained configuration for every metadata source.
+:   Same as the option with the same name at the metadata set level. This option has precedence when both are specified,
+    allowing a more fine grained configuration for every metadata source.
+
+`whitelist`
+:   This is an array that allows for selectively refreshing a list of identity providers. Only data from identity
+    providers that exist in the whitelist will be processed and written to disk. This is especially useful for hosting
+    environments that have strict limits memory and maximum execution time.
+
+`blacklist`
+:   This is an array that allows for selectively skipping a list of identity providers.  Only data from identity
+    providers that do not appear in the blacklist are processed and written to disk.
+
+`attributewhitelist`
+:   This is a multilevel array for selectively refreshing a list of identity providers based on specific attributes
+    patterns in their metadata. Only data from identity providers that match at least one element of the top-level array
+    will be processed and written to disk.   
+    Matching of such a top-level element, itself being a (multi-level) array, means that at each level (recursively) the
+    key and value match with the identity provider's metadata. Scalar keys and values are matched using PCRE.   
+    A typical use-case is to accept only identity providers from eduGAIN that match a combination of specific
+    EntityAttributes, such as the https://refeds.org/sirtfi assurance-certification *and*
+    http://refeds.org/category/research-and-scholarship entity-category.   
+    Another example is filtering identity providers from a specific federation, by filtering on specific values of the
+    registrationAuthority inside the RegistrationInfo.
 
 
 After you have configured the metadata sources, you need to give the
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_cron.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_cron.php
index 4ab82e2272..697086b006 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_cron.php
@@ -1,11 +1,12 @@
 <?php
 
-use \SimpleSAML\Logger;
+use SimpleSAML\Logger;
 
 /**
  * Hook to run a cron job.
  *
  * @param array &$croninfo  Output
+ * @return void
  */
 function metarefresh_hook_cron(&$croninfo)
 {
@@ -20,7 +21,9 @@ function metarefresh_hook_cron(&$croninfo)
         $mconfig = \SimpleSAML\Configuration::getOptionalConfig('config-metarefresh.php');
 
         $sets = $mconfig->getConfigList('sets', []);
-        $stateFile = $config->getPathValue('datadir', 'data/').'metarefresh-state.php';
+        /** @var string $datadir */
+        $datadir = $config->getPathValue('datadir', 'data/');
+        $stateFile = $datadir.'metarefresh-state.php';
 
         foreach ($sets as $setkey => $set) {
             // Only process sets where cron matches the current cron tag
@@ -40,6 +43,10 @@ function metarefresh_hook_cron(&$croninfo)
 
             $outputDir = $set->getString('outputDir');
             $outputDir = $config->resolvePath($outputDir);
+            if ($outputDir === null) {
+                throw new \Exception("Invalid outputDir specified.");
+            }
+
             $outputFormat = $set->getValueValidate('outputFormat', ['flatfile', 'serialize'], 'flatfile');
 
             $oldMetadataSrc = \SimpleSAML\Metadata\MetaDataStorageSource::getSource([
@@ -49,9 +56,10 @@ function metarefresh_hook_cron(&$croninfo)
 
             $metaloader = new \SimpleSAML\Module\metarefresh\MetaLoader($expire, $stateFile, $oldMetadataSrc);
 
-            // Get global blacklist, whitelist and caching info
+            // Get global blacklist, whitelist, attributewhitelist and caching info
             $blacklist = $mconfig->getArray('blacklist', []);
             $whitelist = $mconfig->getArray('whitelist', []);
+            $attributewhitelist = $mconfig->getArray('attributewhitelist', []);
             $conditionalGET = $mconfig->getBoolean('conditionalGET', false);
 
             // get global type filters
@@ -86,6 +94,13 @@ function metarefresh_hook_cron(&$croninfo)
                     $source['whitelist'] = $whitelist;
                 }
 
+                # Merge global and src specific attributewhitelists: cannot use array_unique for multi-dim.
+                if (isset($source['attributewhitelist'])) {
+                    $source['attributewhitelist'] = array_merge($source['attributewhitelist'], $attributewhitelist);
+                } else {
+                    $source['attributewhitelist'] = $attributewhitelist;
+                }
+
                 // Let src specific conditionalGET override global one
                 if (!isset($source['conditionalGET'])) {
                     $source['conditionalGET'] = $conditionalGET;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_frontpage.php
index e66c583f29..7c0c2ec91e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/hooks/hook_frontpage.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to add links to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
-
 function metarefresh_hook_frontpage(&$links)
 {
     assert(is_array($links));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/ARP.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/ARP.php
index c64ff3463f..8018486ab5 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/ARP.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/ARP.php
@@ -6,7 +6,6 @@
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class ARP
 {
     /**
@@ -17,7 +16,7 @@ class ARP
     /**
      * @var array
      */
-    private $attributes;
+    private $attributes = [];
 
     /**
      * @var string
@@ -37,7 +36,7 @@ class ARP
      * @param string $prefix
      * @param string $suffix
      */
-    public function __construct($metadata, $attributemap_filename, $prefix, $suffix)
+    public function __construct(array $metadata, $attributemap_filename, $prefix, $suffix)
     {
         $this->metadata = $metadata;
         $this->prefix = $prefix;
@@ -136,7 +135,7 @@ private function getEntryXML($entry)
      *
      * @return string
      */
-    private function getEntryXMLcontent($entry)
+    private function getEntryXMLcontent(array $entry)
     {
         if (!array_key_exists('attributes', $entry)) {
             return '';
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/MetaLoader.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/MetaLoader.php
index e8007803d5..0f16301b0f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/MetaLoader.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/lib/MetaLoader.php
@@ -2,21 +2,39 @@
 
 namespace SimpleSAML\Module\metarefresh;
 
+use Exception;
+use RobRichards\XMLSecLibs\XMLSecurityDSig;
+use SAML2\DOMDocumentFactory;
+use SimpleSAML\Configuration;
 use SimpleSAML\Logger;
+use SimpleSAML\Metadata;
+use SimpleSAML\Utils;
 
 /**
  * @package SimpleSAMLphp
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  */
-
 class MetaLoader
 {
+    /** @var int|null */
     private $expire;
-    private $metadata;
+
+    /** @var array */
+    private $metadata = [];
+
+    /** @var object|null */
     private $oldMetadataSrc;
+
+    /** @var string|null */
     private $stateFile;
-    private $changed;
-    private $state;
+
+    /** @var bool*/
+    private $changed = false;
+
+    /** @var array */
+    private $state = [];
+
+    /** @var array */
     private $types = [
         'saml20-idp-remote',
         'saml20-sp-remote',
@@ -25,29 +43,31 @@ class MetaLoader
         'attributeauthority-remote'
     ];
 
+
     /**
      * Constructor
      *
-     * @param integer $expire
-     * @param string  $stateFile
-     * @param object  $oldMetadataSrc
+     * @param int|null $expire
+     * @param string|null  $stateFile
+     * @param object|null  $oldMetadataSrc
      */
     public function __construct($expire = null, $stateFile = null, $oldMetadataSrc = null)
     {
         $this->expire = $expire;
-        $this->metadata = [];
         $this->oldMetadataSrc = $oldMetadataSrc;
         $this->stateFile = $stateFile;
-        $this->changed = false;
 
         // Read file containing $state from disk
-        if (is_readable($stateFile)) {
-            include $stateFile;
+        if (!is_null($stateFile) && is_readable($stateFile)) {
+            include($stateFile);
         }
 
-        $this->state = [];
+        if (isset($state)) {
+            $this->state = $state;
+        }
     }
 
+
     /**
      * Get the types of entities that will be loaded.
      *
@@ -58,11 +78,13 @@ public function getTypes()
         return $this->types;
     }
 
+
     /**
      * Set the types of entities that will be loaded.
      *
      * @param string|array $types Either a string with the name of one single type allowed, or an array with a list of
      * types. Pass an empty array to reset to all types of entities.
+     * @return void
      */
     public function setTypes($types)
     {
@@ -72,12 +94,14 @@ public function setTypes($types)
         $this->types = $types;
     }
 
+
     /**
      * This function processes a SAML metadata file.
      *
-     * @param $source
+     * @param $source array
+     * @return void
      */
-    public function loadSource($source)
+    public function loadSource(array $source)
     {
         if (preg_match('@^https?://@i', $source['src'])) {
             // Build new HTTP context
@@ -85,9 +109,11 @@ public function loadSource($source)
 
             // GET!
             try {
-                list($data, $responseHeaders) = \SimpleSAML\Utils\HTTP::fetch($source['src'], $context, true);
-            } catch (\Exception $e) {
-                Logger::warning('metarefresh: '.$e->getMessage());
+                /** @var array $response  We know this because we set the third parameter to `true` */
+                $response = Utils\HTTP::fetch($source['src'], $context, true);
+                list($data, $responseHeaders) = $response;
+            } catch (Exception $e) {
+                Logger::warning('metarefresh: ' . $e->getMessage());
             }
 
             // We have response headers, so the request succeeded
@@ -121,9 +147,9 @@ public function loadSource($source)
 
         try {
             $entities = $this->loadXML($data, $source);
-        } catch (\Exception $e) {
-            Logger::debug('XML parser error when parsing '.$source['src'].' - attempting to re-use cached metadata');
-            Logger::debug('XML parser returned: '.$e->getMessage());
+        } catch (Exception $e) {
+            Logger::debug('XML parser error when parsing ' . $source['src'] . ' - attempting to re-use cached metadata');
+            Logger::debug('XML parser returned: ' . $e->getMessage());
             $this->addCachedMetadata($source);
             return;
         }
@@ -143,7 +169,31 @@ public function loadSource($source)
                 }
             }
 
-            if (array_key_exists('certificates', $source) && $source['certificates'] !== null) {
+            /* Do we have an attribute whitelist? */
+            if (isset($source['attributewhitelist']) && !empty($source['attributewhitelist'])) {
+                $idpMetadata = $entity->getMetadata20IdP();
+                if (!isset($idpMetadata)) {
+                    /* Skip non-IdPs */
+                    continue;
+                }
+
+                /* Do a recursive comparison for each whitelist of the attributewhitelist with the idpMetadata for this
+                 * IdP. At least one of these whitelists should match */
+                $match = false;
+                foreach ($source['attributewhitelist'] as $whitelist) {
+                    if ($this->containsArray($whitelist, $idpMetadata)) {
+                        $match = true;
+                        break;
+                    }
+                }
+                if (!$match) {
+                    /* No match found -> next IdP */
+                    continue;
+                }
+                Logger::debug('Whitelisted entityID: ' . $entity->getEntityID());
+            }
+
+            if (array_key_exists('certificates', $source) && ($source['certificates'] !== null)) {
                 if (!$entity->validateSignature($source['certificates'])) {
                     Logger::info(
                         'Skipping "'.$entity->getEntityId().'" - could not verify signature using certificate.'."\n"
@@ -154,7 +204,10 @@ public function loadSource($source)
 
             if (array_key_exists('validateFingerprint', $source) && $source['validateFingerprint'] !== null) {
                 if (!array_key_exists('certificates', $source) || $source['certificates'] == null) {
-                    if (!$entity->validateFingerprint($source['validateFingerprint'])) {
+                    $algo = isset($source['validateFingerprintAlgorithm'])
+                        ? $source['validateFingerprintAlgorithm']
+                        : XMLSecurityDSig::SHA1;
+                    if (!$entity->validateFingerprint($source['validateFingerprint'], $algo)) {
                         Logger::info(
                             'Skipping "'.$entity->getEntityId().'" - could not verify signature using fingerprint.'."\n"
                         );
@@ -198,12 +251,80 @@ public function loadSource($source)
         $this->saveState($source, $responseHeaders);
     }
 
+
+    /*
+     * Recursively checks whether array $dst contains array $src. If $src
+     * is not an array, a literal comparison is being performed.
+     */
+    private function containsArray($src, $dst)
+    {
+        if (is_array($src)) {
+            if (!is_array($dst)) {
+                return false;
+            }
+            $dstKeys = array_keys($dst);
+
+            /* Loop over all src keys */
+            foreach ($src as $srcKey => $srcval) {
+                if (is_int($srcKey)) {
+                    /* key is number, check that the key appears as one
+                     * of the destination keys: if not, then src has
+                     * more keys than dst */
+                    if (!array_key_exists($srcKey, $dst)) {
+                        return false;
+                    }
+
+                    /* loop over dest keys, to find value: we don't know
+                     * whether they are in the same order */
+                    $submatch = false;
+                    foreach ($dstKeys as $dstKey) {
+                        if ($this->containsArray($srcval, $dst[$dstKey])) {
+                            $submatch = true;
+                            break;
+                        }
+                    }
+                    if (!$submatch) {
+                        return false;
+                    }
+                } else {
+                    /* key is regexp: find matching keys */
+                    /** @var array|false $matchingDstKeys */
+                    $matchingDstKeys = preg_grep($srcKey, $dstKeys);
+                    if (!is_array($matchingDstKeys)) {
+                        return false;
+                    }
+
+                    $match = false;
+                    foreach ($matchingDstKeys as $dstKey) {
+                        if ($this->containsArray($srcval, $dst[$dstKey])) {
+                            /* Found a match */
+                            $match = true;
+                            break;
+                        }
+                    }
+                    if (!$match) {
+                        /* none of the keys has a matching value */
+                        return false;
+                    }
+                }
+            }
+            /* each src key/value matches */
+            return true;
+        } else {
+            /* src is not an array, do a regexp match against dst */
+            return (preg_match($src, $dst) === 1);
+        }
+    }
+
     /**
      * Create HTTP context, with any available caches taken into account
+     *
+     * @param array $source
+     * @return array
      */
-    private function createContext($source)
+    private function createContext(array $source)
     {
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
         $name = $config->getString('technicalcontact_name', null);
         $mail = $config->getString('technicalcontact_email', null);
 
@@ -227,7 +348,11 @@ private function createContext($source)
     }
 
 
-    private function addCachedMetadata($source)
+    /**
+     * @param array $source
+     * @return void
+     */
+    private function addCachedMetadata(array $source)
     {
         if (isset($this->oldMetadataSrc)) {
             foreach ($this->types as $type) {
@@ -245,8 +370,12 @@ private function addCachedMetadata($source)
 
     /**
      * Store caching state data for a source
+     *
+     * @param array $source
+     * @param array|null $responseHeaders
+     * @return void
      */
-    private function saveState($source, $responseHeaders)
+    private function saveState(array $source, $responseHeaders)
     {
         if (isset($source['conditionalGET']) && $source['conditionalGET']) {
             // Headers section
@@ -268,31 +397,36 @@ private function saveState($source, $responseHeaders)
         }
     }
 
+
     /**
      * Parse XML metadata and return entities
+     *
+     * @param string $data
+     * @param array $source
+     * @return \SimpleSAML\Metadata\SAMLParser[]
+     * @throws \Exception
      */
-    private function loadXML($data, $source)
+    private function loadXML($data, array $source)
     {
         try {
-            $doc = \SAML2\DOMDocumentFactory::fromString($data);
-        } catch (\Exception $e) {
-            throw new \Exception('Failed to read XML from '.$source['src']);
-        }
-        if ($doc->documentElement === null) {
-            throw new \Exception('Opened file is not an XML document: '.$source['src']);
+            $doc = DOMDocumentFactory::fromString($data);
+        } catch (Exception $e) {
+            throw new Exception('Failed to read XML from ' . $source['src']);
         }
-        return \SimpleSAML\Metadata\SAMLParser::parseDescriptorsElement($doc->documentElement);
+        return Metadata\SAMLParser::parseDescriptorsElement($doc->documentElement);
     }
 
 
     /**
      * This function writes the state array back to disk
+     *
+     * @return void
      */
     public function writeState()
     {
-        if ($this->changed) {
-            Logger::debug('Writing: '.$this->stateFile);
-            \SimpleSAML\Utils\System::writeFile(
+        if ($this->changed && !is_null($this->stateFile)) {
+            Logger::debug('Writing: ' . $this->stateFile);
+            Utils\System::writeFile(
                 $this->stateFile,
                 "<?php\n/* This file was generated by the metarefresh module at ".$this->getTime().".\n".
                 " Do not update it manually as it will get overwritten. */\n".
@@ -305,6 +439,8 @@ public function writeState()
 
     /**
      * This function writes the metadata to stdout.
+     *
+     * @return void
      */
     public function dumpMetadataStdOut()
     {
@@ -332,10 +468,12 @@ public function dumpMetadataStdOut()
      * This function will return without making any changes if $metadata is NULL.
      *
      * @param string $filename The filename the metadata comes from.
-     * @param array  $metadata The metadata.
+     * @param array|null $metadata The metadata.
      * @param string $type The metadata type.
+     * @param array|null $template The template.
+     * @return void
      */
-    private function addMetadata($filename, $metadata, $type, $template = null)
+    private function addMetadata($filename, $metadata, $type, array $template = null)
     {
         if ($metadata === null) {
             return;
@@ -370,10 +508,13 @@ private function addMetadata($filename, $metadata, $type, $template = null)
 
     /**
      * This function writes the metadata to an ARP file
+     *
+     * @param \SimpleSAML\Configuration $config
+     * @return void
      */
-    public function writeARPfile($config)
+    public function writeARPfile(Configuration $config)
     {
-        assert($config instanceof \SimpleSAML\Configuration);
+        assert($config instanceOf \SimpleSAML\Configuration);
 
         $arpfile = $config->getValue('arpfile');
         $types = ['saml20-sp-remote'];
@@ -387,7 +528,7 @@ public function writeARPfile($config)
         }
 
         // $metadata, $attributemap, $prefix, $suffix
-        $arp = new \SimpleSAML\Module\metarefresh\ARP(
+        $arp = new ARP(
             $md,
             $config->getValue('attributemap', ''),
             $config->getValue('prefix', ''),
@@ -404,6 +545,9 @@ public function writeARPfile($config)
 
     /**
      * This function writes the metadata to to separate files in the output directory.
+     *
+     * @param string $outputDir
+     * @return void
      */
     public function writeMetadataFiles($outputDir)
     {
@@ -415,7 +559,7 @@ public function writeMetadataFiles($outputDir)
             Logger::info('Creating directory: '.$outputDir."\n");
             $res = @mkdir($outputDir, 0777, true);
             if ($res === false) {
-                throw new \Exception('Error creating directory: '.$outputDir);
+                throw new Exception('Error creating directory: ' . $outputDir);
             }
         }
 
@@ -437,7 +581,7 @@ public function writeMetadataFiles($outputDir)
 
                 $content .= "\n".'?>';
 
-                \SimpleSAML\Utils\System::writeFile($filename, $content, 0644);
+                Utils\System::writeFile($filename, $content, 0644);
             } elseif (is_file($filename)) {
                 if (unlink($filename)) {
                     Logger::debug('Deleting stale metadata file: '.$filename);
@@ -453,12 +597,13 @@ public function writeMetadataFiles($outputDir)
      * Save metadata for loading with the 'serialize' metadata loader.
      *
      * @param string $outputDir  The directory we should save the metadata to.
+     * @return void
      */
     public function writeMetadataSerialize($outputDir)
     {
         assert(is_string($outputDir));
 
-        $metaHandler = new \SimpleSAML\Metadata\MetaDataStorageHandlerSerialize(['directory' => $outputDir]);
+        $metaHandler = new Metadata\MetaDataStorageHandlerSerialize(['directory' => $outputDir]);
 
         // First we add all the metadata entries to the metadata handler
         foreach ($this->metadata as $set => $elements) {
@@ -477,21 +622,26 @@ public function writeMetadataSerialize($outputDir)
         $ct = time();
         foreach ($metaHandler->getMetadataSets() as $set) {
             foreach ($metaHandler->getMetadataSet($set) as $entityId => $metadata) {
-                if (!array_key_exists('expire', $metadata)) {
+                if (!array_key_exists('expire', $metadata) || !is_int($metadata['expire'])) {
                     Logger::warning(
-                        'metarefresh: Metadata entry without expire timestamp: '.var_export($entityId, true).
-                        ' in set '.var_export($set, true).'.'
+                        'metarefresh: Metadata entry without valid expire timestamp: ' . var_export($entityId, true) .
+                        ' in set ' . var_export($set, true) . '.'
                     );
                     continue;
                 }
-                if ($metadata['expire'] > $ct) {
+
+                $expire = $metadata['expire'];
+                if ($expire > $ct) {
                     continue;
                 }
-                Logger::debug('metarefresh: '.$entityId.' expired '.date('l jS \of F Y h:i:s A', $metadata['expire']));
+
+                /** @var int $stamp */
+                $stamp = date('l jS \of F Y h:i:s A', $expire);
+                Logger::debug('metarefresh: ' . $entityId . ' expired ' . $stamp);
                 Logger::debug(
-                    'metarefresh: Delete expired metadata entry '.
-                    var_export($entityId, true).' in set '.var_export($set, true).
-                    '. ('.($ct - $metadata['expire']).' sec)'
+                    'metarefresh: Delete expired metadata entry ' .
+                    var_export($entityId, true) . ' in set ' . var_export($set, true) .
+                    '. (' . ($ct - $expire) . ' sec)'
                 );
                 $metaHandler->deleteMetadata($entityId, $set);
             }
@@ -499,6 +649,9 @@ public function writeMetadataSerialize($outputDir)
     }
 
 
+    /**
+     * @return string
+     */
     private function getTime()
     {
         // The current date, as a string
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/psalm.xml
new file mode 100644
index 0000000000..89527d6a74
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/psalm.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp metarefresh module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-templates" />
+        <directory name="hooks" />
+        <directory name="lib" />
+        <directory name="templates" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/bootstrap.php
new file mode 100644
index 0000000000..b5999566f4
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/metarefresh';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/lib/MetaLoaderTest.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/lib/MetaLoaderTest.php
new file mode 100644
index 0000000000..886d56ff18
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/lib/MetaLoaderTest.php
@@ -0,0 +1,258 @@
+<?php
+
+namespace SimpleSAML\Test\Module\metarefresh;
+
+use PHPUnit\Framework\TestCase;
+use RobRichards\XMLSecLibs\XMLSecurityDSig;
+use \SimpleSAML\Configuration;
+
+class MetaLoaderTest extends TestCase
+{
+    private $metaloader;
+    private $config;
+    private $tmpdir;
+    private $source = [
+        'outputFormat' => 'flatfile',
+        'conditionalGET' => false,
+    ];
+    private $expected = [
+        'entityid' => 'https://idp.example.com/idp/shibboleth',
+        'description' => ['en' => 'OrganizationName',],
+        'OrganizationName' => ['en' => 'OrganizationName',],
+        'name' => ['en' => 'DisplayName',],
+        'OrganizationDisplayName' => ['en' => 'OrganizationDisplayName',],
+        'url' => ['en' => 'https://example.com',],
+        'OrganizationURL' => ['en' => 'https://example.com',],
+        'contacts' => [['contactType' => 'technical', 'emailAddress' => ['mailto:technical.contact@example.com',],],],
+        'metadata-set' => 'saml20-idp-remote',
+        'SingleSignOnService' => [
+            [
+                'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
+                'Location' => 'https://idp.example.com/idp/profile/SAML2/POST/SSO',
+            ],
+        ],
+        'keys' => [
+            [
+                'encryption' => true,
+                'signing' => true,
+                'type' => 'X509Certificate',
+            ],
+        ],
+        'scope' => ['example.com',],
+        'RegistrationInfo' => [
+            'registrationAuthority' => 'http://www.surfconext.nl/',
+        ],
+        'EntityAttributes' => [
+            'urn:oasis:names:tc:SAML:attribute:assurance-certification' => [
+                0 => 'https://refeds.org/sirtfi',
+            ],
+            'http://macedir.org/entity-category-support' => [
+                0 => 'http://refeds.org/category/research-and-scholarship',
+            ],
+        ],
+        'UIInfo' => [
+            'DisplayName' => ['en' => 'DisplayName',],
+            'Description' => ['en' => 'Description',],
+        ],
+    ];
+
+    protected function setUp()
+    {
+        $this->config = Configuration::loadFromArray(['module.enable' => ['metarefresh' => true]], '[ARRAY]', 'simplesaml');
+        Configuration::setPreLoadedConfig($this->config, 'config.php');
+        $this->metaloader = new \SimpleSAML\Module\metarefresh\MetaLoader();
+        /* cannot use dirname() in declaration */
+        $this->source['src'] = dirname(dirname(__FILE__)) . '/testmetadata.xml';
+    }
+
+    protected function tearDown()
+    {
+        if ($this->tmpdir && is_dir($this->tmpdir)) {
+            foreach (array_diff(scandir($this->tmpdir), array('.','..')) as $file) {
+                unlink($this->tmpdir.'/'.$file);
+            }
+            rmdir($this->tmpdir);
+        }
+    }
+
+    public function testMetaLoader()
+    {
+        $this->metaloader->loadSource($this->source);
+        $this->metaloader->dumpMetadataStdOut();
+        /* match a line from the cert before we attempt to parse */
+        $this->expectOutputRegex('/UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh/');
+
+        $output = $this->getActualOutput();
+        try {
+            eval($output);
+        } catch (\Exception $e) {
+            $this->fail('Metarefresh does not produce syntactially valid code');
+        }
+        $this->assertArrayHasKey('https://idp.example.com/idp/shibboleth', $metadata);
+        $this->assertArraySubset(
+            $this->expected,
+            $metadata['https://idp.example.com/idp/shibboleth']
+        );
+    }
+
+    public function testSignatureVerificationFingerprintDefaultsToSHA1()
+    {
+        $this->metaloader->loadSource(
+            array_merge(
+                $this->source,
+                [
+                    'validateFingerprint' => '85:11:00:FF:34:55:BC:20:C0:20:5D:46:9B:2F:23:8F:41:09:68:F2',
+                ]
+            )
+        );
+        $this->metaloader->dumpMetadataStdOut();
+        $this->expectOutputRegex('/UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh/');
+    }
+
+    public function testSignatureVerificationFingerprintSHA256()
+    {
+        $this->metaloader->loadSource(
+            array_merge(
+                $this->source,
+                [
+                    'validateFingerprint' => '36:64:49:4E:F4:4C:59:9F:5B:8F:FE:75:7E:B2:0C:1A:3A:27:AD:AF:11:B0:6D:EC:DF:38:B6:66:C8:C4:C6:84',
+                    'validateFingerprintAlgorithm' => XMLSecurityDSig::SHA256,
+                ]
+            )
+        );
+        $this->metaloader->dumpMetadataStdOut();
+        $this->expectOutputRegex('/UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh/');
+    }
+
+    public function testSignatureVerificationFingerprintFailure()
+    {
+        $this->metaloader->loadSource(array_merge($this->source, [ 'validateFingerprint' => 'DE:AD:BE:EF:DE:AD:BE:EF:DE:AD:BE:EF:DE:AD:BE:EF:DE:AD:BE:EF' ]));
+        $this->metaloader->dumpMetadataStdOut();
+        $this->expectOutputString('');
+    }
+
+    public function testSignatureVerificationCertificatePass()
+    {
+        $this->metaloader->loadSource(array_merge($this->source, [ 'certificates' => [ dirname(dirname(__FILE__)) . '/mdx.pem' ] ]));
+        $this->metaloader->dumpMetadataStdOut();
+        $this->expectOutputRegex('/UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh/');
+    }
+
+    public function testWriteMetadataFiles()
+    {
+        $this->tmpdir = tempnam(sys_get_temp_dir(), 'SSP:tests:metarefresh:');
+        @unlink($this->tmpdir); /* work around post 4.0.3 behaviour */
+        $this->metaloader->loadSource($this->source);
+        $this->metaloader->writeMetadataFiles($this->tmpdir);
+        $this->assertFileExists($this->tmpdir . '/saml20-idp-remote.php');
+
+        @include_once($this->tmpdir . '/saml20-idp-remote.php');
+        $this->assertArrayHasKey('https://idp.example.com/idp/shibboleth', $metadata);
+        $this->assertArraySubset(
+            $this->expected,
+            $metadata['https://idp.example.com/idp/shibboleth']
+        );
+    }
+
+    /*
+     * Test two matching EntityAttributes (R&S + Sirtfi)
+     */
+    public function testAttributewhitelist1()
+    {
+        $this->source['attributewhitelist'] = [
+            [
+                '#EntityAttributes#' => [
+                    '#urn:oasis:names:tc:SAML:attribute:assurance-certification#'
+                    => ['#https://refeds.org/sirtfi#'],
+                    '#http://macedir.org/entity-category-support#'
+                    => ['#http://refeds.org/category/research-and-scholarship#'],
+                ],
+            ],
+        ];
+        $this->metaloader->loadSource($this->source);
+        $this->metaloader->dumpMetadataStdOut();
+        /* match a line from the cert before we attempt to parse */
+        $this->expectOutputRegex('/UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh/');
+
+        $output = $this->getActualOutput();
+        try {
+            eval($output);
+        } catch (\Exception $e) {
+            $this->fail('Metarefresh does not produce syntactially valid code');
+        }
+        /* Check we matched the IdP */
+        $this->assertArrayHasKey('https://idp.example.com/idp/shibboleth', $metadata);
+
+        $this->assertTrue(
+            empty(array_diff_key($this->expected, $metadata['https://idp.example.com/idp/shibboleth']))
+        );
+    }
+
+    /*
+     * Test non-matching of the whitelist: result should be empty set
+     */
+    public function testAttributewhitelist2()
+    {
+        $this->source['attributewhitelist'] = [
+            [
+                '#EntityAttributes#' => [
+                    '#urn:oasis:names:tc:SAML:attribute:assurance-certification#'
+                    => ['#https://refeds.org/sirtfi#'],
+                    '#http://macedir.org/entity-category-support#'
+                    => ['#http://clarin.eu/category/clarin-member#'],
+                ],
+            ],
+        ];
+        $this->metaloader->loadSource($this->source);
+        $this->metaloader->dumpMetadataStdOut();
+
+        /* Expected output is empty */
+        $output = $this->getActualOutput();
+        $this->assertEmpty($output);
+    }
+
+    /*
+     * Test non-matching of first entry, but matching of second, using both
+     * RegistrationInfo and EntityAttributes
+     */
+    public function testAttributewhitelist3()
+    {
+        $this->source['attributewhitelist'] = [
+            [
+                '#EntityAttributes#' => [
+                    '#urn:oasis:names:tc:SAML:attribute:assurance-certification#'
+                    => ['#https://refeds.org/sirtfi#'],
+                    '#http://macedir.org/entity-category-support#'
+                    => ['#http://clarin.eu/category/clarin-member#'],
+                ],
+            ],
+            [
+                '#RegistrationInfo#' => [
+                    '#registrationAuthority#'
+                    => '#http://www.surfconext.nl/#',
+                ],
+                '#EntityAttributes#' => [
+                    '#urn:oasis:names:tc:SAML:attribute:assurance-certification#'
+                    => ['#https://refeds.org/sirtfi#'],
+                ],
+            ],
+        ];
+        $this->metaloader->loadSource($this->source);
+        $this->metaloader->dumpMetadataStdOut();
+        /* match a line from the cert before we attempt to parse */
+        $this->expectOutputRegex('/UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh/');
+
+        $output = $this->getActualOutput();
+        try {
+            eval($output);
+        } catch (\Exception $e) {
+            $this->fail('Metarefresh does not produce syntactially valid code');
+        }
+        /* Check we matched the IdP */
+        $this->assertArrayHasKey('https://idp.example.com/idp/shibboleth', $metadata);
+
+        $this->assertTrue(
+            empty(array_diff_key($this->expected, $metadata['https://idp.example.com/idp/shibboleth']))
+        );
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/mdx.pem b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/mdx.pem
new file mode 100644
index 0000000000..0837fded91
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/mdx.pem
@@ -0,0 +1,12 @@
+-----BEGIN CERTIFICATE-----
+MIIBrTCCARYCCQC8Ue6scWtEDTANBgkqhkiG9w0BAQsFADAbMQswCQYDVQQGEwJB
+UTEMMAoGA1UEAxMDTURYMB4XDTIwMDYxMDEzNTY1NFoXDTM3MDYwNjEzNTY1NFow
+GzELMAkGA1UEBhMCQVExDDAKBgNVBAMTA01EWDCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEAuvq7p0XbdVNDpb4sMhB+rPRDUR/K0htSa3yBrINsdOoBLW67foY0
+rkypFRwmDX/bpe1Ik+hmaJgtdYCnFmlhlAU3mbaByL/q3I9DVVY4OgbC0jjWoy+7
++wP0/mf7onljzwSQO4jjcUWcx/upDVFYXci3UZjUhCTnu7RO1EAk6isCAwEAATAN
+BgkqhkiG9w0BAQsFAAOBgQB3J1oskvJqXoDJzSoGJmahLoDacF01OkXOtxRPtcOc
+RvBfakZGC2FtjHLTdyqz+dpcJsfYupBwavFxNunG6K2+d093j387TH7PyA5AckfL
+rOTR1iS4akp0yX7wvV2WWYRIXodnVHFGC0f25ZumkbL1vAkUd7q28zNcWIds8O2p
++g==
+-----END CERTIFICATE-----
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/testmetadata.xml b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/testmetadata.xml
new file mode 100644
index 0000000000..d5fa27dea9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/tests/testmetadata.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<md:EntitiesDescriptor xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:mdrpi="urn:oasis:names:tc:SAML:metadata:rpi" xmlns:mdattr="urn:oasis:names:tc:SAML:metadata:attribute" xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="54a61"><ds:Signature>
+  <ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
+  <ds:Reference URI=""><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>AUPsWdEcgoYY+ykZD4Ns7dCtGPIgxH4shMd6CRNQ0r0=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>meQHjxJn2zLgbWCzvvUil6FTwctrr/vEpUUkTFdKspkN8IVmNW1N5WvLZdk7mRrsl161I4BMDc0q+ndlYd+VTjsEf+dVQ4m0+RWRBp/+Q95oGn0ARq/scKH9fZiDNeIZCoRU/Q3mErzGYY0WasM8byZJinJo7WDyMKwhMddX/0k=</ds:SignatureValue>
+<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIBrTCCARYCCQC8Ue6scWtEDTANBgkqhkiG9w0BAQsFADAbMQswCQYDVQQGEwJBUTEMMAoGA1UEAxMDTURYMB4XDTIwMDYxMDEzNTY1NFoXDTM3MDYwNjEzNTY1NFowGzELMAkGA1UEBhMCQVExDDAKBgNVBAMTA01EWDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuvq7p0XbdVNDpb4sMhB+rPRDUR/K0htSa3yBrINsdOoBLW67foY0rkypFRwmDX/bpe1Ik+hmaJgtdYCnFmlhlAU3mbaByL/q3I9DVVY4OgbC0jjWoy+7+wP0/mf7onljzwSQO4jjcUWcx/upDVFYXci3UZjUhCTnu7RO1EAk6isCAwEAATANBgkqhkiG9w0BAQsFAAOBgQB3J1oskvJqXoDJzSoGJmahLoDacF01OkXOtxRPtcOcRvBfakZGC2FtjHLTdyqz+dpcJsfYupBwavFxNunG6K2+d093j387TH7PyA5AckfLrOTR1iS4akp0yX7wvV2WWYRIXodnVHFGC0f25ZumkbL1vAkUd7q28zNcWIds8O2p+g==</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>
+  <md:EntityDescriptor entityID="https://idp.example.com/idp/shibboleth">
+   <md:Extensions>
+     <mdrpi:RegistrationInfo registrationAuthority="http://www.surfconext.nl/" registrationInstant="2013-11-18T00:00:00Z">
+       <mdrpi:RegistrationPolicy xml:lang="en">https://wiki.surfnet.nl/display/eduGAIN/EduGAIN</mdrpi:RegistrationPolicy>
+     </mdrpi:RegistrationInfo>
+     <mdattr:EntityAttributes>
+       <saml:Attribute Name="urn:oasis:names:tc:SAML:attribute:assurance-certification" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+         <saml:AttributeValue>https://refeds.org/sirtfi</saml:AttributeValue>
+       </saml:Attribute>
+       <saml:Attribute Name="http://macedir.org/entity-category-support" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
+         <saml:AttributeValue>http://refeds.org/category/research-and-scholarship</saml:AttributeValue>
+       </saml:Attribute>
+     </mdattr:EntityAttributes>
+   </md:Extensions>
+    <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+      <md:Extensions>
+        <shibmd:Scope regexp="false">example.com</shibmd:Scope>
+        <mdui:UIInfo>
+          <mdui:DisplayName xml:lang="en">DisplayName</mdui:DisplayName>
+          <mdui:Description xml:lang="en">Description</mdui:Description>
+        </mdui:UIInfo>
+      </md:Extensions>
+      <md:KeyDescriptor>
+        <ds:KeyInfo>
+          <ds:X509Data>
+            <ds:X509Certificate>
+              MIIB/zCCAWgCCQCyf41J62ta0jANBgkqhkiG9w0BAQsFADBEMQswCQYDVQQGEwJB
+              UTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9pZHAuZXhh
+              bXBsZS5jb20wHhcNMTkwMTA3MDYyNDAyWhcNMzcwMzI1MDYyNDAyWjBEMQswCQYD
+              VQQGEwJBUTEbMBkGA1UECgwSRXhhbXBsZSBVbml2ZXJzaXR5MRgwFgYDVQQDDA9p
+              ZHAuZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBwa9wB
+              mgxSbFFQzw7T3F84F+EhjQS3d/4KsD3bAgm5WXz8E0H1VV8YcRpAMjRntqaitZ8X
+              NyjPIq43rUfx9MlYWdjPUthhU5xxBW80Zr9bcmztea6LgelctXnH+OCY4MSOyvji
+              /0Y4BjBE0N5PZeRiO4snPMz6hneMjtv+Qei9AgMBAAEwDQYJKoZIhvcNAQELBQAD
+              gYEAipaiTLJwjYpAkaRa8ANXPUgD0hJh6Z/lkX6m+E/mlkVvxN7OfIyDatT2R9B6
+              F+Yj7ujHmubkrLmdXvCPMjXNOqSYAtBkf5qcZ5x1d6Xas5Uw8t4uJSk/Nh2nKcom
+              l+zR8IYmcdFeaTjSMbEhYGDaIou+0T4/+/f8fDwwj8hQLYw=
+            </ds:X509Certificate>
+          </ds:X509Data>
+        </ds:KeyInfo>
+      </md:KeyDescriptor>
+      <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://idp.example.com/idp/profile/SAML2/POST/SSO"/>
+    </md:IDPSSODescriptor>
+    <md:Organization>
+      <md:OrganizationName xml:lang="en">OrganizationName</md:OrganizationName>
+      <md:OrganizationDisplayName xml:lang="en">OrganizationDisplayName</md:OrganizationDisplayName>
+      <md:OrganizationURL xml:lang="en">https://example.com</md:OrganizationURL>
+    </md:Organization>
+    <md:ContactPerson contactType="technical">
+      <md:EmailAddress>mailto:technical.contact@example.com</md:EmailAddress>
+    </md:ContactPerson>
+  </md:EntityDescriptor>
+</md:EntitiesDescriptor>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/www/fetch.php b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/www/fetch.php
index a715886fa0..3bca685cc0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/www/fetch.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/metarefresh/www/fetch.php
@@ -24,6 +24,7 @@
         # Get global black/whitelists
         $blacklist = $mconfig->getArray('blacklist', []);
         $whitelist = $mconfig->getArray('whitelist', []);
+        $attributewhitelist = $mconfig->getArray('attributewhitelist', []);
 
         // get global type filters
         $available_types = [
@@ -57,7 +58,16 @@
                 $source['whitelist'] = $whitelist;
             }
 
-            \SimpleSAML\Logger::debug('[metarefresh]: In set ['.$setkey.'] loading source ['.$source['src'].']');
+            # Merge global and src specific attributewhitelists, cannot use array_unique on multi-dim.
+            if (isset($source['attributewhitelist'])) {
+                $source['attributewhitelist'] = array_merge($source['attributewhitelist'], $attributewhitelist);
+            } else {
+                $source['attributewhitelist'] = $attributewhitelist;
+            }
+
+            \SimpleSAML\Logger::debug(
+                '[metarefresh]: In set [' . $setkey . '] loading source [' . $source['src'] . ']'
+            );
             $metaloader->loadSource($source);
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/dictionaries/multiauth.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/dictionaries/multiauth.translation.json
index bd235213fe..fce7afc0c7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/dictionaries/multiauth.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/dictionaries/multiauth.translation.json
@@ -32,7 +32,8 @@
 		"el": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c0\u03b7\u03b3\u03ae\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
 		"pl": "Wybierz \u017aród\u0142o autentykacji",
 		"xh": "Khetha umthombo wongqinisiso",
-		"zu": "Khetha umthombo wokuqinisekisa"
+		"zu": "Khetha umthombo wokuqinisekisa",
+		"ca": "Seleccioneu una font d’autenticació"
 	},
 	"select_source_text": {
 		"no": "Den valgte autentiseringskilden vil bli brukt til \u00e5 autentisere brukeren og deretter etablere en gyldig sesjon.",
@@ -67,6 +68,7 @@
 		"el": "\u0397 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7 \u03c0\u03b7\u03b3\u03ae \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03ac \u03c3\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03ad\u03b3\u03ba\u03c5\u03c1\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b5\u03b4\u03c1\u03af\u03b1\u03c2 (session).",
 		"pl": "Wybrane \u017aród\u0142o zostanie u\u017Cyte do autentykacji i stworzenia sesji",
 		"zu": "Umthombo wokuqinisekisa okhethiwe uzosetshenziswa ukuze uqinisekiswe futhi kwakhiwe iseshini esebenzayo.",
-		"xh": "Umthombo wongqinisiso okhethiweyo uza kusetyenziswa ukukungqinisisa nokuyila iseshoni esebenzayo."
+		"xh": "Umthombo wongqinisiso okhethiweyo uza kusetyenziswa ukukungqinisisa nokuyila iseshoni esebenzayo.",
+		"ca": "La font d’autenticació seleccionada s’utilitzarà per autenticar-vos i crear una sessió vàlida."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/lib/Auth/Source/MultiAuth.php b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/lib/Auth/Source/MultiAuth.php
index c25f85ba5d..85d723588a 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/lib/Auth/Source/MultiAuth.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/lib/Auth/Source/MultiAuth.php
@@ -2,6 +2,13 @@
 
 namespace SimpleSAML\Module\multiauth\Auth\Source;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils;
+
 /**
  * Authentication source which let the user chooses among a list of
  * other authentication sources
@@ -9,7 +16,6 @@
  * @author Lorenzo Gil, Yaco Sistemas S.L.
  * @package SimpleSAMLphp
  */
-
 class MultiAuth extends \SimpleSAML\Auth\Source
 {
     /**
@@ -34,6 +40,7 @@ class MultiAuth extends \SimpleSAML\Auth\Source
 
     /**
      * Array of sources we let the user chooses among.
+     * @var array
      */
     private $sources;
 
@@ -42,6 +49,7 @@ class MultiAuth extends \SimpleSAML\Auth\Source
      */
     private $preselect;
 
+
     /**
      * Constructor for this authentication source.
      *
@@ -68,9 +76,9 @@ public function __construct($info, $config)
             $this->preselect = $config['preselect'];
         }
 
-        $globalConfiguration = \SimpleSAML\Configuration::getInstance();
+        $globalConfiguration = Configuration::getInstance();
         $defaultLanguage = $globalConfiguration->getString('language.default', 'en');
-        $authsources = \SimpleSAML\Configuration::getConfig('authsources.php');
+        $authsources = Configuration::getConfig('authsources.php');
         $this->sources = [];
         foreach ($config['sources'] as $source => $info) {
             if (is_int($source)) {
@@ -111,6 +119,7 @@ public function __construct($info, $config)
         }
     }
 
+
     /**
      * Prompt the user with a list of authentication sources.
      *
@@ -122,6 +131,7 @@ public function __construct($info, $config)
      * in the delegateAuthentication method.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -130,17 +140,17 @@ public function authenticate(&$state)
         $state[self::AUTHID] = $this->authId;
         $state[self::SOURCESID] = $this->sources;
 
-        if (!\array_key_exists('multiauth:preselect', $state) && is_string($this->preselect)) {
+        if (!array_key_exists('multiauth:preselect', $state) && is_string($this->preselect)) {
             $state['multiauth:preselect'] = $this->preselect;
         }
 
         // Save the $state array, so that we can restore if after a redirect
-        $id = \SimpleSAML\Auth\State::saveState($state, self::STAGEID);
+        $id = Auth\State::saveState($state, self::STAGEID);
 
         /* Redirect to the select source page. We include the identifier of the
          * saved state array as a parameter to the login form
          */
-        $url = \SimpleSAML\Module::getModuleURL('multiauth/selectsource.php');
+        $url = Module::getModuleURL('multiauth/selectsource.php');
         $params = ['AuthState' => $id];
 
         // Allows the user to specify the auth source to be used
@@ -148,12 +158,13 @@ public function authenticate(&$state)
             $params['source'] = $_GET['source'];
         }
 
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, $params);
+        Utils\HTTP::redirectTrustedURL($url, $params);
 
         // The previous function never returns, so this code is never executed
         assert(false);
     }
 
+
     /**
      * Delegate authentication.
      *
@@ -164,43 +175,50 @@ public function authenticate(&$state)
      *
      * @param string $authId Selected authentication source
      * @param array $state Information about the current authentication.
+     * @return void
+     * @throws \Exception
      */
     public static function delegateAuthentication($authId, $state)
     {
         assert(is_string($authId));
         assert(is_array($state));
 
-        $as = \SimpleSAML\Auth\Source::getById($authId);
+        $as = Auth\Source::getById($authId);
         $valid_sources = array_map(
+            /**
+             * @param array $src
+             * @return string
+             */
             function ($src) {
                 return $src['source'];
             },
             $state[self::SOURCESID]
         );
         if ($as === null || !in_array($authId, $valid_sources, true)) {
-            throw new \Exception('Invalid authentication source: '.$authId);
+            throw new \Exception('Invalid authentication source: ' . $authId);
         }
 
         // Save the selected authentication source for the logout process.
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $session->setData(
             self::SESSION_SOURCE,
             $state[self::AUTHID],
             $authId,
-            \SimpleSAML\Session::DATA_TIMEOUT_SESSION_END
+            Session::DATA_TIMEOUT_SESSION_END
         );
 
         try {
             $as->authenticate($state);
-        } catch (\SimpleSAML\Error\Exception $e) {
-            \SimpleSAML\Auth\State::throwException($state, $e);
+        } catch (Error\Exception $e) {
+            Auth\State::throwException($state, $e);
         } catch (\Exception $e) {
-            $e = new \SimpleSAML\Error\UnserializableException($e);
-            \SimpleSAML\Auth\State::throwException($state, $e);
+            $e = new Error\UnserializableException($e);
+            Auth\State::throwException($state, $e);
         }
-        \SimpleSAML\Auth\Source::completeAuth($state);
+        Auth\Source::completeAuth($state);
     }
 
+
     /**
      * Log out from this authentication source.
      *
@@ -208,23 +226,25 @@ function ($src) {
      * session and then call the logout method on it.
      *
      * @param array &$state Information about the current logout operation.
+     * @return void
      */
     public function logout(&$state)
     {
         assert(is_array($state));
 
         // Get the source that was used to authenticate
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $authId = $session->getData(self::SESSION_SOURCE, $this->authId);
 
-        $source = \SimpleSAML\Auth\Source::getById($authId);
+        $source = Auth\Source::getById($authId);
         if ($source === null) {
-            throw new \Exception('Invalid authentication source during logout: '.$source);
+            throw new \Exception('Invalid authentication source during logout: ' . $authId);
         }
         // Then, do the logout on it
         $source->logout($state);
     }
 
+
     /**
      * Set the previous authentication source.
      *
@@ -232,14 +252,15 @@ public function logout(&$state)
      * by storing its name in a cookie.
      *
      * @param string $source Name of the authentication source the user selected.
+     * @return void
      */
     public function setPreviousSource($source)
     {
         assert(is_string($source));
 
-        $cookieName = 'multiauth_source_'.$this->authId;
+        $cookieName = 'multiauth_source_' . $this->authId;
 
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
         $params = [
             // We save the cookies for 90 days
             'lifetime' => 7776000, //60*60*24*90
@@ -248,18 +269,20 @@ public function setPreviousSource($source)
             'httponly' => false,
         ];
 
-        \SimpleSAML\Utils\HTTP::setCookie($cookieName, $source, $params, false);
+        Utils\HTTP::setCookie($cookieName, $source, $params, false);
     }
 
+
     /**
      * Get the previous authentication source.
      *
      * This method retrieves the authentication source that the user selected
      * last time or NULL if this is the first time or remembering is disabled.
+     * @return string|null
      */
     public function getPreviousSource()
     {
-        $cookieName = 'multiauth_source_'.$this->authId;
+        $cookieName = 'multiauth_source_' . $this->authId;
         if (array_key_exists($cookieName, $_COOKIE)) {
             return $_COOKIE[$cookieName];
         } else {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/selectsource.php b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/selectsource.tpl.php
similarity index 93%
rename from vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/selectsource.php
rename to vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/selectsource.tpl.php
index 294fcbc0c5..d40712998d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/selectsource.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/templates/selectsource.tpl.php
@@ -21,7 +21,7 @@
     $name = 'src-'.base64_encode($source['source']);
     echo '<input type="submit" name="'.htmlspecialchars($name).'"'.$autofocus.' '.
         'id="button-'.htmlspecialchars($source['source']).'" '.
-        'value="'.htmlspecialchars($this->t($source['text'])).'" />';
+        'value="'.htmlspecialchars($source['text']).'" />';
     echo '</li>';
 }
 ?>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/www/selectsource.php b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/www/selectsource.php
index 287f7808ea..2038e30874 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/multiauth/www/selectsource.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/multiauth/www/selectsource.php
@@ -15,10 +15,13 @@
     throw new \SimpleSAML\Error\BadRequest('Missing AuthState parameter.');
 }
 $authStateId = $_REQUEST['AuthState'];
+
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($authStateId, \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth::STAGEID);
 
 if (array_key_exists("\SimpleSAML\Auth\Source.id", $state)) {
     $authId = $state["\SimpleSAML\Auth\Source.id"];
+    /** @var \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth $as */
     $as = \SimpleSAML\Auth\Source::getById($authId);
 } else {
     $as = null;
@@ -48,7 +51,7 @@
 }
 
 $globalConfig = \SimpleSAML\Configuration::getInstance();
-$t = new \SimpleSAML\XHTML\Template($globalConfig, 'multiauth:selectsource.php');
+$t = new \SimpleSAML\XHTML\Template($globalConfig, 'multiauth:selectsource.tpl.php');
 
 $defaultLanguage = $globalConfig->getString('language.default', 'en');
 $language = $t->getTranslator()->getLanguage()->getLanguage();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/.php_cs.dist
new file mode 100644
index 0000000000..33467ebed8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/.travis.yml
new file mode 100644
index 0000000000..797825eeb8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/.travis.yml
@@ -0,0 +1,142 @@
+language: php
+
+# Stage order
+stages:
+  - pre-conditions
+  - test
+  - quality
+
+
+################
+#  Test stage  #
+################
+
+php:
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - COMMAND="composer install"
+  - COMMAND="composer update"
+
+before_install:
+  - printf "\n" | pecl install krb5
+
+before_script:
+  - ${COMMAND}
+
+script:
+  - php vendor/bin/phpunit --no-coverage
+
+jobs:
+  fast_finish: true
+  allow_failures:
+    - php: 7.3
+      env: Psalm
+    - php: 7.3
+      env: Security check (composer install)
+    - php: 7.3
+      env: Security check (composer update)
+    - php: 7.3
+      env: PHP Codesniffer
+
+  include:
+
+    ##########################
+    #  Pre-conditions stage  #
+    ##########################
+
+    - stage: pre-conditions
+      php: 7.0
+      env: Syntax check PHP
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      php: 7.1
+      env: Syntax check PHP
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      php: 7.2
+      env: Syntax check PHP
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      php: 7.3
+      env: Syntax check PHP
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      php: 7.3
+      env: Syntax check YAML / XML / JSON
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/check-syntax-yaml.sh
+        - vendor/bin/check-syntax-xml.sh
+        - vendor/bin/check-syntax-json.sh
+
+
+    ###################
+    #  Quality stage  #
+    ###################
+
+    - stage: quality
+      php: 7.3
+      env: Security check (composer install)
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/security-checker security:check
+
+    - stage: quality
+      php: 7.3
+      env: Security check (composer update)
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/security-checker security:check
+
+    - stage: quality
+      php: 7.3
+      env: Codecov
+      before_script:
+        - composer update
+        - php vendor/bin/phpunit
+      script:
+        - bash <(curl -s https://codecov.io/bash)
+
+    - stage: quality
+      php: 7.3
+      env: Psalm
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/psalm
+        - vendor/bin/psalter --issues=UnnecessaryVarAnnotation --dry-run
+
+    - stage: quality
+      php: 7.3
+      env: PHP Codesniffer
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/phpcs
+
+notifications:
+  slack:
+    secure: h5YiO7tAk5bzAQBkUZ3crnOFAOBkNqHp0nc2cxvGauogVfCLE9K8bME512uTeu9QWMht2D30uyTOHFKQ7sPEW4omHNF4qYl4p9L037oQFfEwZPBzJFo9QUzviT3mvKHTN4HSQOkq/08ZoMhh1i3p/OhyFS56J28IDJWDqGZkEUE=
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/composer.json
new file mode 100644
index 0000000000..7c70015a9f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/composer.json
@@ -0,0 +1,49 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-negotiate",
+    "description": "The Negotiate module implements Microsofts Kerberos SPNEGO mechanism",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "negotiate"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\negotiate\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "simplesamlphp/simplesamlphp-module-ldap": "^0.9",
+        "webmozart/assert": "~1.4"
+    },
+    "require-dev": {
+        "sensiolabs/security-checker": "^5.0.3",
+        "simplesamlphp/simplesamlphp": "dev-testing-1.18",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.14",
+        "squizlabs/php_codesniffer": "^3.5",
+        "phpunit/phpunit": "~5.7"
+    },
+    "suggest": {
+        "ext-krb5": "Needed in case the SimpleSAMLphp negotiate module is used"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-negotiate/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-negotiate"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/default-disable
index fa0bd82e2d..25615cb47c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/default-disable
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/default-disable
@@ -1,3 +1,3 @@
 This file indicates that the default state of this module
-is disabled. To enable, create a file named enable in the
+is enabled. To disable, create a file named disable in the
 same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/docs/negotiate.md b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/docs/negotiate.md
index 8563b338d3..5cbe838e23 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/docs/negotiate.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/docs/negotiate.md
@@ -58,7 +58,9 @@ All configuration is handled in authsources.php:
              'hostname' => 'ldap.example.com',
              'base' => 'cn=people,dc=example,dc=com',
              'adminUser' => 'cn=idp-fallback,cn=services,dc=example,dc=com',
-             'adminPassword' => 'VerySecretPassphraseHush'
+             'adminPassword' => 'VerySecretPassphraseHush',
+             'referrals' => true,
+             'spn' => null
      ],
      'ldap' => [
              'ldap:LDAP',
@@ -73,13 +75,17 @@ All configuration is handled in authsources.php:
 ### `php_krb5`
 
 The processing involving the actual Kerberos ticket handling is done
-by php_krb5. The package is not yet labeled stable but has worked well
-during testing.
+by php_krb5.
+
+NOTE! If running using virtual hosts or behind a reverse proxy, you
+might need to change the 'spn' variable to '0' (match any entry in the
+keytab file) or set it to the specific entry to are trying to match.
+This requires php-krb5 >= 1.1.3:
+
+    'spn' => '0',
+
+    'spn' => 'HTTP/host',
 
-NOTE! php_krb5 hardcodes the service name in the keytab file to 'HTTP'
-as of php_krb5-1.0rc2. To change this you need to edit the module code.
-Be wary of how much space is allocated to the string in
-`negotiate_auth.c:101`.
 
 Depending on you apache config you may need a rewrite rule to allow
 php_krb5 to read the HTTP_AUTHORIZATION header:
@@ -131,11 +137,11 @@ Kerberos. A domain can contain lots of kiosk users, non-personal
 accounts and the likes. The LDAP lookup will authorize and fetch
 attributes as defined by SimpleSamlPhp metadata.
 
-'hostname', 'enable_tls', 'debugLDAP', 'timeout' and 'base' are
-self-explanatory. Read the documentation of the LDAP auth module for
-more information. 'attr' is the attribute that will be used to look up
-user objects in the directory after extracting it from the Kerberos
-session. Default is 'uid'.
+'hostname', 'enable_tls', 'debugLDAP', 'timeout', 'base' and
+'referrals' are self-explanatory. Read the documentation of the LDAP
+auth module for more information. 'attr' is the attribute that will
+be used to look up user objects in the directory after extracting it
+from the Kerberos session. Default is 'uid'.
 
 For LDAP directories with restricted access to objects or attributes
 Negotiate implements 'adminUser' and 'adminPassword'. adminUser must
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/lib/Auth/Source/Negotiate.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/lib/Auth/Source/Negotiate.php
index bba08d6bbd..d2b0442512 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/lib/Auth/Source/Negotiate.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/lib/Auth/Source/Negotiate.php
@@ -2,7 +2,7 @@
 
 namespace SimpleSAML\Module\negotiate\Auth\Source;
 
-use \SimpleSAML\Logger;
+use SimpleSAML\Logger;
 
 /**
  * The Negotiate module. Allows for password-less, secure login by Kerberos and Negotiate.
@@ -10,28 +10,63 @@
  * @author Mathias Meisfjordskar, University of Oslo <mathias.meisfjordskar@usit.uio.no>
  * @package SimpleSAMLphp
  */
-
 class Negotiate extends \SimpleSAML\Auth\Source
 {
     // Constants used in the module
     const STAGEID = '\SimpleSAML\Module\negotiate\Auth\Source\Negotiate.StageId';
+    const AUTHID = '\SimpleSAML\Module\negotiate\Auth\Source\Negotiate.AuthId';
 
+    /** @var \SimpleSAML\Module\ldap\Auth\Ldap|null */
     protected $ldap = null;
+
+    /** @var string */
     protected $backend = '';
+
+    /** @var string*/
     protected $hostname = '';
+
+    /** @var int */
     protected $port = 389;
+
+    /** @var bool */
     protected $referrals = true;
+
+    /** @var bool */
     protected $enableTLS = false;
+
+    /** @var bool */
     protected $debugLDAP = false;
+
+    /** @var int */
     protected $timeout = 30;
+
+    /** @var string */
     protected $keytab = '';
+
+    /** @var string|null */
+    protected $spn = null;
+
+    /** @var array */
     protected $base = [];
+
+    /** @var array */
     protected $attr = ['uid'];
+
+    /** @var array|null */
     protected $subnet = null;
+
+    /** @var string|null */
     protected $admin_user = null;
+
+    /** @var string|null */
     protected $admin_pw = null;
+
+    /** @var array|null */
     protected $attributes = null;
 
+    /** @var array */
+    protected $binaryAttributes = [];
+
 
     /**
      * Constructor for this authentication source.
@@ -52,22 +87,24 @@ public function __construct($info, $config)
         // call the parent constructor first, as required by the interface
         parent::__construct($info, $config);
 
-        $config = \SimpleSAML\Configuration::loadFromArray($config);
-
-        $this->backend = $config->getString('fallback');
-        $this->hostname = $config->getString('hostname');
-        $this->port = $config->getInteger('port', 389);
-        $this->referrals = $config->getBoolean('referrals', true);
-        $this->enableTLS = $config->getBoolean('enable_tls', false);
-        $this->debugLDAP = $config->getBoolean('debugLDAP', false);
-        $this->timeout = $config->getInteger('timeout', 30);
-        $this->keytab = \SimpleSAML\Utils\Config::getCertPath($config->getString('keytab'));
-        $this->base = $config->getArrayizeString('base');
-        $this->attr = $config->getArrayizeString('attr', 'uid');
-        $this->subnet = $config->getArray('subnet', null);
-        $this->admin_user = $config->getString('adminUser', null);
-        $this->admin_pw = $config->getString('adminPassword', null);
-        $this->attributes = $config->getArray('attributes', null);
+        $cfg = \SimpleSAML\Configuration::loadFromArray($config);
+
+        $this->backend = $cfg->getString('fallback');
+        $this->hostname = $cfg->getString('hostname');
+        $this->port = $cfg->getInteger('port', 389);
+        $this->referrals = $cfg->getBoolean('referrals', true);
+        $this->enableTLS = $cfg->getBoolean('enable_tls', false);
+        $this->debugLDAP = $cfg->getBoolean('debugLDAP', false);
+        $this->timeout = $cfg->getInteger('timeout', 30);
+        $this->keytab = \SimpleSAML\Utils\Config::getCertPath($cfg->getString('keytab'));
+        $this->base = $cfg->getArrayizeString('base');
+        $this->attr = $cfg->getArrayizeString('attr', 'uid');
+        $this->subnet = $cfg->getArray('subnet', null);
+        $this->admin_user = $cfg->getString('adminUser', null);
+        $this->admin_pw = $cfg->getString('adminPassword', null);
+        $this->attributes = $cfg->getArray('attributes', null);
+        $this->binaryAttributes = $cfg->getArray('attributes.binary', []);
+        $this->spn = $cfg->getString('spn', null);
     }
 
 
@@ -81,6 +118,7 @@ public function __construct($info, $config)
      * LDAP is used as a user metadata source.
      *
      * @param array &$state Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -93,7 +131,7 @@ public function authenticate(&$state)
         $state['negotiate:authId'] = $this->authId;
 
 
-        // check for disabled SPs. The disable flag is store in the SP metadata
+        // check for disabled SPs. The disable flag is stored in the SP metadata
         if (array_key_exists('SPMetadata', $state) && $this->spDisabledInMetadata($state['SPMetadata'])) {
             $this->fallBack($state);
         }
@@ -102,9 +140,10 @@ public function authenticate(&$state)
         $session = \SimpleSAML\Session::getSessionFromRequest();
         $disabled = $session->getData('negotiate:disable', 'session');
 
-        if ($disabled ||
-            (!empty($_COOKIE['NEGOTIATE_AUTOLOGIN_DISABLE_PERMANENT']) &&
-                $_COOKIE['NEGOTIATE_AUTOLOGIN_DISABLE_PERMANENT'] == 'True')
+        if (
+            $disabled
+            || (!empty($_COOKIE['NEGOTIATE_AUTOLOGIN_DISABLE_PERMANENT'])
+                && $_COOKIE['NEGOTIATE_AUTOLOGIN_DISABLE_PERMANENT'] === 'true')
         ) {
             Logger::debug('Negotiate - session disabled. falling back');
             $this->fallBack($state);
@@ -121,7 +160,7 @@ public function authenticate(&$state)
         Logger::debug('Negotiate - authenticate(): looking for Negotiate');
         if (!empty($_SERVER['HTTP_AUTHORIZATION'])) {
             Logger::debug('Negotiate - authenticate(): Negotiate found');
-            $this->ldap = new \SimpleSAML\Auth\LDAP(
+            $this->ldap = new \SimpleSAML\Module\ldap\Auth\Ldap(
                 $this->hostname,
                 $this->enableTLS,
                 $this->debugLDAP,
@@ -139,19 +178,29 @@ public function authenticate(&$state)
                 }
             }
 
-            $auth = new \KRB5NegotiateAuth($this->keytab);
+            if ($this->spn === null) {
+                // old FQDN behavior
+                $auth = new \KRB5NegotiateAuth($this->keytab);
+            } elseif ($this->spn === '0') {
+                // \KRB5NegotiateAuth constructor expects (long)0 value as second
+                // parameter if you need GSS_C_NO_NAME (match any entry) behavior
+                $auth = new \KRB5NegotiateAuth($this->keytab, 0);
+            } else {
+                $auth = new \KRB5NegotiateAuth($this->keytab, $this->spn);
+            }
+
             // attempt Kerberos authentication
             try {
                 $reply = $auth->doAuthentication();
             } catch (\Exception $e) {
-                Logger::error('Negotiate - authenticate(): doAuthentication() exception: '.$e->getMessage());
+                Logger::error('Negotiate - authenticate(): doAuthentication() exception: ' . $e->getMessage());
                 $reply = null;
             }
 
             if ($reply) {
                 // success! krb TGS received
                 $user = $auth->getAuthenticatedUser();
-                Logger::info('Negotiate - authenticate(): '.$user.' authenticated.');
+                Logger::info('Negotiate - authenticate(): ' . $user . ' authenticated.');
                 $lookup = $this->lookupUserData($user);
                 if ($lookup !== null) {
                     $state['Attributes'] = $lookup;
@@ -159,7 +208,7 @@ public function authenticate(&$state)
                     $state['LogoutState'] = [
                         'negotiate:backend' => null,
                     ];
-                    Logger::info('Negotiate - authenticate(): '.$user.' authorized.');
+                    Logger::info('Negotiate - authenticate(): ' . $user . ' authorized.');
                     \SimpleSAML\Auth\Source::completeAuth($state);
                     // Never reached.
                     assert(false);
@@ -172,7 +221,7 @@ public function authenticate(&$state)
             // No auth token. Send it.
             Logger::debug('Negotiate - authenticate(): Sending Negotiate.');
             // Save the $state array, so that we can restore if after a redirect
-            Logger::debug('Negotiate - fallback: '.$state['LogoutState']['negotiate:backend']);
+            Logger::debug('Negotiate - fallback: ' . $state['LogoutState']['negotiate:backend']);
             $id = \SimpleSAML\Auth\State::saveState($state, self::STAGEID);
             $params = ['AuthState' => $id];
 
@@ -187,6 +236,10 @@ public function authenticate(&$state)
     }
 
 
+    /**
+     * @param array $spMetadata
+     * @return bool
+     */
     public function spDisabledInMetadata($spMetadata)
     {
         if (array_key_exists('negotiate:disable', $spMetadata)) {
@@ -209,7 +262,7 @@ public function spDisabledInMetadata($spMetadata)
      *
      * Will return TRUE if no subnet option is configured.
      *
-     * @return boolean
+     * @return bool
      */
     public function checkMask()
     {
@@ -221,11 +274,11 @@ public function checkMask()
         foreach ($this->subnet as $cidr) {
             $ret = \SimpleSAML\Utils\Net::ipCIDRcheck($cidr);
             if ($ret) {
-                Logger::debug('Negotiate: Client "'.$ip.'" matched subnet.');
+                Logger::debug('Negotiate: Client "' . $ip . '" matched subnet.');
                 return true;
             }
         }
-        Logger::debug('Negotiate: Client "'.$ip.'" did not match subnet.');
+        Logger::debug('Negotiate: Client "' . $ip . '" did not match subnet.');
         return false;
     }
 
@@ -235,6 +288,7 @@ public function checkMask()
      * wants to show the 401 message.
      *
      * @param array $params additional parameters to the URL in the URL in the body.
+     * @return void
      */
     protected function sendNegotiate($params)
     {
@@ -242,10 +296,9 @@ protected function sendNegotiate($params)
 
         $url = htmlspecialchars(\SimpleSAML\Module::getModuleURL('negotiate/backend.php', $params));
 
-        header('HTTP/1.1 401 Unauthorized');
-        header('WWW-Authenticate: Negotiate', false);
-
         $t = new \SimpleSAML\XHTML\Template($config, 'negotiate:redirect.php');
+        $t->setStatusCode(401);
+        $t->headers->set('WWW-Authenticate', 'Negotiate');
         $t->data['baseurlpath'] = \SimpleSAML\Module::getModuleURL('negotiate');
         $t->data['url'] = $url;
         $t->show();
@@ -256,6 +309,7 @@ protected function sendNegotiate($params)
      * Passes control of the login process to a different module.
      *
      * @param array $state Information about the current authentication.
+     * @return void
      *
      * @throws \SimpleSAML\Error\Error If couldn't determine the auth source.
      * @throws \SimpleSAML\Error\Exception
@@ -268,6 +322,7 @@ public static function fallBack(&$state)
         if ($authId === null) {
             throw new \SimpleSAML\Error\Error([500, "Unable to determine auth source."]);
         }
+        /** @var \SimpleSAML\Auth\Source $source */
         $source = \SimpleSAML\Auth\Source::getById($authId);
 
         try {
@@ -290,7 +345,7 @@ public static function fallBack(&$state)
      *
      * @param string $user The Kerberos user identifier.
      *
-     * @return string The DN to the user or NULL if not found.
+     * @return array|null The attributes for the user or NULL if not found.
      */
     protected function lookupUserData($user)
     {
@@ -304,9 +359,9 @@ protected function lookupUserData($user)
         $this->adminBind();
         try {
             $dn = $this->ldap->searchfordn($this->base, $this->attr, $uid);
-            return $this->ldap->getAttributes($dn, $this->attributes);
+            return $this->ldap->getAttributes($dn, $this->attributes, $this->binaryAttributes);
         } catch (\SimpleSAML\Error\Exception $e) {
-            Logger::debug('Negotiate - ldap lookup failed: '.$e);
+            Logger::debug('Negotiate - ldap lookup failed: ' . $e);
             return null;
         }
     }
@@ -315,6 +370,9 @@ protected function lookupUserData($user)
     /**
      * Elevates the LDAP connection to allow restricted lookups if
      * so configured. Does nothing if not.
+     *
+     * @return void
+     * @throws \SimpleSAML\Error\AuthSource
      */
     protected function adminBind()
     {
@@ -322,11 +380,12 @@ protected function adminBind()
             // no admin user
             return;
         }
-        Logger::debug('Negotiate - authenticate(): Binding as system user '.var_export($this->admin_user, true));
+        Logger::debug('Negotiate - authenticate(): Binding as system user ' . var_export($this->admin_user, true));
 
         if (!$this->ldap->bind($this->admin_user, $this->admin_pw)) {
-            $msg = 'Unable to authenticate system user (LDAP_INVALID_CREDENTIALS) '.var_export($this->admin_user, true);
-            Logger::error('Negotiate - authenticate(): '.$msg);
+            $msg = 'Unable to authenticate system user (LDAP_INVALID_CREDENTIALS) '
+                . var_export($this->admin_user, true);
+            Logger::error('Negotiate - authenticate(): ' . $msg);
             throw new \SimpleSAML\Error\AuthSource('negotiate', $msg);
         }
     }
@@ -339,19 +398,21 @@ protected function adminBind()
      * logout call to the fallback module.
      *
      * @param array &$state Information about the current logout operation.
+     * @return void
      */
     public function logout(&$state)
     {
         assert(is_array($state));
         // get the source that was used to authenticate
         $authId = $state['negotiate:backend'];
-        Logger::debug('Negotiate - logout has the following authId: "'.$authId.'"');
+        Logger::debug('Negotiate - logout has the following authId: "' . $authId . '"');
 
         if ($authId === null) {
             $session = \SimpleSAML\Session::getSessionFromRequest();
             $session->setData('negotiate:disable', 'session', true, 24 * 60 * 60);
             parent::logout($state);
         } else {
+            /** @var \SimpleSAML\Auth\Source $source */
             $source = \SimpleSAML\Auth\Source::getById($authId);
             $source->logout($state);
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpcs.xml b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpcs.xml
new file mode 100644
index 0000000000..1ac2509350
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpcs.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<ruleset name="SimpleSAMLphp ruleset">
+    <config name="ignore_warnings_on_exit" value="1"/>
+
+    <description>
+        By default it is less stringent about long lines than other coding standards
+    </description>
+
+    <file>lib</file>
+    <file>templates</file>
+    <file>tests</file>
+
+    <!-- This is the rule we inherit from. If you want to exlude some specific rules, see the docs on how to do that -->
+    <rule ref="PSR12"/>
+</ruleset>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpunit.xml
new file mode 100644
index 0000000000..b3763ee604
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/phpunit.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>./vendor/simplesamlphp/simplesamlphp-test-framework/tests/</directory>
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+            <directory suffix=".php">./tests</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/psalm.xml
new file mode 100644
index 0000000000..636323a551
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/psalm.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp negotiate module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="tests" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+
+        <!-- Ignore UnresolvableInclude on CLI-scripts -->
+        <UnresolvableInclude>
+            <errorLevel type="suppress">
+                <file name="tests/bootstrap.php" />
+            </errorLevel>
+        </UnresolvableInclude>
+    </issueHandlers>
+
+    <stubs>
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/krb5.php" />
+    </stubs>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/disable.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/disable.php
index fd8338e9f4..af5fd84ea4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/disable.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/disable.php
@@ -7,6 +7,7 @@
  *         <mathias.meisfjordskar@usit.uio.no>
  * @package SimpleSAMLphp
  */
+
 $this->includeAtTemplateBase('includes/header.php');
 ?>
 <h1><?php echo $this->t('{negotiate:negotiate:disable_title}'); ?></h1>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/enable.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/enable.php
index a25b6a213b..93f329dec1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/enable.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/templates/enable.php
@@ -7,6 +7,7 @@
  *         <mathias.meisfjordskar@usit.uio.no>
  * @package SimpleSAMLphp
  */
+
 $this->includeAtTemplateBase('includes/header.php');
 ?>
 <h1><?php echo $this->t('{negotiate:negotiate:enable_title}'); ?></h1>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/tests/bootstrap.php
new file mode 100644
index 0000000000..7a5b54ed8d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/negotiate';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/backend.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/backend.php
index 8a5222f26d..0ac5e0a3f7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/backend.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/backend.php
@@ -12,7 +12,7 @@
     $_REQUEST['AuthState'],
     \SimpleSAML\Module\negotiate\Auth\Source\Negotiate::STAGEID
 );
-\SimpleSAML\Logger::debug('backend - fallback: '.$state['LogoutState']['negotiate:backend']);
+\SimpleSAML\Logger::debug('backend - fallback: ' . $state['LogoutState']['negotiate:backend']);
 
 \SimpleSAML\Module\negotiate\Auth\Source\Negotiate::fallBack($state);
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/disable.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/disable.php
index 2734f05c31..0055746163 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/disable.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/disable.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @author Mathias Meisfjordskar, University of Oslo.
  *         <mathias.meisfjordskar@usit.uio.no>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/enable.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/enable.php
index be52928db4..9fb3938ce2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/enable.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/enable.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @author Mathias Meisfjordskar, University of Oslo.
  *         <mathias.meisfjordskar@usit.uio.no>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/retry.php b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/retry.php
index c4ffd87a52..2d68caca44 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/retry.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/negotiate/www/retry.php
@@ -20,7 +20,7 @@
 if (isset($idpmeta['auth'])) {
     $source = \SimpleSAML\Auth\Source::getById($idpmeta['auth']);
     if ($source === null) {
-        throw new \SimpleSAML\Error\BadRequest('Invalid AuthId "'.$idpmeta['auth'].'" - not found.');
+        throw new \SimpleSAML\Error\BadRequest('Invalid AuthId "' . $idpmeta['auth'] . '" - not found.');
     }
 
     $session = \SimpleSAML\Session::getSessionFromRequest();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/oauth/.travis.yml
new file mode 100644
index 0000000000..3c250287a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/oauth/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/README.md b/vendor/simplesamlphp/simplesamlphp/modules/oauth/README.md
new file mode 100644
index 0000000000..ce5a8383b6
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/README.md
@@ -0,0 +1,9 @@
+# simplesamlphp-module-oauth
+Ancient Oauth1 module for SimpleSAMLphp
+
+This module was extracted from SimpleSAMLphp 1.17.
+It will not be included in 2.0 anymore, but can be installed separately.
+
+To install this legacy module, use the following command from the SimpleSAMLphp installation directory:
+
+`composer.phar require simplesamlphp/simplesamlphp-module-oauth`
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/oauth/bin/check-syntax.sh
new file mode 100755
index 0000000000..4bcb9cc6fb
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates hooks lib libextinc templates www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/oauth/codecov.yml
new file mode 100644
index 0000000000..2d76b2030a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/codecov.yml
@@ -0,0 +1,12 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
+  
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/oauth/composer.json
new file mode 100644
index 0000000000..11238008a1
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/composer.json
@@ -0,0 +1,29 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-oauth",
+    "description": "A SimpleSAMLphp module that allows integration with OAuth1,",
+    "type": "simplesamlphp-module",
+    "keywords": [ "SimpleSAMLphp", "OAuth1"],
+    "homepage": "https://simplesamlphp.org/",
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olav.morken@uninett.no"
+        },
+        {
+            "name": "Jaime Perez Crespo",
+            "email": "jaime.perez@uninett.no"
+        }
+    ],
+    "require": {
+      "simplesamlphp/composer-module-installer": ">=1.1.6"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~4.8.36"
+    },
+    "support": {
+        "issues": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/issues",
+        "source": "https://github.com/simplesamlphp/simplesamlphp-module-oauth/"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_cron.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_cron.php
index 1a37cb41d6..5df267877b 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_cron.php
@@ -4,8 +4,8 @@
  * Hook to run a cron job.
  *
  * @param array &$croninfo  Output
+ * @return void
  */
-
 function oauth_hook_cron(&$croninfo)
 {
     assert(is_array($croninfo));
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_frontpage.php
index 028e11c85d..188b4b2649 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/hooks/hook_frontpage.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to add link to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
 function oauth_hook_frontpage(&$links)
 {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Consumer.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Consumer.php
index b3a4080ae6..7b61528b9f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Consumer.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Consumer.php
@@ -10,23 +10,39 @@
  * @author Andreas Åkre Solberg, <andreas.solberg@uninett.no>, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class Consumer
 {
+    /** @var \OAuthConsumer */
     private $consumer;
+
+    /** @var \OAuthSignatureMethod */
     private $signer;
 
+
+    /**
+     * @param string $key
+     * @param string $secret
+     */
     public function __construct($key, $secret)
     {
         $this->consumer = new \OAuthConsumer($key, $secret, null);
         $this->signer = new \OAuthSignatureMethod_HMAC_SHA1();
     }
 
-    // Used only to load the libextinc library early
+
+    /**
+     * Used only to load the libextinc library early
+     * @return void
+     */
     public static function dummy()
     {
     }
 
+
+    /**
+     * @param array $hrh
+     * @return string|null
+     */
     public static function getOAuthError($hrh)
     {
         foreach ($hrh as $h) {
@@ -37,6 +53,11 @@ public static function getOAuthError($hrh)
         return null;
     }
 
+
+    /**
+     * @param array $hrh
+     * @return string|null
+     */
     public static function getContentType($hrh)
     {
         foreach ($hrh as $h) {
@@ -47,7 +68,8 @@ public static function getContentType($hrh)
         return null;
     }
 
-    /*
+
+    /**
      * This static helper function wraps \SimpleSAML\Utils\HTTP::fetch
      * and throws an exception with diagnostics messages if it appear
      * to be failing on an OAuth endpoint.
@@ -55,18 +77,26 @@ public static function getContentType($hrh)
      * If the status code is not 200, an exception is thrown. If the content-type
      * of the response if text/plain, the content of the response is included in
      * the text of the Exception thrown.
+     *
+     * @param string $url
+     * @param string $context
+     * @return string
+     * @throws \Exception
      */
     public static function getHTTP($url, $context = '')
     {
         try {
-            $response = \SimpleSAML\Utils\HTTP::fetch($url);
+            $response = \SimpleSAML\Utils\HTTP::fetch($url, [], false);
         } catch (\SimpleSAML\Error\Exception $e) {
             $statuscode = 'unknown';
+
+            /** @psalm-suppress UndefinedVariable */
             if (preg_match('/^HTTP.*\s([0-9]{3})/', $http_response_header[0], $matches)) {
                 $statuscode = $matches[1];
             }
 
             $error = $context.' [statuscode: '.$statuscode.']: ';
+            /** @psalm-suppress UndefinedVariable */
             $oautherror = self::getOAuthError($http_response_header);
 
             if (!empty($oautherror)) {
@@ -76,9 +106,17 @@ public static function getHTTP($url, $context = '')
             throw new \Exception($error.':'.$url);
         }
         // Fall back to return response, if could not reckognize HTTP header. Should not happen.
+        /** @var string $response */
         return $response;
     }
 
+
+    /**
+     * @param string $url
+     * @param array|null $parameters
+     * @return \OAuthToken
+     * @throws \Exception
+     */
     public function getRequestToken($url, $parameters = null)
     {
         $req_req = \OAuthRequest::from_consumer_and_token($this->consumer, null, "GET", $url, $parameters);
@@ -101,6 +139,14 @@ public function getRequestToken($url, $parameters = null)
         return new \OAuthToken($requestToken, $requestTokenSecret);
     }
 
+
+    /**
+     * @param string $url
+     * @param \OAuthToken $requestToken
+     * @param bool $redirect
+     * @param callable|null $callback
+     * @return string
+     */
     public function getAuthorizeRequest($url, $requestToken, $redirect = true, $callback = null)
     {
         $params = ['oauth_token' => $requestToken->key];
@@ -115,19 +161,29 @@ public function getAuthorizeRequest($url, $requestToken, $redirect = true, $call
         return $authorizeURL;
     }
 
+
+    /**
+     * @param string $url
+     * @param \OAuthToken $requestToken
+     * @param array|null $parameters
+     * @return \OAuthToken
+     * @throws \Exception
+     */
     public function getAccessToken($url, $requestToken, $parameters = null)
     {
         $acc_req = \OAuthRequest::from_consumer_and_token($this->consumer, $requestToken, "GET", $url, $parameters);
         $acc_req->sign_request($this->signer, $this->consumer, $requestToken);
 
         try {
-            $response_acc = \SimpleSAML\Utils\HTTP::fetch($acc_req->to_url());
+            /** @var string $response_acc */
+            $response_acc = \SimpleSAML\Utils\HTTP::fetch($acc_req->to_url(), [], false);
         } catch (\SimpleSAML\Error\Exception $e) {
             throw new \Exception('Error contacting request_token endpoint on the OAuth Provider');
         }
 
         \SimpleSAML\Logger::debug('oauth: Reponse to get access token: '.$response_acc);
 
+        $accessResponseParsed = [];
         parse_str($response_acc, $accessResponseParsed);
 
         if (array_key_exists('error', $accessResponseParsed)) {
@@ -140,6 +196,14 @@ public function getAccessToken($url, $requestToken, $parameters = null)
         return new \OAuthToken($accessToken, $accessTokenSecret);
     }
 
+
+    /**
+     * @param string $url
+     * @param \OAuthToken $accessToken
+     * @param array $parameters
+     * @return array|string
+     * @throws \SimpleSAML\Error\Exception
+     */
     public function postRequest($url, $accessToken, $parameters)
     {
         $data_req = \OAuthRequest::from_consumer_and_token($this->consumer, $accessToken, "POST", $url, $parameters);
@@ -167,13 +231,21 @@ public function postRequest($url, $accessToken, $parameters)
         return $response;
     }
 
-    public function getUserInfo($url, $accessToken, $opts = null)
+
+    /**
+     * @param string $url
+     * @param \OAuthToken $accessToken
+     * @param array $opts
+     * @return array|null
+     */
+    public function getUserInfo($url, $accessToken, $opts = [])
     {
         $data_req = \OAuthRequest::from_consumer_and_token($this->consumer, $accessToken, "GET", $url, null);
         $data_req->sign_request($this->signer, $this->consumer, $accessToken);
 
+        /** @var string $data */
         $data = \SimpleSAML\Utils\HTTP::fetch($data_req->to_url(), $opts);
 
-        return  json_decode($data, true);
+        return json_decode($data, true);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthServer.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthServer.php
index 41e60383ad..f4cda9b5d7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthServer.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthServer.php
@@ -10,14 +10,20 @@
  * @author Andreas Åkre Solberg, <andreas.solberg@uninett.no>, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class OAuthServer extends \OAuthServer
 {
+    /**
+     * @param \OAuthDataStore $store
+     */
     public function __construct($store)
     {
         parent::__construct($store);
     }
 
+
+    /**
+     * @return array
+     */
     public function get_signature_methods()
     {
         return $this->signature_methods;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthStore.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthStore.php
index b0c9d222dd..694e3240f2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthStore.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/OAuthStore.php
@@ -14,13 +14,18 @@
  * @author Mark Dobrinic, <mdobrinic@cozmanova.com>, Cozmanova bv
  * @package SimpleSAMLphp
  */
-
 class OAuthStore extends \OAuthDataStore
 {
+    /** @var \SimpleSAML\Module\core\Storage\SQLPermanentStorage */
     private $store;
+
+    /** @var \SimpleSAML\Configuration */
     private $config;
+
+    /** @var string */
     private $defaultversion = '1.0';
 
+    /** @var array */
     protected $_store_tables = [
         'consumers' => 'consumer = array with consumer attributes',
         'nonce' => 'nonce+consumer_key = -boolean-',
@@ -42,7 +47,7 @@ public function __construct()
      * Attach the data to the token, and establish the Callback URL and verifier
      * @param string $requestTokenKey RequestToken that was authorized
      * @param string $data Data that is authorized and to be attached to the requestToken
-     * @return array(string:url, string:verifier) ; empty verifier for 1.0-response
+     * @return string[] empty verifier for 1.0-response
      */
     public function authorize($requestTokenKey, $data)
     {
@@ -73,6 +78,7 @@ public function authorize($requestTokenKey, $data)
         return [$url, $verifier];
     }
 
+
     /**
      * Perform lookup whether a given token exists in the list of authorized tokens; if a verifier is
      * passed as well, the verifier *must* match the verifier that was registered with the token<br/>
@@ -87,6 +93,12 @@ public function isAuthorized($requestToken, $verifier = '')
         return $this->store->exists('authorized', $requestToken, $verifier);
     }
 
+
+    /**
+     * @param string $token
+     * @param string $verifier
+     * @return mixed
+     */
     public function getAuthorizedData($token, $verifier = '')
     {
         \SimpleSAML\Logger::info('OAuth getAuthorizedData('.$token.')');
@@ -94,6 +106,13 @@ public function getAuthorizedData($token, $verifier = '')
         return $data['value'];
     }
 
+
+    /**
+     * @param string $requestToken
+     * @param string $verifier
+     * @param string $accessTokenKey
+     * @return void
+     */
     public function moveAuthorizedData($requestToken, $verifier, $accessTokenKey)
     {
         \SimpleSAML\Logger::info('OAuth moveAuthorizedData('.$requestToken.', '.$accessTokenKey.')');
@@ -109,6 +128,10 @@ public function moveAuthorizedData($requestToken, $verifier, $accessTokenKey)
         $this->store->set('authorized', $accessTokenKey, '', $authorizedData, $this->config->getValue('accessTokenDuration', 86400)); //60*60*24=86400
     }
 
+    /**
+     * @param string $consumer_key
+     * @return \OAuthConsumer|null
+     */
     public function lookup_consumer($consumer_key)
     {
         \SimpleSAML\Logger::info('OAuth lookup_consumer('.$consumer_key.')');
@@ -129,6 +152,14 @@ public function lookup_consumer($consumer_key)
         }
     }
 
+
+    /**
+     * @param \OAuthConsumer $consumer
+     * @param string $tokenType
+     * @param string $token
+     * @return string
+     * @throws \Exception
+     */
     public function lookup_token($consumer, $tokenType = 'default', $token)
     {
         \SimpleSAML\Logger::info('OAuth lookup_token('.$consumer->key.', '.$tokenType.','.$token.')');
@@ -139,9 +170,17 @@ public function lookup_token($consumer, $tokenType = 'default', $token)
         return $data['value'];
     }
 
+
+    /**
+     * @param \OAuthConsumer $consumer
+     * @param string|null $token
+     * @param string $nonce
+     * @param int $timestamp
+     * @return bool
+     */
     public function lookup_nonce($consumer, $token, $nonce, $timestamp)
     {
-        \SimpleSAML\Logger::info('OAuth lookup_nonce('.$consumer.', '.$token.','.$nonce.')');
+        \SimpleSAML\Logger::info('OAuth lookup_nonce('.$consumer.', '.strval($token).','.$nonce.')');
         if ($this->store->exists('nonce', $nonce, $consumer->key)) {
             return true;
         }
@@ -149,6 +188,13 @@ public function lookup_nonce($consumer, $token, $nonce, $timestamp)
         return false;
     }
 
+
+    /**
+     * @param \OAuthConsumer $consumer
+     * @param callable|null $callback
+     * @param string|null $version
+     * @return \OAuthToken
+     */
     public function new_request_token($consumer, $callback = null, $version = null)
     {
         \SimpleSAML\Logger::info('OAuth new_request_token('.$consumer.')');
@@ -175,6 +221,13 @@ public function new_request_token($consumer, $callback = null, $version = null)
         return $token;
     }
 
+
+    /**
+     * @param string $requestToken
+     * @param \OAuthConsumer $consumer
+     * @param string|null $verifier
+     * @return \OAuthToken
+     */
     public function new_access_token($requestToken, $consumer, $verifier = null)
     {
         \SimpleSAML\Logger::info('OAuth new_access_token('.$requestToken.','.$consumer.')');
@@ -189,6 +242,7 @@ public function new_access_token($requestToken, $consumer, $verifier = null)
         return $accesstoken;
     }
 
+
     /**
      * Return OAuthConsumer-instance that a given requestToken was issued to
      * @param string $requestTokenKey
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Registry.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Registry.php
index 0939be6f41..73e83c70e6 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Registry.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/lib/Registry.php
@@ -8,9 +8,14 @@
  * @author Andreas Åkre Solberg <andreas@uninett.no>, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class Registry
 {
+    /**
+     * @param array $entry
+     * @param string $userid
+     * @return void
+     * @throws \Exception
+     */
     public static function requireOwnership($entry, $userid)
     {
         if (!isset($entry['owner'])) {
@@ -22,6 +27,13 @@ public static function requireOwnership($entry, $userid)
         }
     }
 
+
+    /**
+     * @param array $request
+     * @param array &$entry
+     * @param string $key
+     * @return void
+     */
     protected function getStandardField($request, &$entry, $key)
     {
         if (array_key_exists('field_'.$key, $request)) {
@@ -31,6 +43,13 @@ protected function getStandardField($request, &$entry, $key)
         }
     }
 
+
+    /**
+     * @param array $request
+     * @param array $entry
+     * @param array|null $override
+     * @return array
+     */
     public function formToMeta($request, $entry = [], $override = null)
     {
         $this->getStandardField($request, $entry, 'name');
@@ -48,6 +67,13 @@ public function formToMeta($request, $entry = [], $override = null)
         return $entry;
     }
 
+
+    /**
+     * @param array $request
+     * @param string $key
+     * @return void
+     * @throws \Exception
+     */
     protected function requireStandardField($request, $key)
     {
         if (!array_key_exists('field_'.$key, $request)) {
@@ -58,6 +84,11 @@ protected function requireStandardField($request, $key)
         }
     }
 
+
+    /**
+     * @param array $request
+     * @return void
+     */
     public function checkForm($request)
     {
         $this->requireStandardField($request, 'name');
@@ -65,11 +96,23 @@ public function checkForm($request)
         $this->requireStandardField($request, 'key');
     }
 
+
+    /**
+     * @param string $name
+     * @return string
+     */
     protected function header($name)
     {
         return '<tr><td>&nbsp;</td><td class="header">'.$name.'</td></tr>';
     }
 
+
+    /**
+     * @param array $metadata
+     * @param string $key
+     * @param string $name
+     * @return string
+     */
     protected function readonlyDateField($metadata, $key, $name)
     {
         $value = '<span style="color: #aaa">Not set</a>';
@@ -79,6 +122,13 @@ protected function readonlyDateField($metadata, $key, $name)
         return '<tr><td class="name">'.$name.'</td><td class="data">'.$value.'</td></tr>';
     }
 
+
+    /**
+     * @param array $metadata
+     * @param string $key
+     * @param string $name
+     * @return string
+     */
     protected function readonlyField($metadata, $key, $name)
     {
         $value = '';
@@ -88,11 +138,23 @@ protected function readonlyField($metadata, $key, $name)
         return '<tr><td class="name">'.$name.'</td><td class="data">'.htmlspecialchars($value).'</td></tr>';
     }
 
+
+    /**
+     * @param string $key
+     * @param string $value
+     * @return string
+     */
     protected function hiddenField($key, $value)
     {
         return '<input type="hidden" name="'.$key.'" value="'.htmlspecialchars($value).'" />';
     }
 
+
+    /**
+     * @param array &$metadata
+     * @param string $key
+     * @return void
+     */
     protected function flattenLanguageField(&$metadata, $key)
     {
         if (array_key_exists($key, $metadata)) {
@@ -106,6 +168,14 @@ protected function flattenLanguageField(&$metadata, $key)
         }
     }
 
+
+    /**
+     * @param array $metadata
+     * @param string $key
+     * @param string $name
+     * @param bool $textarea
+     * @return string
+     */
     protected function standardField($metadata, $key, $name, $textarea = false)
     {
         $value = '';
@@ -122,6 +192,11 @@ protected function standardField($metadata, $key, $name, $textarea = false)
         }
     }
 
+
+    /**
+     * @param array $metadata
+     * @return string
+     */
     public function metaToForm($metadata)
     {
         return '<form action="registry.edit.php" method="post">'.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/libextinc/OAuth.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/libextinc/OAuth.php
index c8811d6ce1..f9f1a015b7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/libextinc/OAuth.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/libextinc/OAuth.php
@@ -21,10 +21,21 @@ class OAuthException extends Exception
 if (!class_exists('OAuthConsumer')) {
     class OAuthConsumer
     {
+        /** @var string */
         public $key;
+
+        /** @var string */
         public $secret;
+
+        /** @var string|null */
         public $callback_url;
 
+
+        /**
+         * @param string $key
+         * @param string $secret
+         * @param string|null $callback_url
+         */
         public function __construct($key, $secret, $callback_url = null)
         {
             $this->key = $key;
@@ -32,6 +43,10 @@ public function __construct($key, $secret, $callback_url = null)
             $this->callback_url = $callback_url;
         }
 
+
+        /**
+         * @return string
+         */
         public function __toString()
         {
             return "OAuthConsumer[key=$this->key,secret=$this->secret]";
@@ -42,12 +57,19 @@ public function __toString()
 class OAuthToken
 {
     // access tokens and request tokens
+    /** @var string */
     public $key;
+
+    /** @var string */
     public $secret;
 
+    /** @var callable|null */
+    public $callback = null;
+
+
     /**
-     * key = the token
-     * secret = the token secret
+     * @param string $key = the token
+     * @param string $secret = the token secret
      */
     public function __construct($key, $secret)
     {
@@ -55,19 +77,27 @@ public function __construct($key, $secret)
         $this->secret = $secret;
     }
 
+
     /**
      * generates the basic string serialization of a token that a server
      * would respond to request_token and access_token calls with
+     * @return string
      */
     public function to_string()
     {
-        return "oauth_token=".
-        OAuthUtil::urlencode_rfc3986($this->key).
-        "&oauth_token_secret=".
-        OAuthUtil::urlencode_rfc3986($this->secret).
+        /** @var string $key */
+        $key = OAuthUtil::urlencode_rfc3986($this->key);
+        /** @var string $secret */
+        $secret = OAuthUtil::urlencode_rfc3986($this->secret);
+        return "oauth_token=".$key.
+        "&oauth_token_secret=".$secret.
         "&oauth_callback_confirmed=true";
     }
 
+
+    /**
+     * @return string
+     */
     public function __toString()
     {
         return $this->to_string();
@@ -93,7 +123,7 @@ abstract public function get_name();
      * request is serialized
      * @param OAuthRequest $request
      * @param OAuthConsumer $consumer
-     * @param OAuthToken $token
+     * @param OAuthToken $token|null
      * @return string
      */
     abstract public function build_signature($request, $consumer, $token);
@@ -122,7 +152,7 @@ public function check_signature($request, $consumer, $token, $signature)
         // Avoid a timing leak with a (hopefully) time insensitive compare
         $result = 0;
         for ($i = 0; $i < strlen($signature); $i++) {
-            $result |= ord($built{$i}) ^ ord($signature{$i});
+            $result |= ord($built[$i]) ^ ord($signature[$i]);
         }
 
         return $result == 0;
@@ -138,11 +168,21 @@ public function check_signature($request, $consumer, $token, $signature)
  */
 class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod
 {
+    /**
+     * @return string
+     */
     public function get_name()
     {
         return "HMAC-SHA1";
     }
 
+
+    /**
+     * @param OAuthRequest $request
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken $token|null
+     * @return string
+     */
     public function build_signature($request, $consumer, $token)
     {
         $base_string = $request->get_signature_base_string();
@@ -153,6 +193,7 @@ public function build_signature($request, $consumer, $token)
             ($token) ? $token->secret : ""
         ];
 
+        /** @var array $key_parts */
         $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
         $key = implode('&', $key_parts);
 
@@ -167,6 +208,9 @@ public function build_signature($request, $consumer, $token)
  */
 class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod
 {
+    /**
+     * @return string
+     */
     public function get_name()
     {
         return "PLAINTEXT";
@@ -180,6 +224,11 @@ public function get_name()
      *
      * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
      * OAuthRequest handles this!
+     *
+     * @param OAuthRequest $request
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken|null $token
+     * @return string
      */
     public function build_signature($request, $consumer, $token)
     {
@@ -188,6 +237,7 @@ public function build_signature($request, $consumer, $token)
             ($token) ? $token->secret : ""
         ];
 
+        /** @var array $key_parts */
         $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
         $key = implode('&', $key_parts);
         $request->base_string = $key;
@@ -206,25 +256,45 @@ public function build_signature($request, $consumer, $token)
  */
 abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod
 {
+    /**
+     * @return string
+     */
     public function get_name()
     {
         return "RSA-SHA1";
     }
 
-    // Up to the SP to implement this lookup of keys. Possible ideas are:
-    // (1) do a lookup in a table of trusted certs keyed off of consumer
-    // (2) fetch via http using a url provided by the requester
-    // (3) some sort of specific discovery code based on request
-    //
-    // Either way should return a string representation of the certificate
+
+    /**
+     * Up to the SP to implement this lookup of keys. Possible ideas are:
+     * (1) do a lookup in a table of trusted certs keyed off of consumer
+     * (2) fetch via http using a url provided by the requester
+     * (3) some sort of specific discovery code based on request
+     *
+     * Either way should return a string representation of the certificate
+     *
+     * @param OAuthRequest &$request
+     */
     abstract protected function fetch_public_cert(&$request);
 
-    // Up to the SP to implement this lookup of keys. Possible ideas are:
-    // (1) do a lookup in a table of trusted certs keyed off of consumer
-    //
-    // Either way should return a string representation of the certificate
+
+    /**
+     * Up to the SP to implement this lookup of keys. Possible ideas are:
+     * (1) do a lookup in a table of trusted certs keyed off of consumer
+     *
+     * Either way should return a string representation of the certificate
+     *
+     * @param OAuthRequest &$request
+     */
     abstract protected function fetch_private_cert(&$request);
 
+
+    /**
+     * @param OAuthRequest $request
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken $token
+     * @return string
+     */
     public function build_signature($request, $consumer, $token)
     {
         $base_string = $request->get_signature_base_string();
@@ -245,6 +315,14 @@ public function build_signature($request, $consumer, $token)
         return base64_encode($signature);
     }
 
+
+    /**
+     * @param OAuthRequest $request
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken $token
+     * @param string $signature
+     * @return bool
+     */
     public function check_signature($request, $consumer, $token, $signature)
     {
         $decoded_sig = base64_decode($signature);
@@ -269,14 +347,32 @@ public function check_signature($request, $consumer, $token, $signature)
 
 class OAuthRequest
 {
+    /** @var array */
     protected $parameters;
+
+    /** @var string */
     protected $http_method;
+
+    /** @var string */
     protected $http_url;
+
     // for debug purposes
-    public $base_string;
+    /** @var string|null */
+    public $base_string = null;
+
+    /** @var string */
     public static $version = '1.0';
+
+    /** @var string */
     public static $POST_INPUT = 'php://input';
 
+
+    /**
+     * @param string $http_method
+     * @param string $http_url
+     * @param array|null $parameters
+     * @return void
+     */
     public function __construct($http_method, $http_url, $parameters = null)
     {
         $parameters = ($parameters) ? $parameters : [];
@@ -289,6 +385,11 @@ public function __construct($http_method, $http_url, $parameters = null)
 
     /**
      * attempt to build up a request from what was passed to the server
+     *
+     * @param string|null $http_method
+     * @param string|null $http_url
+     * @param array|null $parameters
+     * @return OAuthRequest
      */
     public static function from_request($http_method = null, $http_url = null, $parameters = null)
     {
@@ -340,8 +441,16 @@ public static function from_request($http_method = null, $http_url = null, $para
         return new OAuthRequest($http_method, $http_url, $parameters);
     }
 
+
     /**
      * pretty much a helper function to set up the request
+     *
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken|null $token
+     * @param string $http_method
+     * @param string $http_url
+     * @param array|null $parameters
+     * @return OAuthRequest
      */
     public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters = null)
     {
@@ -359,6 +468,13 @@ public static function from_consumer_and_token($consumer, $token, $http_method,
         return new OAuthRequest($http_method, $http_url, $parameters);
     }
 
+
+    /**
+     * @param string $name
+     * @param string $value
+     * @param bool $allow_duplicates
+     * @return void
+     */
     public function set_parameter($name, $value, $allow_duplicates = true)
     {
         if ($allow_duplicates && isset($this->parameters[$name])) {
@@ -375,21 +491,36 @@ public function set_parameter($name, $value, $allow_duplicates = true)
         }
     }
 
+
+    /**
+     * @param string $name
+     * @return mixed|null
+     */
     public function get_parameter($name)
     {
         return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
     }
 
+
+    /**
+     * @return array|null
+     */
     public function get_parameters()
     {
         return $this->parameters;
     }
 
+
+    /**
+     * @param string $name
+     * @return void
+     */
     public function unset_parameter($name)
     {
         unset($this->parameters[$name]);
     }
 
+
     /**
      * The request parameters, sorted and concatenated into a normalized string.
      * @return string
@@ -408,12 +539,14 @@ public function get_signable_parameters()
         return OAuthUtil::build_http_query($params);
     }
 
+
     /**
      * Returns the base string of this request
      *
      * The base string defined as the method, the url
      * and the parameters (normalized), each urlencoded
      * and the concated with &.
+     * @return string
      */
     public function get_signature_base_string()
     {
@@ -423,22 +556,27 @@ public function get_signature_base_string()
             $this->get_signable_parameters()
         ];
 
+        /** @var array $parts */
         $parts = OAuthUtil::urlencode_rfc3986($parts);
 
         return implode('&', $parts);
     }
 
+
     /**
      * just uppercases the http method
+     * @return string
      */
     public function get_normalized_http_method()
     {
         return strtoupper($this->http_method);
     }
 
+
     /**
      * parses the url and rebuilds it to be
      * scheme://host/path
+     * @return string
      */
     public function get_normalized_http_url()
     {
@@ -456,8 +594,10 @@ public function get_normalized_http_url()
         return "$scheme://$host$path";
     }
 
+
     /**
      * builds a url usable for a GET request
+     * @return string
      */
     public function to_url()
     {
@@ -469,22 +609,30 @@ public function to_url()
         return $out;
     }
 
+
     /**
      * builds the data one would send in a POST request
+     * @return string
      */
     public function to_postdata()
     {
         return OAuthUtil::build_http_query($this->parameters);
     }
 
+
     /**
      * builds the Authorization: header
+     *
+     * @param string|null $realm
+     * @return string
      */
     public function to_header($realm = null)
     {
         $first = true;
-        if ($realm) {
-            $out = 'Authorization: OAuth realm="'.OAuthUtil::urlencode_rfc3986($realm).'"';
+        if (!is_null($realm)) {
+            /** @var string $realm */
+            $realm = OAuthUtil::urlencode_rfc3986($realm);
+            $out = 'Authorization: OAuth realm="'.$realm.'"';
             $first = false;
         } else {
             $out = 'Authorization: OAuth';
@@ -498,21 +646,32 @@ public function to_header($realm = null)
                 throw new OAuthException('Arrays not supported in headers');
             }
             $out .= ($first) ? ' ' : ',';
-            $out .= OAuthUtil::urlencode_rfc3986($k).
-                '="'.
-                OAuthUtil::urlencode_rfc3986($v).
-                '"';
+            /** @var string $key */
+            $key = OAuthUtil::urlencode_rfc3986($k);
+            /** @var string $value */
+            $value = OAuthUtil::urlencode_rfc3986($v);
+            $out .= $key.'="'.$value.'"';
             $first = false;
         }
         return $out;
     }
 
+
+    /**
+     * @return string
+     */
     public function __toString()
     {
         return $this->to_url();
     }
 
 
+    /**
+     * @param OAuthSignatureMethod $signature_method
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken|null $token
+     * @return void
+     */
     public function sign_request($signature_method, $consumer, $token)
     {
         $this->set_parameter(
@@ -524,22 +683,33 @@ public function sign_request($signature_method, $consumer, $token)
         $this->set_parameter("oauth_signature", $signature, false);
     }
 
+
+    /**
+     * @param OAuthSignatureMethod $signature_method
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken|null $token
+     * @return string
+     */
     public function build_signature($signature_method, $consumer, $token)
     {
         $signature = $signature_method->build_signature($this, $consumer, $token);
         return $signature;
     }
 
+
     /**
      * util function: current timestamp
+     * @return int
      */
     private static function generate_timestamp()
     {
         return time();
     }
 
+
     /**
      * util function: current nonce
+     * @return string
      */
     private static function generate_nonce()
     {
@@ -552,28 +722,48 @@ private static function generate_nonce()
 
 class OAuthServer
 {
+    /** @var int */
     protected $timestamp_threshold = 300; // in seconds, five minutes
+
+    /** @var string */
     protected $version = '1.0'; // hi blaine
+
+    /** @var array */
     protected $signature_methods = [];
 
+    /** @var OAuthDataStore */
     protected $data_store;
 
+
+    /**
+     * @param OAuthDataStore $data_store
+     */
     public function __construct($data_store)
     {
         $this->data_store = $data_store;
     }
 
+
+    /**
+     * @param OAuthSignatureMethod $signature_method
+     * @return void
+     */
     public function add_signature_method($signature_method)
     {
         $this->signature_methods[$signature_method->get_name()] =
             $signature_method;
     }
 
+
     // high level functions
 
+
     /**
      * process a request_token request
      * returns the request token on success
+     *
+     * @param OAuthRequest &$request
+     * @return OAuthToken
      */
     public function fetch_request_token(&$request)
     {
@@ -593,9 +783,13 @@ public function fetch_request_token(&$request)
         return $new_token;
     }
 
+
     /**
      * process an access_token request
      * returns the access token on success
+     *
+     * @param OAuthRequest &$request
+     * @return OAuthToken
      */
     public function fetch_access_token(&$request)
     {
@@ -615,8 +809,12 @@ public function fetch_access_token(&$request)
         return $new_token;
     }
 
+
     /**
      * verify an api call, checks all the parameters
+     *
+     * @param OAuthRequest &$request
+     * @return array
      */
     public function verify_request(&$request)
     {
@@ -627,9 +825,15 @@ public function verify_request(&$request)
         return [$consumer, $token];
     }
 
+
     // Internals from here
+
+
     /**
      * version 1
+     *
+     * @param OAuthRequest &$request
+     * @return string
      */
     private function getVersion(&$request)
     {
@@ -645,14 +849,16 @@ private function getVersion(&$request)
         return $version;
     }
 
+
     /**
      * figure out the signature with some defaults
+     *
+     * @param OAuthRequest $request
+     * @return string
      */
-    private function getSignatureMethod($request)
+    private function getSignatureMethod(OAuthRequest $request)
     {
-        $signature_method = $request instanceof OAuthRequest
-            ? $request->get_parameter("oauth_signature_method")
-            : null;
+        $signature_method = $request->get_parameter("oauth_signature_method");
 
         if (!$signature_method) {
             // According to chapter 7 ("Accessing Protected Ressources") the signature-method
@@ -670,14 +876,16 @@ private function getSignatureMethod($request)
         return $this->signature_methods[$signature_method];
     }
 
+
     /**
      * try to find the consumer for the provided request's consumer key
+     *
+     * @param OAuthRequest $request
+     * @return OAuthConsumer
      */
-    private function getConsumer($request)
+    private function getConsumer(OAuthRequest $request)
     {
-        $consumer_key = $request instanceof OAuthRequest
-            ? $request->get_parameter("oauth_consumer_key")
-            : null;
+        $consumer_key = $request->get_parameter("oauth_consumer_key");
 
         if (!$consumer_key) {
             throw new OAuthException("Invalid consumer key");
@@ -691,14 +899,19 @@ private function getConsumer($request)
         return $consumer;
     }
 
+
     /**
      * try to find the token for the provided request's token key
+     *
+     * @param OAuthRequest $request
+     * @param OAuthConsumer $consumer
+     * @param string $token_type
+     * @return OAuthToken
+     * @throws OAuthException
      */
-    private function getToken($request, $consumer, $token_type = "access")
+    private function getToken(OAuthRequest $request, OAuthConsumer $consumer, $token_type = "access")
     {
-        $token_field = $request instanceof OAuthRequest
-            ? $request->get_parameter('oauth_token')
-            : null;
+        $token_field = $request->get_parameter('oauth_token');
 
         if (!empty($token_field)) {
             $token = $this->data_store->lookup_token($consumer, $token_type, $token_field);
@@ -711,27 +924,32 @@ private function getToken($request, $consumer, $token_type = "access")
         return $token;
     }
 
+
     /**
      * all-in-one function to check the signature on a request
      * should guess the signature method appropriately
+     *
+     * @param OAuthRequest $request
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken $token|null
+     * @return void
+     * @throws OAuthException
      */
-    private function checkSignature($request, $consumer, $token)
+    private function checkSignature(OAuthRequest $request, OAuthConsumer $consumer, OAuthToken $token = null)
     {
         // this should probably be in a different method
-        $timestamp = $request instanceof OAuthRequest
-            ? $request->get_parameter('oauth_timestamp')
-            : null;
-        $nonce = $request instanceof OAuthRequest
-            ? $request->get_parameter('oauth_nonce')
-            : null;
+        $timestamp = $request->get_parameter('oauth_timestamp');
+        $nonce = $request->get_parameter('oauth_nonce');
 
         $this->checkTimestamp($timestamp);
         $this->checkNonce($consumer, $token, $nonce, $timestamp);
 
-        $signature_method = $this->getSignatureMethod($request);
+        $signature_method = 'OAuthSignatureMethod_'.$this->getSignatureMethod($request);
+        /** @psalm-suppress InvalidStringClass */
+        $method = new $signature_method;
 
         $signature = $request->get_parameter('oauth_signature');
-        $valid_sig = $signature_method->checkSignature(
+        $valid_sig = $method->checkSignature(
             $request,
             $consumer,
             $token,
@@ -743,8 +961,13 @@ private function checkSignature($request, $consumer, $token)
         }
     }
 
+
     /**
      * check that the timestamp is new enough
+     *
+     * @param int|null $timestamp
+     * @return void
+     * @throws OAuthException
      */
     private function checkTimestamp($timestamp)
     {
@@ -763,8 +986,16 @@ private function checkTimestamp($timestamp)
         }
     }
 
+
     /**
      * check that the nonce is not repeated
+     *
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken|null $token
+     * @param string $nonce
+     * @param int $timestamp
+     * @return void
+     * @throws OAuthException
      */
     private function checkNonce($consumer, $token, $nonce, $timestamp)
     {
@@ -787,39 +1018,52 @@ private function checkNonce($consumer, $token, $nonce, $timestamp)
     }
 }
 
-class OAuthDataStore
+abstract class OAuthDataStore
 {
-    public function lookup_consumer($consumer_key)
-    {
-        // implement me
-    }
+    /**
+     * @param string $consumer_key
+     */
+    abstract public function lookup_consumer($consumer_key);
 
-    public function lookup_token($consumer, $token_type, $token)
-    {
-        // implement me
-    }
 
-    public function lookup_nonce($consumer, $token, $nonce, $timestamp)
-    {
-        // implement me
-    }
+    /**
+     * @param OAuthConsumer $consumer
+     * @param string $token_type
+     * @param string $token
+     */
+    abstract public function lookup_token($consumer, $token_type, $token);
 
-    public function new_request_token($consumer, $callback = null)
-    {
-        // return a new token attached to this consumer
-    }
 
-    public function new_access_token($token, $consumer, $verifier = null)
-    {
-        // return a new access token attached to this consumer
-        // for the user associated with this token if the request token
-        // is authorized
-        // should also invalidate the request token
-    }
+    /**
+     * @param OAuthConsumer $consumer
+     * @param OAuthToken|null $token
+     * @param string $nonce
+     * @param int $timestamp
+     */
+    abstract public function lookup_nonce($consumer, $token, $nonce, $timestamp);
+
+
+    /**
+     * @param OAuthConsumer $consumer
+     * @param callable|null $callback
+     */
+    abstract public function new_request_token($consumer, $callback = null);
+
+
+    /**
+     * @param OAuthToken $token
+     * @param OAuthConsumer $consumer
+     * @param string|null $verifier
+     */
+    abstract public function new_access_token($token, $consumer, $verifier = null);
 }
 
 class OAuthUtil
 {
+    /**
+     * @param mixed $input
+     * @return string|array
+     */
     public static function urlencode_rfc3986($input)
     {
         if (is_array($input)) {
@@ -828,7 +1072,7 @@ public static function urlencode_rfc3986($input)
             return str_replace(
                 '+',
                 ' ',
-                str_replace('%7E', '~', rawurlencode($input))
+                str_replace('%7E', '~', rawurlencode(strval($input)))
             );
         } else {
             return '';
@@ -836,19 +1080,31 @@ public static function urlencode_rfc3986($input)
     }
 
 
-    // This decode function isn't taking into consideration the above
-    // modifications to the encoding process. However, this method doesn't
-    // seem to be used anywhere so leaving it as is.
+    /**
+     * This decode function isn't taking into consideration the above
+     * modifications to the encoding process. However, this method doesn't
+     * seem to be used anywhere so leaving it as is.
+     *
+     * @param string $string
+     * @return string
+     */
     public static function urldecode_rfc3986($string)
     {
         return urldecode($string);
     }
 
-    // Utility function for turning the Authorization: header into
-    // parameters, has to do some unescaping
-    // Can filter out any non-oauth parameters if needed (default behaviour)
-    // May 28th, 2010 - method updated to tjerk.meesters for a speed improvement.
-    //                  see http://code.google.com/p/oauth/issues/detail?id=163
+
+    /**
+     * Utility function for turning the Authorization: header into
+     * parameters, has to do some unescaping
+     * Can filter out any non-oauth parameters if needed (default behaviour)
+     * May 28th, 2010 - method updated to tjerk.meesters for a speed improvement.
+     *                  see http://code.google.com/p/oauth/issues/detail?id=163
+     *
+     * @param string $header
+     * @param bool $only_allow_oauth_parameters
+     * @return array
+     */
     public static function split_header($header, $only_allow_oauth_parameters = true)
     {
         $params = [];
@@ -867,7 +1123,12 @@ public static function split_header($header, $only_allow_oauth_parameters = true
         return $params;
     }
 
-    // helper to try to sort out headers for people who aren't running apache
+
+    /**
+     * helper to try to sort out headers for people who aren't running apache
+     *
+     * @return array
+     */
     public static function get_headers()
     {
         if (function_exists('apache_request_headers')) {
@@ -920,12 +1181,18 @@ public static function get_headers()
         return $out;
     }
 
-    // This function takes a input like a=b&a=c&d=e and returns the parsed
-    // parameters like this
-    // array('a' => array('b','c'), 'd' => 'e')
+
+    /**
+     * This function takes a input like a=b&a=c&d=e and returns the parsed
+     * parameters like this
+     * array('a' => array('b','c'), 'd' => 'e')
+     *
+     * @param string $input
+     * @return array
+     */
     public static function parse_parameters($input)
     {
-        if (!isset($input) || !$input) {
+        if (!strlen($input)) {
             return [];
         }
 
@@ -955,6 +1222,11 @@ public static function parse_parameters($input)
         return $parsed_parameters;
     }
 
+
+    /**
+     * @param array $params
+     * @return string
+     */
     public static function build_http_query($params)
     {
         if (!$params) {
@@ -962,7 +1234,9 @@ public static function build_http_query($params)
         }
 
         // Urlencode both keys and values
+        /** @var array $keys */
         $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
+        /** @var array $values */
         $values = OAuthUtil::urlencode_rfc3986(array_values($params));
         $params = array_combine($keys, $values);
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/oauth/phpunit.xml
new file mode 100644
index 0000000000..16ca579962
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/phpunit.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/oauth/psalm.xml
new file mode 100644
index 0000000000..f7448164cc
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/psalm.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Monitor"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-template" />
+        <directory name="hooks" />
+        <directory name="lib" />
+        <directory name="libextinc" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.tpl.php
index b43c40d39c..32bfddea9c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.tpl.php
@@ -1,13 +1,19 @@
 <?php
 
-$this->data['jquery'] = ['core' => true, 'ui' => true, 'css' => true];
 $this->data['head'] = '<link rel="stylesheet" type="text/css" href="/'.
     $this->data['baseurlpath'].'module.php/oauth/assets/css/oauth.css" />'."\n";
+$this->data['head'] = '<link rel="stylesheet" type="text/css" href="/'.
+    $this->data['baseurlpath'].'module.php/oauth/assets/css/uitheme1.12.1/jquery-ui.min.css" />'."\n";
 $this->data['head'] .= '<script type="text/javascript" src="/'.
     $this->data['baseurlpath'].'module.php/oauth/assets/js/oauth.js"></script>';
 
 $this->includeAtTemplateBase('includes/header.php');
 
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/jquery-1.12.4.min.js').'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL('discopower/assets/js/jquery-ui-1.12.1.min.js').'"></script>'."\n";
+
 echo '<h1>OAuth Client</h1>';
 
 echo $this->data['form'];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.twig b/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.twig
index ad9345d731..4476edd116 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.edit.twig
@@ -2,11 +2,13 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-    <link href="{{ baseurlpath }}assets/css/oauth.css" rel="stylesheet">
+    <link rel="stylesheet" media="screen" href="/{{ baseurlpath }}module.php/oauth/assets/css/uitheme1.12.1/jquery-ui.min.css">
+    <link href="/{{ baseurlpath }}module.php/oauth/assets/css/oauth.css" rel="stylesheet">
 {% endblock %}
 
 {% block postload %}
-    <script src="{{ baseurlpath}}assets/js/oauth.js"></script>
+    <script src="/{{ baseurlpath }}module.php/oauth/assets/js/jquery-ui-1.12.1.min.js"></script>
+    <script src="/{{ baseurlpath }}module.php/oauth/assets/js/oauth.js"></script>
 {% endblock %}
 
 {% block content %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.list.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.list.php
index 1c3b287fb6..1bfdfdec52 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.list.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/templates/registry.list.php
@@ -1,5 +1,4 @@
 <?php
-$this->data['jquery'] = ['core' => true, 'ui' => true, 'css' => true];
 $this->data['head'] = '<link rel="stylesheet" type="text/css" href="/'.
     $this->data['baseurlpath'].'module.php/oauth/assets/oauth.css" />'."\n";
 $this->includeAtTemplateBase('includes/header.php');
@@ -18,7 +17,7 @@
     echo '<tr class="'.$rows[$i % 2].'"><td>'.
         htmlspecialchars($entry['name']).'</td>	<td><code>'.htmlspecialchars($entry['key']).
         '</code></td><td><a href="registry.edit.php?editkey='.urlencode($entry['key']).
-        '">edit</a><a href="registry.php?delete='.urlencode($entry['key']).'">delete</a></td></tr>';
+        '">edit</a>&nbsp;&nbsp;<a href="registry.php?delete='.urlencode($entry['key']).'">delete</a></td></tr>';
 }
 if ($i == 0) {
     echo'<tr><td colspan="3">No entries registered</td></tr>';
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/tests/bootstrap.php
new file mode 100644
index 0000000000..9f8cb3bde8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/oauth';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 0000000000..1f851db2c9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
@@ -0,0 +1,5 @@
+�PNG
+
+���
IHDR�����������A����bKGD������	X�����	pHYs���H���H�F�k>����IDATH���!
+A���bl����A1{�V�Y0i��x��x�v����D�K_��O��9��a�Ք��}��^�JaȌ�0b�vBA�$,�Q���"_44���=�Sqc�yE��I�W
+<kA����i�0��<a$S��y.���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000000..a82e07c128
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR����������G#7v���bKGD�݊����	pHYs���H���H�F�k>���IDAT(�ch`��p���h��4�i���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 0000000000..f323d2943e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������������D���bKGD���1����	pHYs���H���H�F�k>���HIDAT8�cx��a�"��[�n{1�qc��po"��?3}`xR���1�s?��^^bxu��u)�뉣h���W�%R�|���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000000..8adf417e90
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������������D���bKGD���1����	pHYs���H���H�F�k>���HIDAT8�cx��0�F�ѳgύ��ax1��e&ë8��!obަ2��fx�����#3�ǵ��>��QD��@�$�.5o���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000000..3f88c6b520
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR�����������A����bKGD������	X�����	pHYs���H���H�F�k>����IDATH��ϱ
a�����\!V��J#X����ЋD}�
.f�>���>��P�կx���x����q��жuɚq���f+��6���[��\�‡����כW�T4r���6:]V:�,
(�Ŵ�8�yG-(d��	H���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 0000000000..d022fb79b5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������d����2������bKGD���1����	pHYs���H���H�F�k>���ZIDAT�cx|��Nhã����2<hc�_�p/��n,�
�[_n�g���p=����w2\je�X�pa��&�s��b8��p���"�����Y{���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000000..e723e17cb5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
@@ -0,0 +1,32 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD�"�b����	pHYs���H���H�F�k>��'IDATx��{he�}�?g����{��1)�����]K&qq�U�4kbiK�R(H��B��P(I�vJ�_��ӮIV�@nB�5i�N��iG�jq�&
~A#Q����rX'����9�:�ܫ{�3�E{�=�y�o~3g~��Mp�&����1Xxh8<�#dlЅ�Mx1�&��$�5~��V��	��c�$��ױ���,����	��ƹ�i���N:�Z
��ߊY���>�"�B���H!�������-C�u�8t�}����8�!�B��	*�OF�.[�aͲ��l��B&���1h�>��M]hN���4MAb���̐!(�hE�1�5jձcO�<6�e7��,e���S(��f�o�16+3�y
+JR|{�^3�^����{�88������~'����pxh8<4���
�g����������2��n6e̘�����{�����Q�����pӀ��P�A��iۺߖ�f�S����(�D��'�L�6=����T:s���f�q��羀l��.c�I
+���ǧ�=�i���M�>��ڠLN{U��&������&��{u��o�����.�.��4~#����pxh8<4���
�g��Û��p���^i����/�0���TW�c����Q��� �@)��y��u}`L��Uc���%T��������ȥ
+�A��R��@�?��P�-`����BKl�
b����Z}�������Ш��͢uJ��%U�]�K2��e
ts�Y���@,e�e���豅r��jcܭs��M�n�0
A���mP��y
�D�K(5�,�lN�&b�D�m�rwYDV����t�e$��謷�
�L���[��C��0O��	P��&��0����+��;�
�g���3@������pxh8<4����Y��`��O����F�Z<��h�\J!c��`����j
�;TK�Vr�0��ʹqc�cGz�䟾c�[ ̕P5�t�h�)���ti���З߭ty��׎�����&��M/Е����S���u����@��݅���n���b�9��`y�9�󉡔�Ya�SX�0e���q�J`nB���g����b�����3���4P�- k�**�@HC�z(}�򯂬�U����cj2��=��Ob�����3�
����R��05���1U�\8SMi�U��}���΀�l�Hl�N�
���J��q+%e��7s���"�<։�ּ�z����M�L�T��ƾP��1f�1i��Ѹ��Vp������pxh8<4�z�A��+ o`�I_�R�����~�~��f��սh`�Ic�K�h����Q�p��xx`=�j�`]|S�B�(������(��v���F3�4v�؁6��T��4
���5����:���*��-D#�n6��a��J<U���~�y(�1��(,�|t�z�}��d��j��0u]PT��-D}@�����
+�n�+[�Ύ� A�B�T���(V� K������BT<𑹗[F{�m��=��-�ڤ����$��.��JR�U
j��:X��e�n�e���bՅ��"C	��e2�@�Ј�݂�	�Ѱ���xxh8<4���
��1@kX6I��<��M*�Љ�Ѣ�+�b���04(�.�M3Z�<]&i�UuY�a��^2�w�ͻ�ɨn�U�@�n����E�4
���O�Us�.J���}��dw�Ed�p��� ��me^f���mF
gg������T��G4�Ѱ����m��������N��է��N�c�����������5�L�xi���D��9�|��%ܔ�h�P=�áb����o�p�VBG�X ,�#E��+�\�^��o�ʼdM��ɳ]�d����.�@ 䮚���D���e��FU6'g6��)��52p|��f��X�_a�"z��x���� �w�.c�t�
+��
�g���3@ñ�`"�i��K�9���s
D07�
+ӕS��E�oC�Y�Z�l'N��~_Sƞ��y���a��xK�������z�-&|(�ϜC�K������Xg�d����5Ig��8k8YTL=�,/
+]s��w-~��t�����e��	^�~�&6vh�}�Զ�:g���?m�bG!����1�:O8����]�%��2�����v
+�E�@�5"�6	Y�rXcRb��ݎ���E%���`�#�D��r¤��Z�:�ϛ!�x�R���h�!��}v�۴��ϳ����x�y}FrA1#�*�u�T�?>��!�x#�~��G���k���@3K@�:>P�R�����M�A|��e]K�g�F.B�����t�l��OY d��!(v�V�X��%m�#���I[RR�`2�T��	��H��w�Y�u=���b�YPEc�U%�&@��Ĺ�]��}�q���o7*�G�L�
��e�QX�5�U����-����³��8| ���_�ݟ��5\�5�p�VH^��\
�Fآ��a��a��5�l1�4[��#�b�o�P�1�E��is��wMJ'5�T���06�B|I�,b�����`�ՈP���X�k��B�$�[��-E�OHt�|�3�D�(i��d9�N6@x/ؠm�(�#�wj�P�t��/Z���ob�q%[:���3^�~a��5���5�����|E닃�^�E��$�L�-���_s,
+߫��㕔Ņ�&��
+�_�,�������#F�}����&���.��<4���
�g���O��rdh9�����M7L(5꓂.���?M(�����stզ��-?�:��[ڧC�r�]�'��YB�2�l�C|
l�eXS��pG��0KcI��~�u�L0/��y�Lt�r�I�?�R�%�����-�w�Ƿ�h���$L��J��V���Ϳ�Ӣ,�����g�
x�_7��l��4�*��u�M+�@�x�<}���q>��<�#��`�i�
+:=��*��ۿ�{��)��_��8hs���������p�CWғ�K�`B]H��"}���_P�N���t�Q�l��1Y�Q�h+����&?��x�5:�	֘aY�ҭ���=\��En��������.�Yʸ��J���E%uTj5�����F�'������b;[��v�ט4�u��6]�lkw�3�÷���,: ��%&��
�[|��|��|Yi�q`:�����qXc�2+u|~/�wrz�[j-�I>#���,�9�Q:�#,2�����5@�@%��S@@6ÅJ�{��6��{��)h���W�~q]����t��<�+|�'�0O�a����6���3�U��HW������l;�����'�Z9�Z\�o��O�嵁���e�e�Ƣ[o��da�����rEm&�ʧ�������3m���6��=�g�^S��x
+Hj���mi�(v��ۈ�{.�h�_���%�8��nF�7y{�����O���FS5�:�����/��ա���W�P�H+b�����Gx��/9��I�Yy�.����M�t��T�eە,�ѿ�-�R����e�d��
+��;�Ә:�9k��T�5��m����������E�G��|\Wu����ǣ��@^L���E���
��4���
�g���y��;
+J'U��䐎N׷�<�p2m���ӫ��.Z������Z5<� V
+,��p�3��w�=~�3j��ǿě�#����ʭ�|�S��f�yk��=C�n1]�C�'I_O��*,�J՞�D\\I���}�E�\�$�M�(�E��\�߮�?ƫw
+�����NJ��E�b�6��t�z�:<��u��d��k��vs!��PfM��7dT����3	��*S,�AZl+N����l�R�&{�I��T�G�O�*�M~�;������XFS��j����^�Q���N�n3�Z���0Ne�R�]�3�8��<�$@�˜c.�t�=�.{e��'�TI�s��u����>-?B��p���?���X�J	$�x�QJ�}�!#��Ո2�Ht!VɽV�\'���Y�3�6����6Yu��JOAa�[5e���]p9=7����t���_�y��?�OS���<V��q.��Ի���;�8�~��YE����KSȀ��Xjq@M��
���/�p�X��۴�[�S��c7�'S6	�E� ������_Ձ'�_��)^3�b�h���+Z	��"rLz�ZA��#��[��'�?�Z7{mZl�Ӭ�Q�De+^��o�*D��g��r؈;/�."��HF�Ƴ5��)F	���2�c.�W�~�`����VEl����6�R����8ظ�ky�k�.����`��Fp7pps"�"��KR{(us�[�%6
u�s�ͻ���,BD�����/�ȷ�_Pt?�Y�Vy�.s���Y�3����3������\�V*#��y�f2j��g����A��Ѣ�
+�g�-�5����Fh�-1�9�v��<�s	�����m�� =/�_f�WX�M�&�לi�†RvٗQt��_���"������Q<�(�1[��_~��b"T z3��sxh8��������p�`Z�/�NΧ���F��{�"p�i`��
+�gsO��s�.�G}��t<��9�ug����g�R`���&��X�t�岇�}�	������7����2J�X�e\��	08j=�XJ�Ql�l����x�6z(\5Q��I��=�l
+8�7Ɏ���E�a4�O�;�-��M�1Iy�vV�y^�b�EN��sQ���Cw[
�2	��V�Ǽ�	o�yw�7J����K'�Tu�l�>_�i���T��<͛<�iM
+�p������7�YMW���=�ӡl(����u�+���^j��>3��2N�묳}��j�H��Q
RT�Ȣ�� ���n�fݮ�~�+��c�iQ��<
����Ma=��|�*����
+�$@'��Ԍ��ǕqUO;�5~@��eI�2��9�w��"��O�~��s��s��k{‰��$�m��>����v�z��^2���v�ow�`a������4c��M C�����b�>����q:��o�=�-�p`_2�ng:6K��XV,����2�Ǿ��6���
�g���3@�� ��ś�s�a����R��WWB
+g-N�;F[��Ւa�A��V�L�F�<-m
+VbMC����7���K)�X����P�y�
�s�~��=�����<�ܒ�{�x!�=����Ãq�R��l�]���/���� 0�l)'�}�#�^tX��孋�t�8FC�Y�$)�PUBE�(~��Ҟ��V�2^��*SL�H�l��S��'IA[�������Z���x-V�"ȥ�J�+���\�|�5u�W��nLJ�k��ܟ���(0�0����JyꞄ���a���f��g����6���
�g���3@Ñg���[�}��Z����Q�k?ҳ=��z�I$Т�:�9FW��m�x��:\(�W���+��e���F�9��,��*�!Gh�D��L��8�[v��o�����)�A�a�K�5�S/�)^c����(��W�H�N�W8T�r=op��p]MC�O?���*��
+D΢O��b/�hs�0�ڜb�9�1C�9-����o�ۿ���ԗ��u���Q��Fc���|W�%@�HB�2�9�������/Dx�D`�U:�Ƈ�gi����"`�%��ᄽ
+������t
�E`t���6�2k�)P�E�ѿO,��?�k��_�yh(/����=@��u
�g���3@������v@]��<����]���~��WD�`��.��f���~�o��ʈ�N�VA��߈�ե�M�����
�^��y��M�Q|��ߛ^-{o�~��>��w���Ѓ
+��(��g��X���ץ�i��&�X
+u��D�U���͕l� ��ғޥ�ߞ���k�������PH�H�C��J�~��S�@O�� �׋�ѓy7���
�k {��25���of����ϫ�o���{���'!�'���Z%��q�*)�g���C\���#��\���'��0���P_���WL��7��&AlJ���\��� Z��p��,���Y�x��j�c�����O�(6z��I�V�� u�:ג���T��D��O��9�ׄ�Q<��*y
=���2��~����/?J,����WJ�Q�W�>����W��u�?��#G��/����4�"�K���{㧏�',I��ҟ综E;���|R�ݠ��~��W�7i8�6����pxh8<4���
��r�<}8� kG�o;��u�C��P��v�)��A�<$��ց;��{l��� ����� ��#`��F���C�!f�	Ӆ/`7��(��0R!9�9�z���@%!/m�]���Ad��hv�G�����3@������pxh8<4{����P/ 3@�}��	B&�^�16�{.
�����ߠa�Q�o
���2l���mt���!\%@�X���?5��ճa��~
��ʠM65wk��a�)T���F��_�
+2�$�x�5�_9!�VxRd�1!}����'�`�$����Uԇ��r�?�	�Q
+�`7`�.���k����_V����zԄ��p�]]�GO���LXCk�3����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000000..1f5f49756c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
@@ -0,0 +1,18 @@
+�PNG
+
+���
IHDR�����������IJ���PLTE.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.����o���YtRNS�3P���/"Uq@f`2�
!<BHK Z#'1S,�4���j���8E���|��������)��Q$�
+��b�J��mߜGc?o�h�@^����bKGD��H���	pHYs���H���H�F�k>��dIDATx��]c۶�H�阒]�K���d��%٫뺮��lm���w]����|�p��X�m�-��}<�w�(1$��	;�F�@��%��?����B,Lh{�t���#���T@�/?j�9	m��N� #���+`��`����I�
+��_�-s�ʹU0�M��[��
+s�4`x��š�#��
�D<�~؀�K��.4�]`��PDDDDDDĈq������Ek@����A�~�*���	!Y���X�`hv3\LX��Ot�J2b���ؓl�QI<��� �6�-X�lֈ�6�H��|=j�`E�iq����Cv:�q���C?�?���x�,��r*t�ݻ}|;�kP�4���d�Y����f����K��~[	>�X:+�i����ĆQV9\����e�'���A�tOS�:7��2����YsxM�ہ��B���&���z�>n�C��@��r@��*�a�ӝ���%��MFDDDDDD�T�ߖ���H,���E����RU��n
ب<��V-
@�/Nm�թ���������Hw����*�+��#��$o�e�{�% �7\X��ǀ���2��~0��&n��sbA,�D��
�A�V�I��|�
�Og���鴋�	�7�y	7Jf�����:_�w^��H	v{/O�9���<����Y�`+�� HRٰ����[��?��
+������=���c""""""F�˽�sG�<*k9c��E�8薽�������zfm��r�1�N�������nq�w��&=O�\}K`
+#���2��~��L�|?�m>�\�f��͹�:}�4ᦋ���{�)�n[��
+�̰E
+KY��D�ۇ-��	�+�Kl=�Ӄ��L`љ�|�%��n�	a�	���N�#��5�	(4���?�����EDDDD\o�W�Ffq;��\E��_������,���W!%�zE!F�¶.�(USHQ0d�w)T���8#p,�x�B��K���� �*�x��X��E�e������
+K솎%mK��X~s�FE���~������tdc��a��I���1��Af4��dH��c�G�S�B`��0�wev`����"�{��	�.�GDDDD�,d�O�6�k"qk��Me�fS_����U��KŌ&g~>n� �H�})��L���F%8(�)r���!�[4统qQk�0�m[Le���_�7���0�@>1 X0A��Z����Vc�E�V ���Lt�k�3�EJ��44�Zﮊ�N`rt�>`�˥�	�	�
A��HBLH�@��c���Uq=�j������cM����2�s����J���CL�iR �NQ���������0=���Yi�-�|4�V��]��]��B^�ޞ���_H������$�<�$�	
+a����=��d@�	(Z�Ap_�}�~s���:�N�{DC>����m�^��ƒ����S�&�, ;�N����&�B} ��<_A��B]H�u���N(B�0��{h���1�IK����Ds��j����'��M���8�.�ӫ1�h3�df}mq���	��n�U{��L�o��z\=?@	((���e�|=ơ麄�C�i����1r<|�OO�;�
`��H��p�Qy�zԈu�����Z���V���Ʋ�!�)��5m�C���2��Ly�g�;���֑�R���jW�a@��@V�L�&W���ru=Z
+�̥��=U���5}���������7�;b(�����nP&�s��k�4�����8�ͥ��0���1�U�W�v�k�18dq���T��ՌE]qH8�������G�F�����K�����'��r����Or���r�̧��6"fp��T�^3c��"�����n��Mم-�/��W=�tJ,��X�)���{�P
Rm|K����>mX�8v�5h��<������_{ꘀ�Y�F�|&_G;&�>^�����W⁃�&�K���(��81�EB@F&��;"L���'wfw��E-6��o&/̫'X�e,>~�ee��|���A����=)	d��Q�`}P[���K��N��˂����/�~)����O[d�O=�3E�l5'Y�$?��7�m���Tzզ.�\��.��` WE�����"""""v�)��V���<���K�ZX.Ex�~Ч)���ߚ�����W_}�5|��s��/!?����'poդ���tC3����@�Q�)��t��`���b!,dY9�6A2����������/튮���n�t�TK>����#]�L;zq�J���r���²[��\-t�ҽ�5
@�ͷϟ��n�T@��+;��c���Qh�C*���T�ڙ��A<Sku�µb�E�
/��$�Z���.e�j������_ʤrWaB6d���(��S�s[�|���竕
+/5R���(�4X������76����`3|���P��p�'�H~<R?M�2�)�  ��g��Vp��B�n�=�|W�ͬ\��V0_�81Oׄ�Kz||lP_��ω���lxX;ǀ�Ju�<��Ng[��]=�(�#]������p�P�a���i�������s�f��
+V�z��]ౚ������z>�Vr�?�f��?������
�Q�1�T`��} H�k���,{�VZˋT��ϛ�?I̯u�QK�LM�e͆��~��q������y�m0�9�S�;���j�����5 ���i��Q��]7k0�U�ޭ���G�kX����3#���lY��_Цx����j޶9��`�#
+M	[z��KuO_z˿Dܭ��*��kOJ�(7��n��\�e�
I�T�ƨ�l�/�U������߶uw�.�~���;#�r���.�����8
�o# 5L��h>1�i�����p��V�M�?�/u7��0� X@��L��+M�+�����{��Fkt�{�ŧ89�0`���. ĀC�R+\��/��t�R����;
�TӲ���]�aL���|�efđ��	�>�ۣ��G�|�P`P��8C1K՛�A�̍<�2��ۂ��K�r�l@L
+L��������8�@�E>`n�����PNԍ,��p�����E��Ɔ����Z�FlÎ;�����F���7��Ȯ;��
+��s�wSz)g7�{r�s��S��gȋ��(߄~�AWytX��$�NV����R�_��<6�p.�O�8�O[�OdDk>_��O�O�}����JS���d��mV�?�W(_��m� ��j���~=H IԁF>T/��{*]IGJ@i����qam�NF|Q�5���0+���E�S8�:�v�`p~v���j:B�����p96�o��ys%��������
�|@H�����]��+�@��t]W�k}}�����7��Fʮr����A�����B���\m�-�_�2PY8�������x�ՎN�.h�~���@+7��z5������t�_/������/�?���0�S>��)���z�i0n�/�B����`{D��W���#`����B��o���[,�g��FVЁ�pP߾���C]Bz�� ��,X�����X�fԃ����A�:H��� k�7��d�Z9��oc}o�]�0�vd�:R]�0�ve���]刈����j����у����|
	�?�+(��OǍ�+	�#��ys���ߍ�n�p���Fru<��.HȺotM��3h���}��߆P}�������˗��v�����P�}mǀ���?���W��Z@���������}���������@��@���FD�������l����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
new file mode 100644
index 0000000000..618f5b0ca7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
@@ -0,0 +1,30 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD�E�;�-���	pHYs���H���H�F�k>��mIDATx��{leG}�?g�K��$����U�!�>T��؈�J��i6A"�V��R%;��"���*UP)�
+�/���z�RJ�F��QP��z��BQH�VU������5sμ�9��^�3ߕ��{~����7s�7��<���.��`���� c���Ab/�@�[�V�D��0��3AX9�0�N��_�B���&���>~�>�
c�;ab�D�ߎE����Q�z��'k���M�ayԉ��6�!�:u:�:@RŤ�B�yDD���'�L��-�f�]S��q!��f�
+S�Q�&�S��7MC��r==3dJ��{��f�Z���S0�Ms��:0K٦g�ʿ��&H�U�=�mc�4�i?UĔG��U4�hc��Qb�]�!��hL���W/�
����@������pxh8�~�|�A��Qf?�ێ��1f¸����=u����Q�GJH��p����PϠI�w״m췥���ԧ>2���"�WÓP&{��n����T:s���f�q���H@���.c�I������~�S�s+�^|B�n�29�dH�������]��v�-ˌ-m�e�h�>�����q&ت��g�9x�#c�n��~!����pxh8��4^�/�
����o�#�Z@��S���^��4� KZKP�d�9���C@F[�����,��a+�����]8��v��K�qHl�w9ק�84�KB��ץ|��&��#��[�\C�����`��R��!�����:�F
+z��C���6��)A���T1wU.I�җ!4��ig�3w��������E:��q7����n�0uA���mP��y
�T�K(5ͬ�lNæb�T���rw�DV�]��t�e4���7�
�L���[��C��0��P��&��0����+��+�
����@������pxh8��4����Y��`��O����E�Z<��h�\J!��䞋��j
�;TK�Vr�0��ͬq�cˇ��u���a����p����E{B�w"�K��5���n-��c"w�v�T�6
T�hzီ|6�ŝ���Ι��N{	t��]��K��^m1(�6��m�3��'�R�f���`Ô�� �_�>��j�,�*�-E)�e��{�U�,��
\u���oV��:
`o��m�Ke�t��_W��O��dW3���Z
Քrv|�~^�g��`j�yc���p�*���f���b�]�M5��9��.��L��N��q+%����ۯ�0�vc�c�J��E�M5���kk�#I�<���x_��	�I#0D�w��4xh8��4^�/�
��^c���
+����d�r��DM{w�Q�t�e�{��^�`��b�r./��M:0գ��*����z���`]|S�B�(�e)�h͎/V����ܮ�"aO!�o�
,�u�^���Љ�^�=�z��t`�WeCC�MQϱo���0q��%���U�o?�<��@6��HG/����������uAQ-_�u||����ִ*2l��ٍ�uG�@� j
!�B���r�����	q�L!*)�h������.�V�{3����-��!�w�$dP�*�����/P[�t1���l3�hl�y�p������0b��g�L�} �3���$�%\/��.)TwQ�"uK7d�+�2�!��@������pxh8��4�'��aY$m��f�6�lB'�.D��
��Р��x7S�x��tI��eW�e}���d0�R�W��^ݢ��0](U�݋T�x����|��T�|����@v�^Df׹Lb��(�2��H��0n8;���_�Q�O��}D���&3{��Y��W�w��5*��e˗?�̖�G�
+�:H iZӖ)/MP���(:�!�/�|B��[i����:�Gf
�L�`�~��:z$aa���^����ʭ|P�- kbݞ<ەL&�xJ�AABȼ�Hvᑢ�[�yS��ə�w�NJuy��%pw�0�_a"z��x���� �3i�1|���=����@����%�JW����A���m�\����
��l��X�m9+�(��)������S��� or��ro*E`�Z��1��&=�ޗ�g�!�Rt<<�A.-V���+�l�|����suK��,&�ȇ��%����y�q�s��(A�K�*�q^�~����anb�1`�6��G�P�a�&.�	�)b���muL��I���fnE! k̠Ò��c��m���c�ȱD�-B֥֙�D`:G��e�tQ	��7�0���0��������YQ�Ӕ،?�mb�/�e׸L{8�<�
q�{��X4��$s���D@����s�9�����e8��\c(���Y���"�r���7��q6�u-	|��B����R���i�x!��9^P�HD�����g�t7K���|��2��"�.�t���V����w�E�u>�b�������f����a?q�h'y'r�y����#\��&��
+o+��Ԫ������|�Y��%��_Hp���"����k��1��*ɫ���U[��&x�9�xA��s�mf�e��<�_����7�;y�6m���i
�
+:�[��)�EB���7�̰����8f��CH��`⾿�h�)�����}�(�%m���'��&���
;��(�ݚ!�{:^����R��@���N���Kү"�*�<�V�敡�=��o�h~q���+`6I��i�I<#�����Z=^IE\`�0]1����%�D��A��^�a0f��,���c %[�Gxh8��4^�/������rdh9�����M7L)-�ӂ-���?K(����stբ�h-?�:��[ڧC�r�]�G�(�YB�3�|�C|
l�eXW��_�x�V8Ɗ�b����bQ����7�����V�4J�]������l!��=�
D?��'a`^����a�q��8���:-��O��YP��x�ۀ���֝��X�5Q�"�Gִ����W}���
+���I>ȓ<�c��b�YV
+6=��*��ۿ�-\��įi|��BH���J_F�Wx�CWғ�_��K�`B]J��"}�`�_R��β��&nDsp����t%G-�^���V�����yIc�b�9.hM�u����K��ĭ��6T���6��5Ko(�
+%Hz߲�:.��n�z�ōO�>���c��lpVZM_gڰ�C�v��eG{�����<_d�����0՗e���N�%N�y�ƍ����Ȅp��~�Ú�/���k�������n��������|��(G������#.�s��9�J�ۇ��l���[��6�ɻ�&�.X���{�����SDf�†�<����y?O�~��ƅDP���*~b���gco��s{;�����'�Z9�Z��.��O�孁���e��U�~?�Ӆ1N�3��ڶD�(��1Gx�x�k�S�H�I~ی?O��������k���,��i�(���ׁۈ�{.�h�_���5�؋�nF�7��0Q���O����S5�:�'����/��ա���J�r����
�.���KN�wu�e��r>n��-�U�$U`I�v%�����.A�U����e�d��
+��;�Ә:�+�a&�XĎ �y������������������G�с���	��"��4��pxh8��4^���	@d6�((�Ԕ{�C::[�>�H,
+�ɴNVN����hr.�~N������Z��`�3�᝼���K��Q�|$�%�t��!�Vn%�=�*�7����f��g(�m!fy���"�k�I6Y�/�eZ�ٳ���+���z�g�6W8ɦbQ%�y�{9����Ï�*ŕ�#��7��b-t��X�͕8y��nO�{]�!ټ�*���\� �(��p�2.�H�ٙ�d�.�^Z�(N���&�l�2�&k�	�U&ף���#~�.���7������6���58A7����}P:��BlkU�[�8�)�j�w0�$��W� ��!s\�������QF�n(qRK��:'�X���@����=$��x����|�5:��@��]���2�S�i�.�&��
+��$`
+8�t�����S =�&[#�߫��U3���Wҳq��^H{���➇�Z���4������"��A��H��#����U��0�+̱�1�Ɏ�;����O9���"�D�E
�C+n�U:�|a��ɔ�M|�?H������W1�$~=�k��U�џ���V������V�����l{���7�	�����^�;<�,�t[������T"��3SU9l��˾�H���x^�&�a�@���)�E��&�<<B4�(b����p������Ƶ\˫\�u��f�����7r����������^��Ci�[��.��h���_�^��mD�"DD�_3��e�������e��X�	�,�B@�fU���/�?���g���B�R���C�&��2���P�8��@3ZtS��<����v7�^#�另�;c'�Nȹ����6�g[�J!Az^ ?�<̯�oɛ�_s[Kg{(e�}�E�~J��,�m<<�����U���g
+"&B%��7�~�{��/�
G�l��4^�����j�����Ԓt���cA��0\(�����ܓ�Ԡ�Q�8��YN�Bݝ�?[���R��$�k���\�{�u���׾~�Q���q�)�8���z:G�G��UK�:�
07��6�-��
+WMY<�����
��2�Ѱ��$5�&v�}%��8�)#9&)/��K^2�+��B̳�i���\Ҥ����V�}�LD���1/i��n�]2č��>��I?U�7x���G�4�c�*�i��
+�5)�ñ>�wH�����f5[q���O�.���d&J_�~W\`G{�
|-���e/���Чk��d� E�����(���N�i�v=����C`�̲�Z���+���%m
+)s�!ī�6Fei�N��%���O*㪞v,s��@��%����4���tS/<E�%��0wr��k{ʉ2b�6ɻ��*���;�����zs�]�۝,�B��!,ų�uM�zȐ"��={����O���E����۴��w80���ۙ��%�\PL����
+��H�[/�
����@������G����9��A�Pi�G
+ѫ+!��'��^��u'þ��:�Z�@�LxZ�:�Ɩ����oQA_�RR�`��E��,���~�]M�y_��xD�$��&J�B�k�Q�@����3����=�A_��هA`��RN�#�"��tX��孋�0Z죡�Ԭa�t����R��Mi�C-�k��r�a�fH4@�C��ܓ���-��`$�~����Ul�$^�Ufr)�0�*-C�n9W-��@M�1��a���@7�g!�7
+?̣|�l�R��/ᭁytX5��L݇��p�����@������pxh8�`:{�1����J��5��#;���ǾD"�-��s�ct�Ln3�<D��B���d1w]���=4H�α�'�!���r�+t��d����eG���{h	@�.���k�q���v�e�5V�h.0�©|U������
+��C��u����k��G���O��C��Y�	�"@�E�"mNzP�S,��1����rzk�M}������y�.�{+j{���xL��wE^DPk�$�3�cA�Y�~Y���
+�/�C�H�F�����<m�47Ṟ�Q�3��Wa�o�~o�)�C�d݇��E�ƀl7�(̢b��s��ڸ���<<�Fx�~?@��m
����@������v@]��<����=���~��WD�`��.��f���~�o��ʈ�n�VA{_��ե�M�����
�^��y��M�Q|��ߟ^-{�~��>������Ѓ
+��(��g��X���7��i��&�X
+5WJ"�*V���J6s{��I��w�oO_��5~���YX�w(�R��!��m���)^�'��D������ɸ�����5�=�@��+���~���j��yQ`O�`�$�D��<B�F0C<�^%�@��?t�k3�}�@����{�^��y��U��|���pS�nĦ�t���e��=���$�v��>`����H_�B���T#%].Xx��D�ѫ�OR��2�E���\K"��R\T|��:m�O���
+�x��*y
=���2��~����/?J,����+%q�	�W�ޛ���3������?ܕ�?�������
�^���e������	+R����oҎ�5س�~�o����Bo
l8��4^�/�
����@�!��/ON�G�����ۮ2t]��С8�cݮ5�z=7���������ˮ���g���@�/�aE[��y#�3�#z��7L�.|��
+��(cR�c�S��m�Q�$�6�ץ{D���a�{T�_j8��4^�/�
����@ñ`�/����_g�"d���`�ɾ����0�
���{�����
�����C�j����_9��jD�Ջa�~?�	dc�[�����0�*a���������,�&
0��&�+���O�B4!��1��~��Ix����>�8�c��&�G)�j���I������=@�5@�v�&J?��Q��l�Ç@��Q�����?��^�������%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
new file mode 100644
index 0000000000..ee5e33f272
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
@@ -0,0 +1,35 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD��I�( ���	pHYs���H���H�F�k>��tIDATx��{le�}�?g�
k�u��J�>D�C�^�Q���M��H��*MU��
h�(*$H���R�*j�	�D�]����)Ż(M6��F�6!6�-
�xI���i�-�� HN�8��s�uι���g������f����7��3����ƣ��7�x^�/�2&�v&v^�DL�	l6I�-��o?��cn��D Iy�e�#d0+�0�3��~������0�g'L�V���[��R�C:B�~(��)$q�vXu�B@��E@`H�NG���`TA�%=]�qAw��J)��u)�9�:e9d`V��0�A{�=��BS*�ڦ�S��gFA��-(D���R˷@�"����g'�U�,eSwʿ���j���*�)l[����.HLyϰ��9�����j�a�I6��MR~��~�nG�ٕ�3�
����@������pxh8��4~=@>���(��mE��3a\`~��=u����Q�����[�f3W��A���i��oK}3wէ�gV�����,j���n2��*ߕ���m��M��]
y=��xn"�co�.�L"��7]��EC�:dHz�E@W�.�f+^�eƦ6vռE4��O���`��̴�.�)l�:��7����){�_Я��~"����pxh8��4^�/�
����/�#�\@��S��^�T�0sZs1�J�1�Pr��h�w�V��E�g���S��T��Q5�[	\B���O
+`+�˾>}����\�6��/0��k�g���1[
�Kh��l�Xʿ��_�Z�^IA���^�N�4v���OW=%i^�<��9��t�f �2����С��B�Hg�6����!u�\ҭZ�&蒶�
+�2����s	���U�]��i�T����� ��]�Uaq;]�A
�:�rG-3�<F�n��*�ݴ�T�ݯ	4<;���������@������pxh8��4^�ysh�,ux��$\j��"Z-�mo��SJ��9���{�
+���e˹[
�\�fָ�ұ��y�2LT��0�K@�9Լ��Ţ=���?Х��B���=c"��v�T�6
Tokza���9T����s&�6��ո���v�� }3�':��[�5�)�,�xU!��҃@}�����U� �kc��
+ꈡ����Y,]��`&߬('�u*�^�v	��O�wu�?}2�&�C����Ȗr�}ݾ^g�[`��y�c*�9s�"���f_��b��
+uuT?�M���f�
+
+e���ۏ�0e�vb�c�J��E�M%�6���Po��l�M`n�~Esչd�j|���z��)miOq/{�ک��Jq���A�G������pxh8��4^���a��+ ����ʥ�5�݃F�����+��Y�&{�˾����I�
�z��\e�X�����oJ}Hȯ�iW��)~�n��m߮ɞh�����l*7TP3k���XJ7R"�����"NX�U�}ٔއA���/(qW�\���v6�$2�
��-���˶Ezd��j��0u]PT{�[�:>>�L�DkZ�Y���ֺ�14�ZC�WU���b�d�12zB���Y�$i".�~A�i=�����Œ��۪>���E��AI�b�\Ϋ�������
+c6��O�SB\��ɅJ#"�RE�Ȱ_'��I.��aluI��������	��YX^�/�
����@����=h��$i3��7[��d:Qu!Ztw�Ul�~F��Ż�b�k�K"$-c��.�3���@��,�y�;i�-�JӉR�޽H���!���ɷjN��;��L�dw�Ed�p��� fO�,�j�T�q��������+
+򩸹�h[@Vef��6KV����x��\�b���|���l}_��$U+�W!��?o[�����y�B(�p3
��r_�5P�2ݚ�la�˱*�x��GXG$�`�W~9?�r+���y�-k��d����.�@ <]�����#<R�y0/��99����T�����^w�
����.�?0�ꠁ{�]0j"<�v�g��Qxh8��4^���$�S�L��@�����oԆ�5	�l\q+�VN�!��߆���j��L�b-����=UK<��׳�6��R���?S�j����b�s�'�\
+>U��\Z,��W�����4Ig��9��L�1�sa��R���O�^�.�P����(�>�K��\�c�6m^�um
��Ql��g�"�y[ө�D�/����[V�*3谨��X�m�@[�q�X#r,a��5�	kLK"0���񢐻(����q��A�O�VP��U
j�(�iJ��l�Wq����l�i�����x�S�� T!s��XD@����s�9�k����y8��\a���Y���"�r������v֗u-	��v!���H��
���
�4�<��@��(B$"Pd�V�Z��5Ɯ��	�ߦ�����s0k��B�5h$��=�dpϪ�_�@0+�������4@"h�O�t���c�ky5�v��z�K����\��1@ޒZ��]��B�_.܋ؿ�!���I��Xd��WpW0�Z%y9�s9�jaK���0��h�sN��,�lU�����X!����h�f!�2.)��0����� 6�B|Iq/�Ӽ��0�jD��F[,�5�
!m`�-�������$�J~1w�WQ�J�D#"YO��
�6hV�Q��5C��t��/���7	�8�-*�"����_E�U�y0�x�+Cxg�h|����+`6H��i�A|]�����Z=^JE\`20
+�~]���f 5X��`?S�0��Q^��?J�1�%[�Gxh8��4^�/�{��S�"��rؘ���ɛn�RZԧ[v�-�P����O��I'�Z~t�t����O�N�z����q����g����آ�4��X�����ԃ,s�e���q�9
,2�)�^���Ķ/�����(��rS?�=<��B|W{|�&~�OO�������
+�t�q���uZt�E��A��)n��7
�;O&-��+��D쏬iEcG����F�	?�c|�Ǹ��54�:�,lz��O�l	�7s��'~C���%B�f�2:`��ě਒�T��T��bjn�
+F�E���,�,p�n��F4'өkLWr�"�P[oa��o��s��k�qNkҭ����\��n��������.�Y�xS�V(A�����q��t+/ԫ-�u�p0w�-z��4��ƴaY�=zt���n��g~��2�7Y,,耄��L
d�=|�|�|Y�p�z��?2�\���f�˼���\~'f�{�[j,�	>#���(�9�a:��,��وK� �x�R��.  ��B%�f6����n�ϻV����/Σ������� %O��+|���!��I��6���3�e��HW����O�� vXIK�O�rZ�8���g�g8=C��2�9Ǫ[�P��B'���rAmK"zʻ�!����
+���m���6�뱾�3����y5����ܓ��"�[�<
�J��sϏ��U9Z^��8_�fD!Zq��_\���- ��-`<uQS,�y�����b�]z@h`�*�*GZ������>���)����D�g��鲔��i�qIb.JXT���bj�k�$��M��1^�K6�<��˿�9��C_��fr��E���M~���8]�T�xX��u5�_<���t_0PA���𶀆�@������p4O�"�qGA餦������v�GbQ���p�rz���E��3��3�U
�6����+��$�q?�W
+1���X�K<�8�
���[����sC!��}E~5C~=C�n1[x�LO
+��g�U�X���=�����̪�y�hs��l(&U�'/qg��v�|�^�8Sx(��o(�B�x�e�\�ӑ�����ľ�U��s���:�҅ͅ2k
+W�!�B�Ԝ�i�
V���EO�f�X6�g�A5�kOد2���jS���6ۼ�[J���S��j����Q��:(����Z���0Ne
+�Z�]L2�$����4@��8�B,���,�Nj(�t'�8.��JC�L�K�U���i��5�#�Xx�#|�U:��@��m��??d,^q5�L!��]�Mr��I4�pZ��;��>�g@��M�F�K�)(�}�f��U�.�{���]��~5��5������>�"����$c�����+�ן�?��Q���c�#
+�mK-6�)࿁���_�Y�n��G+��:�|a������"�~ϯ��ٯb�q�~=�+���,j�?�M��y
+9"�y��D���ʍn��g����6-z<�,+tK�����xW"�����'l��˾�H��[yJ�&�a�@�~/�9�"�a�%�$iѣ���6.S����8ظ�+y�+�*�o�jo�mp-���k��1	�u����%�=�����-�"�
+���4wq�-��Ր�E���K
+�|�Uf�G��
+-���Ua]X�r���x.�\���˅h�:"����LF�dF���5p���f�覊�)n�Yͣ�n��Fh�
1{�'��\���<ϫlik)$H�䇙�5��%y��kni�b
��/���O����E���OjZ�<�,�b�������P	���p�+�@��<[��/�
���#/��Z�wp6�$�5�D��E�����
+���|6w�^>7��{ԇ�Nĭ��Pw���f�>��k�7�/��c͗=��cM��ﴯ߁A�E`�q��:N*��N��Q����b�UG�`��ʟ�Ƴ���Cᨉ"��5�w5�.��&�v;����.ܱ��7e$�$��y�K�YE<[�y�8����M
+n�m%�U�4@��[��&����EC�(�.�/���b���C��>Z�1�_P�O�^�;�������!�N��wc��l�^���]`C1�L�����8GO{�
<��fpY�8���:�X�! ��W�Z���Vc��ʺ��b���+����_ݖ�fp9U�4��u
+*��QD�I�3cv�1e\�ݎe�(ֲ$��ؿ��.�]��z�)�/�>�>.|mO9Q��HN
�P��{����;�=�YJ���7'�[��ɂ-����b<
+Xӌ���2��@}�޺Pw�������aŨ�M�	lqG{R�\p��Dx�s��T3�X�ؓ�����@������pxh8���ѱx��e l TZ�B��H�a�e�c��t*ZHF��b52�iiS�[:�DH�S
+�))%��_rp�S���eUӮ@��*I�3�*�C�
+3��=���&�&5�CB���`����Ê�,o]���~����]3�t�������ح�jXe�x����0CTA3œy �5�{�t����!k@Q�V+Vr��
+3�e!�̰Bː�ۓ��O�A����԰‰	#	���U4V��D�ч�D����*Oݕ���<:�Xl��Bxh8�L`������pxh8��4y0���؃���J��k5��#;��ǮD"�-�鞺#t�Ln3ã|��Áysɩ�q�v��A2t�>�}�<���Jw�Z,ӱ:�-�*���%��A$�-�lp�I�d���5�S/���BGs�iN�z,v�~�79P�r5�q��p]MM�O?�m���~"g�ǀ�����9VhAmn`��0G�)�����ԧ_ԇ��U������W�1}�3�y
A�����p��;d��U���>X����J��x��<mV5'Ṟ�a�0�Wa��s��w��A2�����<w�F}b@�`fQ���=�{Ɂ�h�����s<���5P�ŏ�.�_�px[@������pxh82��P�~���G�Mt��M���-�v@]���ܠ�.߰�	�����~��K�9�4}��6��. ��/n�:��&"O�'�"�'G�SH��;U�k�A��'��U峕_������4]|]̅�+%�w~�tUFD�w_���/}�����e��7��%~�B*E�����K�����e�U�پ^̀����Y��`]�����2���Y���O�ޯF��g��E���OB�O���Z5��v�*)���*�C��63ه
��(��/�w0��zP_���WL��
+7��AlJ���(�� ��p��
,���Y����j�c�����w�(6z��I�V�?+�_�Ԓ�༔���D��O+��9�7��Q���*y
=���2��|���/?J,����+%q�{�^�?�@�r_O�ץ������^��c�A�o����.�J��㻏�,K��ҟ��E;��7|B`�N�]�a�+�/i8�5����pxh8��4^�/�
�hr?<}4� [��o���u�#�bP�u���\���������l�{l��V��{h��102p�1#=�СG�y�����/��(�b0V!9�9�z��&@%!m�]���A��ju�G�����@������pxh8��4�W�&��P? @�y��)B���	6��S�Y�&�ϰak�����ͽ�Y�6��pakݞ�}���(|�!,���W/�	���/��A�lj�֮�x�)T��I#}ˏ�Y�L`2eM�)���
+w�B4!��1����FIx���>�8�c��&�G)�j���I������}@�5��V�&J?��	Y�����!�\=jb��<�����h�jo���%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000000..7e8ebc180a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
@@ -0,0 +1,198 @@
+�PNG
+
+���
IHDR�����������IJ���PLTE�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+4�v����YtRNS�3P���/"Uq@f`2�
!<BHK Z#'1S,�4���j���8E���|��������)��Q$�
+��b�J��mߜGc?o�h�@^����bKGD��H���	pHYs���H���H�F�k>��dIDATx��]c۶�H�阒]�K���d��%٫뺮��lm���w]����|�p��X�m�-��}<�w�(1$��	;�F�@��%��?����B,Lh{�t���#���T@�/?j�9	m��N� #���+`��`����I�
+��_�-s�ʹU0�M��[��
+s�4`x��š�#��
�D<�~؀�K��.4�]`��PDDDDDDĈq������Ek@����A�~�*���	!Y���X�`hv3\LX��Ot�J2b���ؓl�QI<��� �6�-X�lֈ�6�H��|=j�`E�iq����Cv:�q���C?�?���x�,��r*t�ݻ}|;�kP�4���d�Y����f����K��~[	>�X:+�i����ĆQV9\����e�'���A�tOS�:7��2����YsxM�ہ��B���&���z�>n�C��@��r@��*�a�ӝ���%��MFDDDDDD�T�ߖ���H,���E����RU��n
ب<��V-
@�/Nm�թ���������Hw����*�+��#��$o�e�{�% �7\X��ǀ���2��~0��&n��sbA,�D��
�A�V�I��|�
�Og���鴋�	�7�y	7Jf�����:_�w^��H	v{/O�9���<����Y�`+�� HRٰ����[��?��
+������=���c""""""F�˽�sG�<*k9c��E�8薽�������zfm��r�1�N�������nq�w��&=O�\}K`
+#���2��~��L�|?�m>�\�f��͹�:}�4ᦋ���{�)�n[��
+�̰E
+KY��D�ۇ-��	�+�Kl=�Ӄ��L`љ�|�%��n�	a�	���N�#��5�	(4���?�����EDDDD\o�W�Ffq;��\E��_������,���W!%�zE!F�¶.�(USHQ0d�w)T���8#p,�x�B��K���� �*�x��X��E�e������
+K솎%mK��X~s�FE���~������tdc��a��I���1��Af4��dH��c�G�S�B`��0�wev`����"�{��	�.�GDDDD�,d�O�6�k"qk��Me�fS_����U��KŌ&g~>n� �H�})��L���F%8(�)r���!�[4统qQk�0�m[Le���_�7���0�@>1 X0A��Z����Vc�E�V ���Lt�k�3�EJ��44�Zﮊ�N`rt�>`�˥�	�	�
A��HBLH�@��c���Uq=�j������cM����2�s����J���CL�iR �NQ���������0=���Yi�-�|4�V��]��]��B^�ޞ���_H������$�<�$�	
+a����=��d@�	(Z�Ap_�}�~s���:�N�{DC>����m�^��ƒ����S�&�, ;�N����&�B} ��<_A��B]H�u���N(B�0��{h���1�IK����Ds��j����'��M���8�.�ӫ1�h3�df}mq���	��n�U{��L�o��z\=?@	((���e�|=ơ麄�C�i����1r<|�OO�;�
`��H��p�Qy�zԈu�����Z���V���Ʋ�!�)��5m�C���2��Ly�g�;���֑�R���jW�a@��@V�L�&W���ru=Z
+�̥��=U���5}���������7�;b(�����nP&�s��k�4�����8�ͥ��0���1�U�W�v�k�18dq���T��ՌE]qH8�������G�F�����K�����'��r����Or���r�̧��6"fp��T�^3c��"�����n��Mم-�/��W=�tJ,��X�)���{�P
Rm|K����>mX�8v�5h��<������_{ꘀ�Y�F�|&_G;&�>^�����W⁃�&�K���(��81�EB@F&��;"L���'wfw��E-6��o&/̫'X�e,>~�ee��|���A����=)	d��Q�`}P[���K��N��˂����/�~)����O[d�O=�3E�l5'Y�$?��7�m���Tzզ.�\��.��` WE�����"""""v�)��V���<���K�ZX.Ex�~Ч)���ߚ�����W_}�5|��s��/!?����'poդ���tC3����@�Q�)��t��`���b!,dY9�6A2����������/튮���n�t�TK>����#]�L;zq�J���r���²[��\-t�ҽ�5
@�ͷϟ��n�T@��+;��c���Qh�C*���T�ڙ��A<Sku�µb�E�
/��$�Z���.e�j������_ʤrWaB6d���(��S�s[�|���竕
+/5R���(�4X������76����`3|���P��p�'�H~<R?M�2�)�  ��g��Vp��B�n�=�|W�ͬ\��V0_�81Oׄ�Kz||lP_��ω���lxX;ǀ�Ju�<��Ng[��]=�(�#]������p�P�a���i�������s�f��
+V�z��]ౚ������z>�Vr�?�f��?������
�Q�1�T`��} H�k���,{�VZˋT��ϛ�?I̯u�QK�LM�e͆��~��q������y�m0�9�S�;���j�����5 ���i��Q��]7k0�U�ޭ���G�kX����3#���lY��_Цx����j޶9��`�#
+M	[z��KuO_z˿Dܭ��*��kOJ�(7��n��\�e�
I�T�ƨ�l�/�U������߶uw�.�~���;#�r���.�����8
�o# 5L��h>1�i�����p��V�M�?�/u7��0� X@��L��+M�+�����{��Fkt�{�ŧ89�0`���. ĀC�R+\��/��t�R����;
�TӲ���]�aL���|�efđ��	�>�ۣ��G�|�P`P��8C1K՛�A�̍<�2��ۂ��K�r�l@L
+L��������8�@�E>`n�����PNԍ,��p�����E��Ɔ����Z�FlÎ;�����F���7��Ȯ;��
+��s�wSz)g7�{r�s��S��gȋ��(߄~�AWytX��$�NV����R�_��<6�p.�O�8�O[�OdDk>_��O�O�}����JS���d��mV�?�W(_��m� ��j���~=H IԁF>T/��{*]IGJ@i����qam�NF|Q�5���0+���E�S8�:�v�`p~v���j:B�����p96�o��ys%��������
�|@H�����]��+�@��t]W�k}}�����7��Fʮr����A�����B���\m�-�_�2PY8�������x�ՎN�.h�~���@+7��z5������t�_/������/�?���0�S>��)���z�i0n�/�B����`{D��W���#`����B��o���[,�g��FVЁ�pP߾���C]Bz�� ��,X�����X�fԃ����A�:H��� k�7��d�Z9��oc}o�]�0�vd�:R]�0�ve���]刈����j����у����|
	�?�+(��OǍ�+	�#��ys���ߍ�n�p���Fru<��.HȺotM��3h���}��߆P}�������˗��v�����P�}mǀ���?���W��Z@���������}���������@��@���FD�������l����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/jquery-ui.min.css b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/jquery-ui.min.css
new file mode 100644
index 0000000000..b3fe46344d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/css/uitheme1.12.1/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.12.1 - 2019-05-26
+* http://jqueryui.com
+* Includes: core.css, tabs.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=smoothness&cornerRadiusShadow=8px&offsetLeftShadow=-8px&offsetTopShadow=-8px&thicknessShadow=8px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=aaaaaa&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cd0a0a&fcError=cd0a0a&borderColorError=cd0a0a&bgImgOpacityError=95&bgTextureError=glass&bgColorError=fef1ec&iconColorHighlight=2e83ff&fcHighlight=363636&borderColorHighlight=fcefa1&bgImgOpacityHighlight=55&bgTextureHighlight=glass&bgColorHighlight=fbf9ee&iconColorActive=454545&fcActive=212121&borderColorActive=aaaaaa&bgImgOpacityActive=65&bgTextureActive=glass&bgColorActive=ffffff&iconColorHover=454545&fcHover=212121&borderColorHover=999999&bgImgOpacityHover=75&bgTextureHover=glass&bgColorHover=dadada&iconColorDefault=888888&fcDefault=555555&borderColorDefault=d3d3d3&bgImgOpacityDefault=75&bgTextureDefault=glass&bgColorDefault=e6e6e6&iconColorContent=222222&fcContent=222222&borderColorContent=aaaaaa&bgImgOpacityContent=75&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=222222&fcHeader=222222&borderColorHeader=aaaaaa&bgImgOpacityHeader=75&bgTextureHeader=highlight_soft&bgColorHeader=cccccc&cornerRadius=4px&fsDefault=1.1em&fwDefault=normal&ffDefault=Verdana%2CArial%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa}
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-1.12.4.min.js b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-1.12.4.min.js
new file mode 100644
index 0000000000..e836475870
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-1.12.4.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-ui-1.12.1.min.js b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-ui-1.12.1.min.js
new file mode 100644
index 0000000000..25398a1674
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/assets/js/jquery-ui-1.12.1.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
+}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
+this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
+}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
+},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
+},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
+},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
+this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.edit.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.edit.php
index a367c48205..00fddbcb96 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.edit.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.edit.php
@@ -19,7 +19,10 @@
     $userid = $attributes[$useridattr][0];
 } else {
     $as = \SimpleSAML\Auth\Source::getById($authsource);
-    $as->initLogin(\SimpleSAML\Utils\HTTP::getSelfURL());
+    if (!is_null($as)) {
+        $as->initLogin(\SimpleSAML\Utils\HTTP::getSelfURL());
+    }
+    throw new \Exception('Invalid authentication source: '.$authsource);
 }
 
 if (array_key_exists('editkey', $_REQUEST)) {
@@ -55,5 +58,4 @@
 
 $template = new \SimpleSAML\XHTML\Template($config, 'oauth:registry.edit.tpl.php');
 $template->data['form'] = $form;
-$template->data['jquery'] = ['core' => false, 'ui' => true, 'css' => true];
 $template->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.php b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.php
index 4431835a63..b3be64f646 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/oauth/www/registry.php
@@ -18,7 +18,10 @@
     $userid = $attributes[$useridattr][0];
 } else {
     $as = \SimpleSAML\Auth\Source::getById($authsource);
-    $as->initLogin(\SimpleSAML\Utils\HTTP::getSelfURL());
+    if (!is_null($as)) {
+        $as->initLogin(\SimpleSAML\Utils\HTTP::getSelfURL());
+    }
+    throw new \Exception('Invalid authentication source: '.$authsource);
 }
 
 if (isset($_REQUEST['delete'])) {
@@ -40,8 +43,8 @@
                 continue;
             }
         }
+        $slist['others'][] = $listitem;
     }
-    $slist['others'][] = $listitem;
 }
 
 $template = new \SimpleSAML\XHTML\Template($config, 'oauth:registry.list.php');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/portal/hooks/hook_htmlinject.php b/vendor/simplesamlphp/simplesamlphp/modules/portal/hooks/hook_htmlinject.php
index efa1984a32..7939763eee 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/portal/hooks/hook_htmlinject.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/portal/hooks/hook_htmlinject.php
@@ -4,6 +4,7 @@
  * Hook to inject HTML content into all pages...
  *
  * @param array &$hookinfo  hookinfo
+ * @return void
  */
 function portal_hook_htmlinject(&$hookinfo)
 {
@@ -15,6 +16,8 @@ function portal_hook_htmlinject(&$hookinfo)
     $links = ['links' => []];
     \SimpleSAML\Module::callHooks('frontpage', $links);
 
+    assert(is_array($links));
+
     $portalConfig = \SimpleSAML\Configuration::getOptionalConfig('module_portal.php');
 
     $allLinks = [];
@@ -36,8 +39,8 @@ function portal_hook_htmlinject(&$hookinfo)
     $hookinfo['jquery']['css'] = true;
 
     // Header
-    $hookinfo['pre'][] = '<div id="portalmenu" class="ui-tabs ui-widget ui-widget-content ui-corner-all">'.
-        $portal->getMenu($hookinfo['page']).
+    $hookinfo['pre'][] = '<div id="portalmenu" class="ui-tabs ui-widget ui-widget-content ui-corner-all">' .
+        $portal->getMenu($hookinfo['page']) .
         '<div id="portalcontent" class="ui-tabs-panel ui-widget-content ui-corner-bottom">';
 
     // Footer
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/portal/lib/Portal.php b/vendor/simplesamlphp/simplesamlphp/modules/portal/lib/Portal.php
index 517ce2edfa..e7308758f5 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/portal/lib/Portal.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/portal/lib/Portal.php
@@ -2,17 +2,34 @@
 
 namespace SimpleSAML\Module\portal;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Module;
+use SimpleSAML\Locale\Translate;
+
 class Portal
 {
+    /** @var array */
     private $pages;
+
+    /** @var array|null */
     private $config;
 
+
+    /**
+     * @param array $pages
+     * @param array|null $config
+     */
     public function __construct($pages, $config = null)
     {
         $this->pages = $pages;
         $this->config = $config;
     }
 
+
+    /**
+     * @param string $thispage
+     * @return array|null
+     */
     public function getTabset($thispage)
     {
         if (!isset($this->config)) {
@@ -26,8 +43,16 @@ public function getTabset($thispage)
         return null;
     }
 
+
+    /**
+     * @param string $thispage
+     * @return bool
+     */
     public function isPortalized($thispage)
     {
+        if (!isset($this->config)) {
+            return false;
+        }
         foreach ($this->config as $set) {
             if (in_array($thispage, $set, true)) {
                 return true;
@@ -36,21 +61,32 @@ public function isPortalized($thispage)
         return false;
     }
 
+
+    /**
+     * @param \SimpleSAML\Locale\Translate $translator
+     * @param string $thispage
+     * @return string
+     */
     public function getLoginInfo($translator, $thispage)
     {
         $info = ['info' => '', 'translator' => $translator, 'thispage' => $thispage];
-        \SimpleSAML\Module::callHooks('portalLoginInfo', $info);
+        Module::callHooks('portalLoginInfo', $info);
         return $info['info'];
     }
 
+
+    /**
+     * @param string $thispage
+     * @return string
+     */
     public function getMenu($thispage)
     {
-        $config = \SimpleSAML\Configuration::getInstance();
-        $t = new \SimpleSAML\Locale\Translate($config);
+        $config = Configuration::getInstance();
+        $t = new Translate($config);
         $tabset = $this->getTabset($thispage);
         $logininfo = $this->getLoginInfo($t, $thispage);
         $classes = 'tabset_tabs ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all';
-        $text = '<ul class="'.$classes.'">';
+        $text = '<ul class="' . $classes . '">';
         foreach ($this->pages as $pageid => $page) {
             if (isset($tabset) && !in_array($pageid, $tabset, true)) {
                 continue;
@@ -62,20 +98,24 @@ public function getMenu($thispage)
             if (isset($page['shorttext'])) {
                 $name = $page['shorttext'];
             }
+
+            /** @var string $name */
+            $name = $t->t($name);
+
             if (!isset($page['href'])) {
-                $text .= '<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#">'.
-                    $t->t($name).'</a></li>';
+                $text .= '<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#">' .
+                    $name . '</a></li>';
             } elseif ($pageid === $thispage) {
-                $text .= '<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#">'.
-                    $t->t($name).'</a></li>';
+                $text .= '<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#">' .
+                    $name . '</a></li>';
             } else {
-                $text .= '<li class="ui-state-default ui-corner-top"><a href="'.$page['href'].'">'.
-                    $t->t($name).'</a></li>';
+                $text .= '<li class="ui-state-default ui-corner-top"><a href="' . $page['href'] . '">' .
+                    $name . '</a></li>';
             }
         }
         $text .= '</ul>';
         if (!empty($logininfo)) {
-            $text .= '<p class="logininfo" style="text-align: right; margin: 0px">'.$logininfo.'</p>';
+            $text .= '<p class="logininfo" style="text-align: right; margin: 0px">' . $logininfo . '</p>';
         }
         return $text;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.php_cs.dist
new file mode 100644
index 0000000000..59267ee96c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/templates',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/jaimeperez/twig-configurable-i18n/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.travis.yml
similarity index 85%
rename from vendor/jaimeperez/twig-configurable-i18n/.travis.yml
rename to vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.travis.yml
index 1ab409c11d..1261f5fd2a 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/.travis.yml
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/.travis.yml
@@ -3,7 +3,6 @@ sudo: required
 language: php
 
 php:
-  - 5.5
   - 5.6
   - 7.0
   - 7.1
@@ -14,9 +13,13 @@ matrix:
   allow_failures:
     - php: 7.3
 
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
 before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
   - composer update --no-interaction
-  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
 
 script:
   - bin/check-syntax.sh
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/bin/check-syntax.sh
new file mode 100755
index 0000000000..53830b50b2
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find lib tests templates www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/composer.json
new file mode 100644
index 0000000000..20f77a7d58
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-preprodwarning",
+    "description": "Display a warning when using a pre-production environment",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "preprodwarning"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\preprodwarning\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~5.7",
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "webmozart/assert": "^1.4"
+    },
+    "support": {
+        "issues": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning/issues",
+        "source": "https://github.com/simplesamlphp/simplesamlphp-module-preprodwarning"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/dictionaries/warning.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/dictionaries/warning.translation.json
index 206f63fd8c..b41c698c0c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/dictionaries/warning.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/dictionaries/warning.translation.json
@@ -32,7 +32,8 @@
 		"ro": "\u00cen acest moment accesa\u021bi un sistem pre-produc\u021bie. Acest sistem de autentificare este realizat doar pentru testare \u0219i verificare. Dac\u0103 a\u021bi primit de la cineva acest link \u0219i nu sunte\u021bi <i>tester<\/i>, atunci probabil a\u021bi primit un link gre\u0219it \u0219i <b>nu<\/b> ar fi trebuit s\u0103 ajunge\u021bi aici.",
 		"eu": "Aurre-produzkio batean sartzen ari zara. Konfigurazio hau aurre-produkzioko sistemaren frogak egin eta egiaztatzeko bakarrik da. Hona iristeko norbaitek bidali dizun lotura bat jarraitu baduzu eta <i>frogatzaile<\/i> bat ez bazara, ziurrenik errore bat izango da, eta zuk <b>ez zenuke hemen egon behar<\/b>.",
 		"af": "Jy het nou toegang gekry tot 'n pre-produksie stelsel. Di\u00e9 verifikasie opstel is vir die toets en pre-produksie verifikasie aleen. Indien iemand vir jou 'n skakel gestuur wat na hier verwys en jy is nie <i> 'n toets persoon nie <\/i> het jy waarskynlik die verkeerde skakel en moet <b> jy nie hier <\/b> wees nie.",
-		"el": "\u0395\u03b9\u03c3\u03ad\u03c1\u03c7\u03b5\u03c3\u03c4\u03b5 \u03c3\u03b5 \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b5\u03be\u03c5\u03c0\u03b7\u03c1\u03b5\u03c4\u03b5\u03af \u03b1\u03c0\u03bf\u03ba\u03bb\u03b5\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd\u03c2 \u03c3\u03ba\u03bf\u03c0\u03bf\u03cd\u03c2. \u0391\u03bd \u03bf\u03b4\u03b7\u03b3\u03b7\u03b8\u03ae\u03ba\u03b1\u03c4\u03b5 \u03b5\u03b4\u03ce \u03bc\u03ad\u03c3\u03c9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03b5\u03bd\u03ce \u03b4\u03b5\u03bd \u03b5\u03af\u03c3\u03c4\u03b5 <i>\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03ae\u03c2 (tester)<\/i>, \u03c4\u03cc\u03c4\u03b5 \u03c0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03c0\u03b5\u03c1\u03af \u03bb\u03ac\u03b8\u03bf\u03c5\u03c2 \u03ba\u03b1\u03b9 <b>\u03b4\u03b5\u03bd \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c3\u03c4\u03b5 \u03b5\u03b4\u03ce<\/b>."
+		"el": "\u0395\u03b9\u03c3\u03ad\u03c1\u03c7\u03b5\u03c3\u03c4\u03b5 \u03c3\u03b5 \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b5\u03be\u03c5\u03c0\u03b7\u03c1\u03b5\u03c4\u03b5\u03af \u03b1\u03c0\u03bf\u03ba\u03bb\u03b5\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd\u03c2 \u03c3\u03ba\u03bf\u03c0\u03bf\u03cd\u03c2. \u0391\u03bd \u03bf\u03b4\u03b7\u03b3\u03b7\u03b8\u03ae\u03ba\u03b1\u03c4\u03b5 \u03b5\u03b4\u03ce \u03bc\u03ad\u03c3\u03c9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03b5\u03bd\u03ce \u03b4\u03b5\u03bd \u03b5\u03af\u03c3\u03c4\u03b5 <i>\u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03ae\u03c2 (tester)<\/i>, \u03c4\u03cc\u03c4\u03b5 \u03c0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03c0\u03b5\u03c1\u03af \u03bb\u03ac\u03b8\u03bf\u03c5\u03c2 \u03ba\u03b1\u03b9 <b>\u03b4\u03b5\u03bd \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c3\u03c4\u03b5 \u03b5\u03b4\u03ce<\/b>.",
+		"ca": "Ara teniu accés a un sistema de preproducció. Aquesta configuració d’autenticació és només per a comprovacions de proves i preproducció. Si algú us ha enviat un enllaç que us porta aquí, i no ets <i>un provador<\/i> segurament tens un enllaç incorrecte, i <b>hauries d'estar aquí<\/b>."
 	},
 	"warning_header": {
 		"no": "Advarsel om at dette er et test oppsett",
@@ -67,7 +68,8 @@
 		"sr": "Upozorenje o pristupanju pred-produkcionom sistemu",
 		"ro": "Aten\u021bionare privind accesarea unui sistem pre-produc\u021bie",
 		"af": "Waarskuwing oor toegang na 'n pre-produksie stelsel",
-		"el": "\u03a0\u03c1\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03af\u03c3\u03bf\u03b4\u03bf \u03c3\u03b5 \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd"
+		"el": "\u03a0\u03c1\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03b5\u03af\u03c3\u03bf\u03b4\u03bf \u03c3\u03b5 \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd",
+		"ca": "Avís sobre l'accés a un sistema de preproducció"
 	},
 	"yes": {
 		"no": "Ja, jeg holder p\u00e5 \u00e5 teste innlogging, og vet dette er et test-system.",
@@ -102,6 +104,7 @@
 		"sr": "Da, znam da pristupam sistemu koji je u pred-produkcionoj fazi",
 		"ro": "Da, \u00een\u021beleg c\u0103 accesez un sistem pre-produc\u021bie",
 		"af": "Ja, ek weet ek verkry toegang tot 'n pre-produksie stelsel",
-		"el": "\u039d\u03b1\u03b9\u002c \u03b3\u03bd\u03c9\u03c1\u03af\u03b6\u03c9 \u03cc\u03c4\u03b9 \u03b5\u03b9\u03c3\u03ad\u03c1\u03c7\u03bf\u03bc\u03b1\u03b9 \u03c3\u03b5 \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd"
+		"el": "\u039d\u03b1\u03b9\u002c \u03b3\u03bd\u03c9\u03c1\u03af\u03b6\u03c9 \u03cc\u03c4\u03b9 \u03b5\u03b9\u03c3\u03ad\u03c1\u03c7\u03bf\u03bc\u03b1\u03b9 \u03c3\u03b5 \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd",
+		"ca": "Sí, sé que estic accedint a un sistema de preproducció"
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/lib/Auth/Process/Warning.php b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/lib/Auth/Process/Warning.php
index bbc6fdadb2..6a7c7925d1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/lib/Auth/Process/Warning.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/lib/Auth/Process/Warning.php
@@ -17,6 +17,7 @@ class Warning extends \SimpleSAML\Auth\ProcessingFilter
      * can authorize the release of the attributes.
      *
      * @param array $state  The state of the response.
+     * @return void
      */
     public function process(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/locales/nl/LC_MESSAGES/preprodwarning.po b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/locales/nl/LC_MESSAGES/preprodwarning.po
index e282707afd..5e9588b441 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/locales/nl/LC_MESSAGES/preprodwarning.po
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/locales/nl/LC_MESSAGES/preprodwarning.po
@@ -21,7 +21,7 @@ msgstr "Waarschuwing: dit is een pre-productiesysteem"
 msgid "{preprodwarning:warning:warning}"
 msgstr ""
 "Je gaat nu een pre-productiesysteem gebruiken. Deze authenticatie is "
-"uitsluitend opgezet voor testen en pre-productie-verfificatie. Als iemand"
+"uitsluitend opgezet voor testen en pre-productie-verificatie. Als iemand"
 " je een link hierheen stuurde, en je bent geen <i>tester</i>, dan is dit "
 "waarschijnlijk een vergissing en zou je <b>niet hier moeten zijn</b>."
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/psalm.xml
new file mode 100644
index 0000000000..3ec2e3d6ca
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="The SimpleSAMLphp preprodwarning module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="templates" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/tests/bootstrap.php
new file mode 100644
index 0000000000..28efee11df
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/preprodwarning/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/sqlauth';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/radius/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/radius/.php_cs.dist
new file mode 100644
index 0000000000..e7d314696c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/.php_cs.dist
@@ -0,0 +1,15 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/radius/.travis.yml
new file mode 100644
index 0000000000..4f0285088c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm; fi
+
+script:
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/radius/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/radius/composer.json
new file mode 100644
index 0000000000..f3da12a435
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-radius",
+    "description": "A module that is able perform authentication against a RADIUS server",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "radius"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Olav Morken",
+            "email": "olavmrk@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\radius\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.7",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-radius/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-radius"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/lib/Auth/Source/Radius.php b/vendor/simplesamlphp/simplesamlphp/modules/radius/lib/Auth/Source/Radius.php
index 70a192b413..e6e7c032ab 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/radius/lib/Auth/Source/Radius.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/lib/Auth/Source/Radius.php
@@ -9,64 +9,64 @@
  *
  * @package SimpleSAMLphp
  */
-
 class Radius extends \SimpleSAML\Module\core\Auth\UserPassBase
 {
     /**
-     * The list of radius servers to use.
+     * @var array The list of radius servers to use.
      */
     private $servers;
 
     /**
-     * The hostname of the radius server.
+     * @var string The hostname of the radius server.
      */
     private $hostname;
 
     /**
-     * The port of the radius server.
+     * @var int The port of the radius server.
      */
     private $port;
 
     /**
-     * The secret used when communicating with the radius server.
+     * @var string The secret used when communicating with the radius server.
      */
     private $secret;
 
     /**
-     * The timeout for contacting the radius server.
+     * @var int The timeout for contacting the radius server.
      */
     private $timeout;
 
     /**
-     * The number of retries which should be attempted.
+     * @var int The number of retries which should be attempted.
      */
     private $retries;
 
     /**
-     * The realm to be added to the entered username.
+     * Var string The realm to be added to the entered username.
      */
     private $realm;
 
     /**
-     * The attribute name where the username should be stored.
+     * @var string|null The attribute name where the username should be stored.
      */
-    private $usernameAttribute;
+    private $usernameAttribute = null;
 
     /**
-     * The vendor for the RADIUS attributes we are interrested in.
+     * @var string|null The vendor for the RADIUS attributes we are interrested in.
      */
-    private $vendor;
+    private $vendor = null;
 
     /**
-     * The vendor-specific attribute for the RADIUS attributes we are
-     * interrested in.
+     * @var string The vendor-specific attribute for the RADIUS attributes we are
+     *     interrested in.
      */
     private $vendorType;
 
     /**
-     * The NAS-Identifier that should be set in Access-Request packets.
+     * @var string|null The NAS-Identifier that should be set in Access-Request packets.
      */
-    private $nasIdentifier;
+    private $nasIdentifier = null;
+
 
     /**
      * Constructor for this authentication source.
@@ -83,35 +83,35 @@ public function __construct($info, $config)
         parent::__construct($info, $config);
 
         // Parse configuration.
-        $config = \SimpleSAML\Configuration::loadFromArray(
+        $cfg = \SimpleSAML\Configuration::loadFromArray(
             $config,
-            'Authentication source '.var_export($this->authId, true)
+            'Authentication source ' . var_export($this->authId, true)
         );
 
-        $this->servers = $config->getArray('servers', []);
+        $this->servers = $cfg->getArray('servers', []);
         // For backwards compatibility
         if (empty($this->servers)) {
-            $this->hostname = $config->getString('hostname');
-            $this->port = $config->getIntegerRange('port', 1, 65535, 1812);
-            $this->secret = $config->getString('secret');
+            $this->hostname = $cfg->getString('hostname');
+            $this->port = $cfg->getIntegerRange('port', 1, 65535, 1812);
+            $this->secret = $cfg->getString('secret');
             $this->servers[] = [
                 'hostname' => $this->hostname,
                 'port' => $this->port,
                 'secret' => $this->secret
             ];
         }
-        $this->timeout = $config->getInteger('timeout', 5);
-        $this->retries = $config->getInteger('retries', 3);
-        $this->realm = $config->getString('realm', null);
-        $this->usernameAttribute = $config->getString('username_attribute', null);
-        $this->nasIdentifier = $config->getString(
+        $this->timeout = $cfg->getInteger('timeout', 5);
+        $this->retries = $cfg->getInteger('retries', 3);
+        $this->realm = $cfg->getString('realm', null);
+        $this->usernameAttribute = $cfg->getString('username_attribute', null);
+        $this->nasIdentifier = $cfg->getString(
             'nas_identifier',
             \SimpleSAML\Utils\HTTP::getSelfHost()
         );
 
-        $this->vendor = $config->getInteger('attribute_vendor', null);
+        $this->vendor = $cfg->getInteger('attribute_vendor', null);
         if ($this->vendor !== null) {
-            $this->vendorType = $config->getInteger('attribute_vendor_type');
+            $this->vendorType = $cfg->getInteger('attribute_vendor_type');
         }
     }
 
@@ -121,7 +121,7 @@ public function __construct($info, $config)
      *
      * @param string $username  The username the user wrote.
      * @param string $password  The password the user wrote.
-     * @return array  Associative array with the user's attributes.
+     * @return array[] Associative array with the user's attributes.
      */
     protected function login($username, $password)
     {
@@ -129,6 +129,9 @@ protected function login($username, $password)
         assert(is_string($password));
 
         $radius = radius_auth_open();
+        if (!is_resource($radius)) {
+            throw new \Exception("Insufficient memory available to create handle.");
+        }
 
         // Try to add all radius servers, trigger a failure if no one works
         $success = false;
@@ -136,16 +139,18 @@ protected function login($username, $password)
             if (!isset($server['port'])) {
                 $server['port'] = 1812;
             }
-            if (!radius_add_server(
-                $radius,
-                $server['hostname'],
-                $server['port'],
-                $server['secret'],
-                $this->timeout,
-                $this->retries
-            )) {
+            if (
+                !radius_add_server(
+                    $radius,
+                    $server['hostname'],
+                    $server['port'],
+                    $server['secret'],
+                    $this->timeout,
+                    $this->retries
+                )
+            ) {
                 \SimpleSAML\Logger::info(
-                    "Could not add radius server: ".radius_strerror($radius)
+                    "Could not add radius server: " . radius_strerror($radius)
                 );
                 continue;
             }
@@ -157,14 +162,14 @@ protected function login($username, $password)
 
         if (!radius_create_request($radius, \RADIUS_ACCESS_REQUEST)) {
             throw new \Exception(
-                'Error creating radius request: '.radius_strerror($radius)
+                'Error creating radius request: ' . radius_strerror($radius)
             );
         }
 
         if ($this->realm === null) {
             radius_put_attr($radius, \RADIUS_USER_NAME, $username);
         } else {
-            radius_put_attr($radius, \RADIUS_USER_NAME, $username.'@'.$this->realm);
+            radius_put_attr($radius, \RADIUS_USER_NAME, $username . '@' . $this->realm);
         }
         radius_put_attr($radius, \RADIUS_USER_PASSWORD, $password);
 
@@ -182,7 +187,7 @@ protected function login($username, $password)
                     throw new \Exception('Radius authentication error: Challenge requested, but not supported.');
                 default:
                     throw new \Exception(
-                        'Error during radius authentication: '.radius_strerror($radius)
+                        'Error during radius authentication: ' . radius_strerror($radius)
                     );
             }
         }
@@ -190,9 +195,10 @@ protected function login($username, $password)
         // If we get this far, we have a valid login
 
         $attributes = [];
+        $usernameAttribute = $this->usernameAttribute;
 
-        if ($this->usernameAttribute !== null) {
-            $attributes[$this->usernameAttribute] = [$username];
+        if ($usernameAttribute !== null) {
+            $attributes[$usernameAttribute] = [$username];
         }
 
         if ($this->vendor === null) {
@@ -207,13 +213,13 @@ protected function login($username, $password)
         while ($resa = radius_get_attr($radius)) {
             if (!is_array($resa)) {
                 throw new \Exception(
-                    'Error getting radius attributes: '.radius_strerror($radius)
+                    'Error getting radius attributes: ' . radius_strerror($radius)
                 );
             }
 
             // Use the received user name
-            if ($resa['attr'] == \RADIUS_USER_NAME) {
-                $attributes[$this->usernameAttribute] = [$resa['data']];
+            if ($resa['attr'] === \RADIUS_USER_NAME && $usernameAttribute !== null) {
+                $attributes[$usernameAttribute] = [$resa['data']];
                 continue;
             }
 
@@ -222,9 +228,9 @@ protected function login($username, $password)
             }
 
             $resv = radius_get_vendor_attr($resa['data']);
-            if (!is_array($resv)) {
+            if ($resv === false) {
                 throw new \Exception(
-                    'Error getting vendor specific attribute: '.radius_strerror($radius)
+                    'Error getting vendor specific attribute: ' . radius_strerror($radius)
                 );
             }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/radius/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/radius/psalm.xml
new file mode 100644
index 0000000000..b533aeaa54
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/psalm.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Radius authsource"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+
+    <stubs>
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/radius.php" />
+    </stubs>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/radius/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/radius/tests/bootstrap.php
new file mode 100644
index 0000000000..9cb3177a2c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/radius/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/radius';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/riak/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/riak/.php_cs.dist
new file mode 100644
index 0000000000..88f0c20358
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/.php_cs.dist
@@ -0,0 +1,17 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/hooks',
+        __DIR__ . '/tests',
+        __DIR__ . '/config-templates',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/riak/.travis.yml
new file mode 100644
index 0000000000..fec43ab41a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/.travis.yml
@@ -0,0 +1,31 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/riak/LICENSE
new file mode 100644
index 0000000000..f288702d2f
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/README.md b/vendor/simplesamlphp/simplesamlphp/modules/riak/README.md
new file mode 100644
index 0000000000..08083ca31a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/README.md
@@ -0,0 +1,2 @@
+# simplesamlphp-module-riak
+This module implements the Riak session store
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/riak/bin/check-syntax.sh
new file mode 100755
index 0000000000..6938306b36
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates hooks lib tests -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/riak/composer.json
new file mode 100644
index 0000000000..10fc58404c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-riak",
+    "description": "A module that is able to store key/value pairs in a Riak store",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "riak"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Tim van Dijen",
+            "email": "tvdijen@gmail.com"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\riak\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "phpfastcache/riak-client": "^3.4"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-riak/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-riak"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/config-templates/module_riak.php b/vendor/simplesamlphp/simplesamlphp/modules/riak/config-templates/module_riak.php
index 99f535fee5..355711794f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/riak/config-templates/module_riak.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/config-templates/module_riak.php
@@ -1,16 +1,14 @@
 <?php
-/*
+
+/**
  * The configuration of the riak Store module
  *
  */
 
 $config = [
-    /*
-     * This module has the following config options and defaults.
-     *
-     * 'path' => 'riak-php-client/riak.php',
-     * 'host' => 'localhost',
-     * 'port' => 8098,
-     * 'bucket' => 'SimpleSAMLphp',
-     */
+    'host' => 'localhost',
+    'port' => 8098,
+
+    // The name of the store
+    'bucket' => 'SimpleSAMLphp',
 ];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/docs/simplesamlphp-riak.md b/vendor/simplesamlphp/simplesamlphp/modules/riak/docs/simplesamlphp-riak.md
index c5e13a7210..1598d8a4e4 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/riak/docs/simplesamlphp-riak.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/docs/simplesamlphp-riak.md
@@ -29,10 +29,7 @@ indexes. Refer to the Riak documentation on how to enable an
 appropriate backend for use by this module. Currently the only
 storage backend that supports secondary indexes is leveldb.
 
-Next, you will need to install the Riak PHP Client library, available
-from https://github.com/basho/riak-php-client.
-
-Finally, you need to config SimpleSAMLphp to for the riak Store by
+Finally, you need to config SimpleSAMLphp to use the riak Store by
 enabling the following modules:
 
  1. cron
@@ -103,15 +100,14 @@ Configuring the riak module
 The riak module uses the following configuration options specified
 in `config/module_riak.php`. The defaults are listed:
 
-	$config = array(
-		'path' => 'riak-php-client/riak.php',
+	$config = [
 		'host' => 'localhost',
 		'port' => 8098,
 		'bucket' => 'SimpleSAMLphp',
-	);
+	];
 
 Finally, the module can be specified as the Store in `config/config.php`
 with the following setting:
 
-		'store.type' => 'riak:Store',
+		'store.type' => 'riak:Riak',
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/hooks/hook_cron.php b/vendor/simplesamlphp/simplesamlphp/modules/riak/hooks/hook_cron.php
index c42d2c313e..63d7099808 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/riak/hooks/hook_cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/hooks/hook_cron.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\Module\riak;
-
 /*
  * Copyright (c) 2012 The University of Queensland
  *
@@ -28,6 +26,7 @@
  * Hook to run a cron job.
  *
  * @param array &$croninfo  Output
+ * @return void
  */
 function riak_hook_cron(&$croninfo)
 {
@@ -40,17 +39,22 @@ function riak_hook_cron(&$croninfo)
     }
 
     try {
-        $store = new \SimpleSAML\Module\riak\Store\Store();
-        $result = $store->bucket->indexSearch('expires', 'int', 1, time() - 30);
-        foreach ($result as $link) {
-            $link->getBinary()->delete();
+        $store = new \SimpleSAML\Module\riak\Store\Riak();
+        $result = $store->getExpired();
+
+        if ($result === null) {
+            $result = [];
+        } else {
+            foreach ($result as $key) {
+                $store->delete('session', $key);
+            }
         }
 
         \SimpleSAML\Logger::info(
             sprintf("deleted %s riak key%s", sizeof($result), sizeof($result) == 1 ? '' : 's')
         );
     } catch (\Exception $e) {
-        $message = 'riak threw exception: '.$e->getMessage();
+        $message = 'riak threw exception: ' . $e->getMessage();
         \SimpleSAML\Logger::warning($message);
         $croninfo['summary'][] = $message;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Riak.php b/vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Riak.php
new file mode 100644
index 0000000000..94aa1c63fc
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Riak.php
@@ -0,0 +1,175 @@
+<?php
+
+/*
+ * Copyright (c) 2012 The University of Queensland
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Written by David Gwynne <dlg@uq.edu.au> as part of the IT
+ * Infrastructure Group in the Faculty of Engineering, Architecture
+ * and Information Technology.
+ *
+ * @package SimpleSAMLphp
+ * Rewriten by Tim van Dijen for SimpleSAMLphp
+ */
+
+namespace SimpleSAML\Module\riak\Store;
+
+use Basho\Riak\Bucket;
+use Basho\Riak\Command\Builder\DeleteObject;
+use Basho\Riak\Command\Builder\FetchObject;
+use Basho\Riak\Command\Builder\StoreObject;
+use Basho\Riak\Command\Builder\QueryIndex;
+use Basho\Riak\Location;
+use Basho\Riak\Node;
+use Basho\Riak\DataObject;
+use Basho\Riak as RiakClient;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error\CriticalConfigurationError;
+use Webmozart\Assert\Assert;
+
+class Riak extends \SimpleSAML\Store
+{
+    /** @var \Basho\Riak */
+    protected $client;
+
+    /** @var string */
+    protected $bucket_name;
+
+    /** @var \Basho\Riak\Bucket */
+    protected $bucket;
+
+    /** @var \Basho\Riak\Location|null */
+    protected $location = null;
+
+
+    public function __construct()
+    {
+        $config = Configuration::getConfig('module_riak.php');
+
+        $host = $config->getString('host', 'localhost');
+        $port = $config->getInteger('port', 8098);
+
+        $node = (new Node\Builder())
+            ->atHost($host)
+            ->onPort($port)
+            ->build();
+
+        $this->client = new RiakClient([$node]);
+        $this->bucket_name = $config->getString('bucket', 'simpleSAMLphp');
+
+        $this->bucket = new Bucket($this->bucket_name);
+    }
+
+
+    /**
+     * Retrieve a value from the datastore.
+     *
+     * @param string $type The datatype.
+     * @param string $key The key.
+     * @return mixed|null The value.
+     */
+    public function get($type, $key)
+    {
+        assert(is_string($type));
+        assert(is_string($key));
+
+        $key = 'key_' . $key;
+        $this->location = new Location($key, $this->bucket);
+
+        $response = (new FetchObject($this->client))
+            ->atLocation($this->location)
+            ->build()
+            ->execute();
+
+        if ($response->getObject() === null) {
+            return null;
+        }
+
+        $data = $response->getObject()->getData();
+        $data_decoded = unserialize(json_decode($data, true));
+
+        return $data_decoded[$key];
+    }
+
+
+    /**
+     * Save a value to the datastore.
+     *
+     * @param string $type The datatype.
+     * @param string $key The key.
+     * @param mixed $value The value.
+     * @param int|null $expire The expiration time (unix timestamp), or NULL if it never expires.
+     * @return void
+     */
+    public function set($type, $key, $value, $expire = null)
+    {
+        assert(is_string($type));
+        assert(is_string($key));
+        assert(is_null($expire) || is_int($expire));
+        assert($expire > 2592000);
+
+        $key = 'key_' . $key;
+        $this->location = new Location($key, $this->bucket);
+
+        $data = serialize([$key => $value]);
+        if (is_null($expire)) {
+            $object = new DataObject(json_encode($data), ['Content-type' => 'application/json']);
+        } else {
+            $object = (new DataObject(json_encode($data), ['Content-type' => 'application/json']))
+              ->addValueToIndex('expire_int', time() + $expire);
+        }
+
+        $storecmd = (new StoreObject($this->client))
+            ->withObject($object)
+            ->atLocation($this->location)
+            ->build();
+        $storecmd->execute();
+    }
+
+
+    /**
+     * @return array|null
+     */
+    public function getExpired()
+    {
+        $results = (new QueryIndex($this->client))
+          ->inBucket($this->bucket)
+          ->withIndexName('expire_int')
+          ->withRangeValue(0, time())
+          ->build()
+          ->execute()
+          ->getResults();
+
+        return $results;
+    }
+
+
+    /**
+     * Delete a value from the datastore.
+     *
+     * @param string $type The datatype.
+     * @param string $key The key.
+     * @return void
+     */
+    public function delete($type, $key)
+    {
+        assert(is_string($type));
+        assert(is_string($key));
+
+        $key = 'key_' . $key;
+        $this->location = new Location($key, $this->bucket);
+
+        (new DeleteObject($this->client))->atLocation($this->location)->build()->execute();
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Store.php b/vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Store.php
deleted file mode 100644
index c44f599502..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/modules/riak/lib/Store/Store.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace SimpleSAML\Module\riak\Store;
-
-/*
- * Copyright (c) 2012 The University of Queensland
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Written by David Gwynne <dlg@uq.edu.au> as part of the IT
- * Infrastructure Group in the Faculty of Engineering, Architecture
- * and Information Technology.
- */
-
-class Store extends \SimpleSAML\Store
-{
-    public $client;
-    public $bucket;
-
-    protected function __construct()
-    {
-        $config = \SimpleSAML\Configuration::getConfig('module_riak.php');
-
-        $path = $config->getString('path', 'riak-php-client/riak.php');
-        $host = $config->getString('host', 'localhost');
-        $port = $config->getString('port', 8098);
-        $bucket = $config->getString('bucket', 'simpleSAMLphp');
-
-        require_once($path);
-        $this->client = new \RiakClient($host, $port);
-        $this->bucket = $this->client->bucket($bucket);
-    }
-
-    /**
-     * Retrieve a value from the datastore.
-     *
-     * @param string $type  The datatype.
-     * @param string $key  The key.
-     * @return mixed|NULL  The value.
-     */
-    public function get($type, $key)
-    {
-        assert(is_string($type));
-        assert(is_string($key));
-
-        $v = $this->bucket->getBinary("$type.$key");
-        if (!$v->exists()) {
-            return null;
-        }
-
-        $expires = $v->getIndex('Expires', 'int');
-        if (sizeof($expires) && (int) array_shift($expires) <= time()) {
-            $v->delete();
-            return null;
-        }
-
-        return (unserialize($v->getData()));
-    }
-
-    /**
-     * Save a value to the datastore.
-     *
-     * @param string $type  The datatype.
-     * @param string $key  The key.
-     * @param mixed $value  The value.
-     * @param int|NULL $expire  The expiration time (unix timestamp), or NULL if it never expires.
-     */
-    public function set($type, $key, $value, $expire = null)
-    {
-        assert(is_string($type));
-        assert(is_string($key));
-        assert($expire === null || (is_int($expire) && $expire > 2592000));
-
-        $v = $this->bucket->newBinary("$type.$key", serialize($value), 'application/php');
-        if (!is_null($expire)) {
-            $v->addIndex("Expires", "int", $expire);
-        }
-
-        $v->store();
-    }
-
-    /**
-     * Delete a value from the datastore.
-     *
-     * @param string $type  The datatype.
-     * @param string $key  The key.
-     */
-    public function delete($type, $key)
-    {
-        assert(is_string($type));
-        assert(is_string($key));
-
-        $v = $this->bucket->getBinary("$type.$key");
-        if (!$v->exists()) {
-            return;
-        }
-        $v->delete();
-    }
-}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/riak/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/riak/psalm.xml
new file mode 100644
index 0000000000..84f09c7494
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/psalm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp Riak"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-templates" />
+        <directory name="lib" />
+        <directory name="hooks" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/riak/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/riak/tests/bootstrap.php
new file mode 100644
index 0000000000..2e7ccd2f95
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/riak/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/riak';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/proxy.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/proxy.translation.json
index bf80ff4caf..040f7ee3b2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/proxy.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/proxy.translation.json
@@ -3,12 +3,14 @@
     "zh-tw": "\u7121\u6548\u7684\u9a57\u8b49\u63d0\u4f9b\u8005",
     "es": "Proveedor de Identidad inválido",
     "zu": "Umhlinzeki Kamazisi Ongalungile",
-    "xh": "Isiboneleli Sesazisi Esingasebenziyo"
+    "xh": "Isiboneleli Sesazisi Esingasebenziyo",
+    "ca": "Proveïdor d’identitat no vàlid"
   },
   "invalid_idp_description": {
     "zh-tw": "\u60a8\u5df2\u7d93\u64c1\u6709\u4e00\u500b\u9a57\u8b49\u63d0\u4f9b\u8005 (<em>%IDP%</em>) \u7684\u6709\u6548\u7684\u9023\u7dda\uff0c\u4f46\u8a72\u9023\u7dda\u7121\u6cd5\u88ab <em>%SP%</em> \u6240\u63a5\u53d7\u3002\u60a8\u662f\u5426\u60f3\u8981\u767b\u51fa\u65e2\u6709\u7684\u9023\u7dda\u4e26\u91cd\u65b0\u7531\u5176\u4ed6\u9a57\u8b49\u63d0\u4f9b\u8005\u9032\u884c\u767b\u5165\uff1f",
     "es": "Ya existe una sesión válida con un proveedor de identidad (<em>%IDP%</em>) que <em>%SP%</em> no acepta. ¿Desea cerrar su sesión actual e iniciar una nueva con otro proveedor de identidad?",
     "zu": "Kakade uneseshini evumelekile nomhlinzeki kamazisi (<em>%IDP%</em>) engamukelwa okuthi <em>%SP%</em>. Ungathanda ukuphuma kuseshini yakho ekhona kakade futhi uphinde ungene ngomunye umhlinzeki kamazisi?",
-    "xh": "Sele unayo iseshoni esebenzayo nomboneleli wesazisi (<em>%IDP%</em>) engamkelwanga yi-<em>%SP%</em>. Ingaba ungathanda ukuphuma kwiseshoni yakho esele ikho uze ungene kwakhona ngomnye umboneleli wesazisi?"
+    "xh": "Sele unayo iseshoni esebenzayo nomboneleli wesazisi (<em>%IDP%</em>) engamkelwanga yi-<em>%SP%</em>. Ingaba ungathanda ukuphuma kwiseshoni yakho esele ikho uze ungene kwakhona ngomnye umboneleli wesazisi?",
+    "ca": "Ja teniu una sessió vàlida amb un proveïdor d’identitats (<em>%IDP%</em>) que no es acceptada per <em>%SP%</em>. Voleu sortir de la sessió existent i tornar a iniciar sessió amb un altre proveïdor d’identitat?"
   }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/wrong_authncontextclassref.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/wrong_authncontextclassref.translation.json
index 9cb912f457..a9aafd28dc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/wrong_authncontextclassref.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/dictionaries/wrong_authncontextclassref.translation.json
@@ -22,7 +22,8 @@
 		"id": "Konteks otentikasi keliru",
 		"zh-tw": "\u932f\u8aa4\u7684\u9a57\u8b49\u5167\u5bb9",
 		"af": "Verkeerde verifikasie konteks",
-		"el": "\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03b7 \u03bc\u03ad\u03b8\u03bf\u03b4\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2"
+		"el": "\u0395\u03c3\u03c6\u03b1\u03bb\u03bc\u03ad\u03bd\u03b7 \u03bc\u03ad\u03b8\u03bf\u03b4\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
+		"ca": "Context d’autenticació incorrecte"
 	},
 	"description": {
 		"hu": "A m\u00f3d, ahogyan azonos\u00edtott t\u00e9ged a szem\u00e9lyazonoss\u00e1g szolg\u00e1ltat\u00f3d, nem elfogadott enn\u00e9l a szolg\u00e1ltat\u00e1sn\u00e1l. Val\u00f3sz\u00edn\u0171leg t\u00fal gyenge, vagy nem k\u00e9tfaktoros.",
@@ -47,6 +48,7 @@
 		"id": "Konteks otentikasi Anda tidak tersedia pada layanan ini. Mungkin terlalu lemah atau bukan keamanan-ganda.",
 		"zh-tw": "\u60a8\u7684\u9a57\u8b49\u5167\u5bb9\u7121\u6cd5\u88ab\u6b64\u670d\u52d9\u63a5\u53d7\u3002\u53ef\u80fd\u662f\u5f37\u5ea6\u592a\u5f31\u6216\u662f\u672a\u4f7f\u7528\u5169\u6bb5\u5f0f\u9a57\u8b49 (2-factor)\u3002",
 		"af": "Jou verifikasie konteks is nie deur die diens aanvaar nie. Waarskynlik te swak of nie twee-faktor nie.",
-		"el": "\u0397 \u03bc\u03ad\u03b8\u03bf\u03b4\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03ae \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1. \u03a0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bf\u03bb\u03cd \u03b1\u03b4\u03cd\u03bd\u03b1\u03bc\u03b7, \u03c0.\u03c7. \u03b4\u03b5\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03b5\u03c0\u03b1\u03bb\u03ae\u03b8\u03b5\u03c5\u03c3\u03b7 \u03b4\u03cd\u03bf \u03b2\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd."
+		"el": "\u0397 \u03bc\u03ad\u03b8\u03bf\u03b4\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c0\u03bf\u03b4\u03b5\u03ba\u03c4\u03ae \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1. \u03a0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bf\u03bb\u03cd \u03b1\u03b4\u03cd\u03bd\u03b1\u03bc\u03b7, \u03c0.\u03c7. \u03b4\u03b5\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03b5\u03c0\u03b1\u03bb\u03ae\u03b8\u03b5\u03c5\u03c3\u03b7 \u03b4\u03cd\u03bf \u03b2\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd.",
+		"ca": "Aquest servei no accepta el vostre context d’autenticació. Probablement és massa feble o sense doble factor."
 	}
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/filterscopes.md b/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/filterscopes.md
index a3c28fa4fa..e930244d82 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/filterscopes.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/filterscopes.md
@@ -36,36 +36,36 @@ Examples
 --------
 
 Basic configuration:
-```php
-    'authproc' => array(
-        90 => array(
+```
+    'authproc' => [
+        90 => [
             'class' => 'saml:FilterScopes',
-        ),
-    ),
+        ],
+    [,
 ```
 
 Specify `mail` and `eduPersonPrincipalName` as scoped attributes:
-```php
-    'authproc' => array(
-        90 => array(
+```
+    'authproc' => [
+        90 => [
             'class' => 'saml:FilterScopes',
-            'attributes' => array(
+            'attributes' => [
                 'mail',
                 'eduPersonPrincipalName',
-            ),
-        ),
-    ),
+            ],
+        ],
+    ],
 ```
 
 Specify the same attributes in OID format:
-```php
-    'authproc' => array(
-        90 => array(
+```
+    'authproc' => [
+        90 => [
             'class' => 'saml:FilterScopes',
-            'attributes' => array(
+            'attributes' => [
                 'urn:oid:0.9.2342.19200300.100.1.3',
                 'urn:oid:1.3.6.1.4.1.5923.1.1.1.6',
-            ),
-        ),
-    ),
+            ],
+        ],
+    ],
 ```
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/nameid.md b/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/nameid.md
index 2c719552cd..bf3ae2b848 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/nameid.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/nameid.md
@@ -63,10 +63,11 @@ No extra options are available for this filter.
 `saml:SQLPersistentNameID`
 --------------------------
 
-Generates and stores persistent NameIDs in a SQL datastore.
+Generates and stores persistent NameIDs in a SQL database.
 
-This filter generates and stores a persistent NameID in a SQL datastore.
-To use this filter, SimpleSAMLphp must be configured to use a SQL datastore.
+This filter generates and stores a persistent NameID in a SQL database.
+To use this filter, either specify the `store` option and a database,
+or configure SimpleSAMLphp to use a SQL datastore.
 See the `store.type` configuration option in `config.php`.
 
 ### Options
@@ -86,6 +87,10 @@ See the `store.type` configuration option in `config.php`.
 :   Whether to ignore an explicit `AllowCreate="false"` in the authentication request's NameIDPolicy.
     The default is `FALSE`, which will only create new NameIDs when the SP specifies `AllowCreate="true"` in the authentication request.
 
+`store`
+:   An array of database options passed to `\SimpleSAML\Database`, keys prefixed with `database.`.
+    The default is `[]`, which uses the global SQL datastore.
+
 Setting both `allowUnspecified` and `alwaysCreate` to `TRUE` causes `saml:SQLPersistentNameID` to behave like `saml:PersistentNameID` (and other NameID generation filters), at the expense of creating unnecessary entries in the SQL datastore.
 
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/sp.md b/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/sp.md
index f03a7478ff..45da3fb1af 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/sp.md
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/docs/sp.md
@@ -9,11 +9,12 @@ Metadata
 
 The metadata for your SP will be available from the federation page on your SimpleSAMLphp installation.
 
-SimpleSAMLphp supports generating metadata with the MDUI and MDRPI metadata extensions.
-See the documentation for those extensions for more details:
+SimpleSAMLphp supports generating metadata with the MDUI and MDRPI metadata extensions
+and with entity attributes. See the documentation for those extensions for more details:
 
   * [MDUI extension](./simplesamlphp-metadata-extensions-ui)
   * [MDRPI extension](./simplesamlphp-metadata-extensions-rpi)
+  * [Attributes extension](./simplesamlphp-metadata-extensions-attributes)
 
 
 Parameters
@@ -120,6 +121,11 @@ Options
 
 :   *Note*: SAML 2 specific.
 
+`AssertionConsumerService`
+:   List of Assertion Consumer Services in the generated metadata. Specified in the array of
+    arrays format as seen in the [Metadata endpoints](./simplesamlphp-metadata-endpoints)
+    documentation.
+
 `attributes`
 :   List of attributes this SP requests from the IdP.
     This list will be added to the generated metadata.
@@ -212,9 +218,9 @@ Options
      When set to `TRUE`, no scoping elements will be sent. This does not comply with the SAML2 specification, but allows
      interoperability with ADFS which [does not support Scoping elements](https://docs.microsoft.com/en-za/azure/active-directory/develop/active-directory-single-sign-on-protocol-reference#scoping).
 
-:   Note that this option also exists in the IdP remote configuration. An
-    entry in the the IdP-remote metadata overrides this the option in the
-    SP configuration.
+:   Note that this option also exists in the IdP remote configuration. An entry
+    in the IdP-remote metadata overrides this the option in the SP
+    configuration.
 
 `discoURL`
 :   Set which IdP discovery service this SP should use.
@@ -410,6 +416,9 @@ Options
     * `urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST`
 	* `urn:oasis:names:tc:SAML:2.0:bindings:SOAP`
 
+`SingleLogoutServiceLocation`
+:   The Single Logout Service URL published in the generated metadata.
+
 `url`
 :   A URL to your service provider. Will be added as an OrganizationURL-element in the metadata.
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/hooks/hook_metadata_hosted.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/hooks/hook_metadata_hosted.php
index e1dc65c36f..569a680319 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/hooks/hook_metadata_hosted.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/hooks/hook_metadata_hosted.php
@@ -4,8 +4,8 @@
  * Hook to add the metadata for hosted entities to the frontpage.
  *
  * @param array &$metadataHosted  The metadata links for hosted metadata on the frontpage.
+ * @return void
  */
-
 function saml_hook_metadata_hosted(&$metadataHosted)
 {
     assert(is_array($metadataHosted));
@@ -13,6 +13,7 @@ function saml_hook_metadata_hosted(&$metadataHosted)
     $sources = \SimpleSAML\Auth\Source::getSourcesOfType('saml:SP');
 
     foreach ($sources as $source) {
+        /** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
         $metadata = $source->getMetadata();
 
         $name = $metadata->getValue('name', null);
@@ -27,7 +28,7 @@ function saml_hook_metadata_hosted(&$metadataHosted)
             'entityid' => $source->getEntityId(),
             'metadata-index' => $source->getEntityId(),
             'metadata-set' => 'saml20-sp-hosted',
-            'metadata-url' => $source->getMetadataURL().'?output=xhtml',
+            'metadata-url' => $source->getMetadataURL() . '?output=xhtml',
             'name' => $name,
         ];
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AttributeNameID.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AttributeNameID.php
index fbb5669a80..d0b4393bf0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AttributeNameID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AttributeNameID.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+
 /**
  * Authentication processing filter to create a NameID from an attribute.
  *
@@ -24,7 +27,7 @@ class AttributeNameID extends \SimpleSAML\Module\saml\BaseNameIDGenerator
      * @param array $config Configuration information about this filter.
      * @param mixed $reserved For future use.
      *
-     * @throws \SimpleSAMLError\Exception If the required options 'Format' or 'attribute' are missing.
+     * @throws \SimpleSAML\Error\Exception If the required options 'Format' or 'attribute' are missing.
      */
     public function __construct($config, $reserved)
     {
@@ -32,12 +35,12 @@ public function __construct($config, $reserved)
         assert(is_array($config));
 
         if (!isset($config['Format'])) {
-            throw new \SimpleSAML\Error\Exception("AttributeNameID: Missing required option 'Format'.");
+            throw new Error\Exception("AttributeNameID: Missing required option 'Format'.");
         }
         $this->format = (string) $config['Format'];
 
         if (!isset($config['attribute'])) {
-            throw new \SimpleSAML\Error\Exception("AttributeNameID: Missing required option 'attribute'.");
+            throw new Error\Exception("AttributeNameID: Missing required option 'attribute'.");
         }
         $this->attribute = (string) $config['attribute'];
     }
@@ -51,28 +54,27 @@ public function __construct($config, $reserved)
      */
     protected function getValue(array &$state)
     {
-
         if (!isset($state['Attributes'][$this->attribute]) || count($state['Attributes'][$this->attribute]) === 0) {
-            \SimpleSAML\Logger::warning(
-                'Missing attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'Missing attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating attribute NameID.'
             );
             return null;
         }
         if (count($state['Attributes'][$this->attribute]) > 1) {
-            \SimpleSAML\Logger::warning(
-                'More than one value in attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'More than one value in attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating attribute NameID.'
             );
             return null;
         }
         $value = array_values($state['Attributes'][$this->attribute]); // just in case the first index is no longer 0
-        $value = $value[0];
+        $value = strval($value[0]);
 
         if (empty($value)) {
-            \SimpleSAML\Logger::warning(
-                'Empty value in attribute '.var_export($this->attribute, true).
-                ' on user - not generating persistent NameID.'
+            Logger::warning(
+                'Empty value in attribute ' . var_export($this->attribute, true) .
+                ' on user - not generating attribute NameID.'
             );
             return null;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AuthnContextClassRef.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AuthnContextClassRef.php
index 106d7b51f0..b2e6eb3588 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AuthnContextClassRef.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/AuthnContextClassRef.php
@@ -2,20 +2,21 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SimpleSAML\Error;
+
 /**
  * Filter for setting the AuthnContextClassRef in the response.
  *
  * @package SimpleSAMLphp
  */
-
 class AuthnContextClassRef extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
      * The URI we should set as the AuthnContextClassRef in the login response.
      *
-     * @var string
+     * @var string|null
      */
-    private $authnContextClassRef;
+    private $authnContextClassRef = null;
 
 
     /**
@@ -24,7 +25,7 @@ class AuthnContextClassRef extends \SimpleSAML\Auth\ProcessingFilter
      * @param array $config Configuration information about this filter.
      * @param mixed $reserved For future use.
      *
-     * @throws \SimpleSAML\Error\_Exception if the mandatory 'AuthnContextClassRef' option is missing.
+     * @throws \SimpleSAML\Error\Exception if the mandatory 'AuthnContextClassRef' option is missing.
      */
     public function __construct($config, $reserved)
     {
@@ -32,7 +33,7 @@ public function __construct($config, $reserved)
         assert(is_array($config));
 
         if (!isset($config['AuthnContextClassRef'])) {
-            throw new \SimpleSAML\Error\Exception('Missing AuthnContextClassRef option in processing filter.');
+            throw new Error\Exception('Missing AuthnContextClassRef option in processing filter.');
         }
 
         $this->authnContextClassRef = (string) $config['AuthnContextClassRef'];
@@ -43,6 +44,7 @@ public function __construct($config, $reserved)
      * Set the AuthnContextClassRef in the SAML 2 response.
      *
      * @param array &$state The state array for this request.
+     * @return void
      */
     public function process(&$state)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/ExpectedAuthnContextClassRef.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/ExpectedAuthnContextClassRef.php
index fd62777323..7e6259c589 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/ExpectedAuthnContextClassRef.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/ExpectedAuthnContextClassRef.php
@@ -2,6 +2,12 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SimpleSAML\Auth;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
+use SimpleSAML\Utils;
+
 /**
  * Attribute filter to validate AuthnContextClassRef values.
  *
@@ -29,9 +35,9 @@ class ExpectedAuthnContextClassRef extends \SimpleSAML\Auth\ProcessingFilter
 
     /**
      * AuthnContextClassRef of the assertion
-     * @var string
+     * @var string|null
      */
-    private $AuthnContextClassRef;
+    private $AuthnContextClassRef = null;
 
 
     /**
@@ -48,10 +54,10 @@ public function __construct($config, $reserved)
 
         assert(is_array($config));
         if (empty($config['accepted'])) {
-            \SimpleSAML\Logger::error(
+            Logger::error(
                 'ExpectedAuthnContextClassRef: Configuration error. There is no accepted AuthnContextClassRef.'
             );
-            throw new \SimpleSAML\Error\Exception(
+            throw new Error\Exception(
                 'ExpectedAuthnContextClassRef: Configuration error. There is no accepted AuthnContextClassRef.'
             );
         }
@@ -62,11 +68,12 @@ public function __construct($config, $reserved)
     /**
      *
      * @param array &$request The current request
+     * @return void
      */
     public function process(&$request)
     {
         assert(is_array($request));
-        assert(array_key_exists('Attributes', $request));
+        assert(array_key_exists('saml:sp:State', $request));
 
         $this->AuthnContextClassRef = $request['saml:sp:State']['saml:sp:AuthnContext'];
 
@@ -87,18 +94,19 @@ public function process(&$request)
      * permission logic.
      *
      * @param array $request
+     * @return void
      */
     protected function unauthorized(&$request)
     {
-        \SimpleSAML\Logger::error(
-            'ExpectedAuthnContextClassRef: Invalid authentication context: '.$this->AuthnContextClassRef.
-            '. Accepted values are: '.var_export($this->accepted, true)
+        Logger::error(
+            'ExpectedAuthnContextClassRef: Invalid authentication context: ' . strval($this->AuthnContextClassRef) .
+            '. Accepted values are: ' . var_export($this->accepted, true)
         );
 
-        $id = \SimpleSAML\Auth\State::saveState($request, 'saml:ExpectedAuthnContextClassRef:unauthorized');
-        $url = \SimpleSAML\Module::getModuleURL(
+        $id = Auth\State::saveState($request, 'saml:ExpectedAuthnContextClassRef:unauthorized');
+        $url = Module::getModuleURL(
             'saml/sp/wrong_authncontextclassref.php'
         );
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
+        Utils\HTTP::redirectTrustedURL($url, ['StateId' => $id]);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/FilterScopes.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/FilterScopes.php
index 67ef886df0..fd4089b925 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/FilterScopes.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/FilterScopes.php
@@ -3,6 +3,7 @@
 namespace SimpleSAML\Module\saml\Auth\Process;
 
 use SimpleSAML\Logger;
+use SimpleSAML\Utils;
 
 /**
  * Filter to remove attribute values which are not properly scoped.
@@ -15,7 +16,7 @@
 class FilterScopes extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
-     * Stores any pre-configured scoped attributes which come from the filter configuration.
+     * @var array Stores any pre-configured scoped attributes which come from the filter configuration.
      */
     private $scopedAttributes = [
         'eduPersonScopedAffiliation',
@@ -44,6 +45,7 @@ public function __construct(&$config, $reserved)
      * This method applies the filter, removing any values
      *
      * @param array &$request the current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -58,41 +60,43 @@ public function process(&$request)
             $validScopes = $src['scope'];
         }
 
-        foreach ($this->scopedAttributes as $attribute) {
-            if (!isset($request['Attributes'][$attribute])) {
-                continue;
-            }
-
-            $values = $request['Attributes'][$attribute];
-            $newValues = [];
-            foreach ($values as $value) {
-                $ep = \SimpleSAML\Utils\Config\Metadata::getDefaultEndpoint($request['Source']['SingleSignOnService']);
-                $loc = $ep['Location'];
-                $host = parse_url($loc, PHP_URL_HOST);
-                if ($host === null) {
-                    $host = '';
+        $ep = Utils\Config\Metadata::getDefaultEndpoint($request['Source']['SingleSignOnService']);
+        if ($ep !== null) {
+            foreach ($this->scopedAttributes as $attribute) {
+                if (!isset($request['Attributes'][$attribute])) {
+                    continue;
                 }
-                $value_a = explode('@', $value, 2);
-                if (count($value_a) < 2) {
-                    $newValues[] = $value;
-                    continue; // there's no scope
+
+                $values = $request['Attributes'][$attribute];
+                $newValues = [];
+                foreach ($values as $value) {
+                    $loc = $ep['Location'];
+                    $host = parse_url($loc, PHP_URL_HOST);
+                    if ($host === null) {
+                        $host = '';
+                    }
+                    $value_a = explode('@', $value, 2);
+                    if (count($value_a) < 2) {
+                        $newValues[] = $value;
+                        continue; // there's no scope
+                    }
+                    $scope = $value_a[1];
+                    if (in_array($scope, $validScopes, true)) {
+                        $newValues[] = $value;
+                    } elseif (strpos($host, $scope) === strlen($host) - strlen($scope)) {
+                        $newValues[] = $value;
+                    } else {
+                        Logger::warning("Removing value '$value' for attribute '$attribute'. Undeclared scope.");
+                    }
                 }
-                $scope = $value_a[1];
-                if (in_array($scope, $validScopes, true)) {
-                    $newValues[] = $value;
-                } elseif (strpos($host, $scope) === strlen($host) - strlen($scope)) {
-                    $newValues[] = $value;
+
+                if (empty($newValues)) {
+                    Logger::warning("No suitable values for attribute '$attribute', removing it.");
+                    unset($request['Attributes'][$attribute]); // remove empty attributes
                 } else {
-                    Logger::warning("Removing value '$value' for attribute '$attribute'. Undeclared scope.");
+                    $request['Attributes'][$attribute] = $newValues;
                 }
             }
-
-            if (empty($newValues)) {
-                Logger::warning("No suitable values for attribute '$attribute', removing it.");
-                unset($request['Attributes'][$attribute]); // remove empty attributes
-            } else {
-                $request['Attributes'][$attribute] = $newValues;
-            }
         }
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/NameIDAttribute.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/NameIDAttribute.php
index e8c27dba78..f8fd748b78 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/NameIDAttribute.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/NameIDAttribute.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SAML2\Constants;
+use SimpleSAML\Error;
+
 /**
  * Authentication processing filter to create an attribute from a NameID.
  *
@@ -38,13 +41,13 @@ public function __construct($config, $reserved)
         assert(is_array($config));
 
         if (isset($config['attribute'])) {
-            $this->attribute = (string) $config['attribute'];
+            $this->attribute = strval($config['attribute']);
         } else {
             $this->attribute = 'nameid';
         }
 
         if (isset($config['format'])) {
-            $format = (string) $config['format'];
+            $format = strval($config['format']);
         } else {
             $format = '%I!%S!%V';
         }
@@ -88,7 +91,7 @@ private static function parseFormat($format)
                     $ret[] = '%';
                     break;
                 default:
-                    throw new \SimpleSAML\Error\Exception('NameIDAttribute: Invalid replacement: "%'.$replacement.'"');
+                    throw new Error\Exception('NameIDAttribute: Invalid replacement: "%' . $replacement . '"');
             }
 
             $pos = $next + 2;
@@ -103,6 +106,7 @@ private static function parseFormat($format)
      * Convert NameID to attribute.
      *
      * @param array &$state The request state.
+     * @return void
      */
     public function process(&$state)
     {
@@ -116,15 +120,15 @@ public function process(&$state)
 
         $rep = $state['saml:sp:NameID'];
         assert(!is_null($rep->getValue()));
-        $rep->{'%'} = '%';
-        if ($rep->getFormat() !== null) {
-            $rep->setFormat(\SAML2\Constants::NAMEID_UNSPECIFIED);
+
+        if ($rep->getFormat() === null) {
+            $rep->setFormat(Constants::NAMEID_UNSPECIFIED);
         }
-        if ($rep->getNameQualifier() !== null) {
-            $rep->setNameQualifier($state['Source']['entityid']);
+        if ($rep->getSPNameQualifier() === null) {
+            $rep->setSPNameQualifier($state['Source']['entityid']);
         }
-        if ($rep->getSPNameQualifier() !== null) {
-            $rep->setSPNameQualifier($state['Destination']['entityid']);
+        if ($rep->getNameQualifier() === null) {
+            $rep->setNameQualifier($state['Destination']['entityid']);
         }
 
         $value = '';
@@ -132,8 +136,10 @@ public function process(&$state)
         foreach ($this->format as $element) {
             if ($isString) {
                 $value .= $element;
+            } elseif ($element === '%') {
+                $value .= '%';
             } else {
-                $value .= call_user_func([$rep, 'get'.$element]);
+                $value .= call_user_func([$rep, 'get' . $element]);
             }
             $isString = !$isString;
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID.php
index a70c749329..a98a0212ac 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID.php
@@ -2,6 +2,11 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SAML2\Constants;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
+
 /**
  * Authentication processing filter to generate a persistent NameID.
  *
@@ -31,10 +36,10 @@ public function __construct($config, $reserved)
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $this->format = \SAML2\Constants::NAMEID_PERSISTENT;
+        $this->format = Constants::NAMEID_PERSISTENT;
 
         if (!isset($config['attribute'])) {
-            throw new \SimpleSAML\Error\Exception("PersistentNameID: Missing required option 'attribute'.");
+            throw new Error\Exception("PersistentNameID: Missing required option 'attribute'.");
         }
         $this->attribute = $config['attribute'];
     }
@@ -49,27 +54,27 @@ public function __construct($config, $reserved)
     protected function getValue(array &$state)
     {
         if (!isset($state['Destination']['entityid'])) {
-            \SimpleSAML\Logger::warning('No SP entity ID - not generating persistent NameID.');
+            Logger::warning('No SP entity ID - not generating persistent NameID.');
             return null;
         }
         $spEntityId = $state['Destination']['entityid'];
 
         if (!isset($state['Source']['entityid'])) {
-            \SimpleSAML\Logger::warning('No IdP entity ID - not generating persistent NameID.');
+            Logger::warning('No IdP entity ID - not generating persistent NameID.');
             return null;
         }
         $idpEntityId = $state['Source']['entityid'];
 
         if (!isset($state['Attributes'][$this->attribute]) || count($state['Attributes'][$this->attribute]) === 0) {
-            \SimpleSAML\Logger::warning(
-                'Missing attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'Missing attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating persistent NameID.'
             );
             return null;
         }
         if (count($state['Attributes'][$this->attribute]) > 1) {
-            \SimpleSAML\Logger::warning(
-                'More than one value in attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'More than one value in attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating persistent NameID.'
             );
             return null;
@@ -78,19 +83,19 @@ protected function getValue(array &$state)
         $uid = $uid[0];
 
         if (empty($uid)) {
-            \SimpleSAML\Logger::warning(
-                'Empty value in attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'Empty value in attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating persistent NameID.'
             );
             return null;
         }
 
-        $secretSalt = \SimpleSAML\Utils\Config::getSecretSalt();
+        $secretSalt = Utils\Config::getSecretSalt();
 
-        $uidData = 'uidhashbase'.$secretSalt;
-        $uidData .= strlen($idpEntityId).':'.$idpEntityId;
-        $uidData .= strlen($spEntityId).':'.$spEntityId;
-        $uidData .= strlen($uid).':'.$uid;
+        $uidData = 'uidhashbase' . $secretSalt;
+        $uidData .= strlen($idpEntityId) . ':' . $idpEntityId;
+        $uidData .= strlen($spEntityId) . ':' . $spEntityId;
+        $uidData .= strlen($uid) . ':' . $uid;
         $uidData .= $secretSalt;
 
         return sha1($uidData);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID2TargetedID.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID2TargetedID.php
index f627f164e7..2841624626 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID2TargetedID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/PersistentNameID2TargetedID.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SAML2\Constants;
+use SimpleSAML\Logger;
+
 /**
  * Authentication processing filter to create the eduPersonTargetedID attribute from the persistent NameID.
  *
@@ -21,7 +24,7 @@ class PersistentNameID2TargetedID extends \SimpleSAML\Auth\ProcessingFilter
     /**
      * Whether we should insert it as an saml:NameID element.
      *
-     * @var boolean
+     * @var bool
      */
     private $nameId;
 
@@ -55,20 +58,19 @@ public function __construct($config, $reserved)
      * Store a NameID to attribute.
      *
      * @param array &$state The request state.
+     * @return void
      */
     public function process(&$state)
     {
         assert(is_array($state));
-
-        if (!isset($state['saml:NameID'][\SAML2\Constants::NAMEID_PERSISTENT])) {
-            \SimpleSAML\Logger::warning(
+        if (!isset($state['saml:NameID'][Constants::NAMEID_PERSISTENT])) {
+            Logger::warning(
                 'Unable to generate eduPersonTargetedID because no persistent NameID was available.'
             );
             return;
         }
-
         /** @var \SAML2\XML\saml\NameID $nameID */
-        $nameID = $state['saml:NameID'][\SAML2\Constants::NAMEID_PERSISTENT];
+        $nameID = $state['saml:NameID'][Constants::NAMEID_PERSISTENT];
 
         $state['Attributes'][$this->attribute] = [(!$this->nameId) ? $nameID->getValue() : $nameID];
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/SQLPersistentNameID.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/SQLPersistentNameID.php
index 172aace1c2..b6c0f48cdc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/SQLPersistentNameID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/SQLPersistentNameID.php
@@ -2,6 +2,10 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SAML2\Constants;
+use SimpleSAML\Error;
+use SimpleSAML\Logger;
+
 /**
  * Authentication processing filter to generate a persistent NameID.
  *
@@ -38,6 +42,13 @@ class SQLPersistentNameID extends \SimpleSAML\Module\saml\BaseNameIDGenerator
      */
     private $alwaysCreate = false;
 
+    /**
+     * Database store configuration.
+     *
+     * @var array
+     */
+    private $storeConfig = [];
+
 
     /**
      * Initialize this filter, parse configuration.
@@ -52,10 +63,10 @@ public function __construct($config, $reserved)
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $this->format = \SAML2\Constants::NAMEID_PERSISTENT;
+        $this->format = Constants::NAMEID_PERSISTENT;
 
         if (!isset($config['attribute'])) {
-            throw new \SimpleSAML\Error\Exception("PersistentNameID: Missing required option 'attribute'.");
+            throw new Error\Exception("PersistentNameID: Missing required option 'attribute'.");
         }
         $this->attribute = $config['attribute'];
 
@@ -70,6 +81,10 @@ public function __construct($config, $reserved)
         if (isset($config['alwaysCreate'])) {
             $this->alwaysCreate = (bool) $config['alwaysCreate'];
         }
+
+        if (isset($config['store'])) {
+            $this->storeConfig = (array) $config['store'];
+        }
     }
 
 
@@ -83,10 +98,9 @@ public function __construct($config, $reserved)
      */
     protected function getValue(array &$state)
     {
-
         if (!isset($state['saml:NameIDFormat']) && !$this->allowUnspecified) {
-            \SimpleSAML\Logger::debug(
-                'SQLPersistentNameID: Request did not specify persistent NameID format, '.
+            Logger::debug(
+                'SQLPersistentNameID: Request did not specify persistent NameID format, ' .
                 'not generating persistent NameID.'
             );
             return null;
@@ -96,38 +110,40 @@ protected function getValue(array &$state)
             $state['saml:NameIDFormat'],
             $state['SPMetadata']['NameIDFormat']
         ]);
-        if (count($validNameIdFormats) && !in_array($this->format, $validNameIdFormats, true) &&
-            !$this->allowDifferent
+        if (
+            count($validNameIdFormats)
+            && !in_array($this->format, $validNameIdFormats, true)
+            && !$this->allowDifferent
         ) {
-            \SimpleSAML\Logger::debug(
-                'SQLPersistentNameID: SP expects different NameID format ('.
-                implode(', ', $validNameIdFormats).'),  not generating persistent NameID.'
+            Logger::debug(
+                'SQLPersistentNameID: SP expects different NameID format (' .
+                implode(', ', $validNameIdFormats) . '),  not generating persistent NameID.'
             );
             return null;
         }
 
         if (!isset($state['Destination']['entityid'])) {
-            \SimpleSAML\Logger::warning('SQLPersistentNameID: No SP entity ID - not generating persistent NameID.');
+            Logger::warning('SQLPersistentNameID: No SP entity ID - not generating persistent NameID.');
             return null;
         }
         $spEntityId = $state['Destination']['entityid'];
 
         if (!isset($state['Source']['entityid'])) {
-            \SimpleSAML\Logger::warning('SQLPersistentNameID: No IdP entity ID - not generating persistent NameID.');
+            Logger::warning('SQLPersistentNameID: No IdP entity ID - not generating persistent NameID.');
             return null;
         }
         $idpEntityId = $state['Source']['entityid'];
 
         if (!isset($state['Attributes'][$this->attribute]) || count($state['Attributes'][$this->attribute]) === 0) {
-            \SimpleSAML\Logger::warning(
-                'SQLPersistentNameID: Missing attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'SQLPersistentNameID: Missing attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating persistent NameID.'
             );
             return null;
         }
         if (count($state['Attributes'][$this->attribute]) > 1) {
-            \SimpleSAML\Logger::warning(
-                'SQLPersistentNameID: More than one value in attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'SQLPersistentNameID: More than one value in attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating persistent NameID.'
             );
             return null;
@@ -136,38 +152,38 @@ protected function getValue(array &$state)
         $uid = $uid[0];
 
         if (empty($uid)) {
-            \SimpleSAML\Logger::warning(
-                'Empty value in attribute '.var_export($this->attribute, true).
+            Logger::warning(
+                'Empty value in attribute ' . var_export($this->attribute, true) .
                 ' on user - not generating persistent NameID.'
             );
             return null;
         }
 
-        $value = \SimpleSAML\Module\saml\IdP\SQLNameID::get($idpEntityId, $spEntityId, $uid);
+        $value = \SimpleSAML\Module\saml\IdP\SQLNameID::get($idpEntityId, $spEntityId, $uid, $this->storeConfig);
         if ($value !== null) {
-            \SimpleSAML\Logger::debug(
-                'SQLPersistentNameID: Found persistent NameID '.var_export($value, true).' for user '.
-                var_export($uid, true).'.'
+            Logger::debug(
+                'SQLPersistentNameID: Found persistent NameID ' . var_export($value, true) . ' for user ' .
+                var_export($uid, true) . '.'
             );
             return $value;
         }
 
         if ((!isset($state['saml:AllowCreate']) || !$state['saml:AllowCreate']) && !$this->alwaysCreate) {
-            \SimpleSAML\Logger::warning(
+            Logger::warning(
                 'SQLPersistentNameID: Did not find persistent NameID for user, and not allowed to create new NameID.'
             );
             throw new \SimpleSAML\Module\saml\Error(
-                \SAML2\Constants::STATUS_RESPONDER,
-                'urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy'
+                Constants::STATUS_RESPONDER,
+                Constants::STATUS_INVALID_NAMEID_POLICY
             );
         }
 
         $value = bin2hex(openssl_random_pseudo_bytes(20));
-        \SimpleSAML\Logger::debug(
-            'SQLPersistentNameID: Created persistent NameID '.var_export($value, true).' for user '.
-            var_export($uid, true).'.'
+        Logger::debug(
+            'SQLPersistentNameID: Created persistent NameID ' . var_export($value, true) . ' for user ' .
+            var_export($uid, true) . '.'
         );
-        \SimpleSAML\Module\saml\IdP\SQLNameID::add($idpEntityId, $spEntityId, $uid, $value);
+        \SimpleSAML\Module\saml\IdP\SQLNameID::add($idpEntityId, $spEntityId, $uid, $value, $this->storeConfig);
 
         return $value;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/TransientNameID.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/TransientNameID.php
index b4a24de5ec..8b069f4914 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/TransientNameID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Process/TransientNameID.php
@@ -2,6 +2,9 @@
 
 namespace SimpleSAML\Module\saml\Auth\Process;
 
+use SAML2\Constants;
+use SimpleSAML\Utils;
+
 /**
  * Authentication processing filter to generate a transient NameID.
  *
@@ -21,7 +24,7 @@ public function __construct($config, $reserved)
         parent::__construct($config, $reserved);
         assert(is_array($config));
 
-        $this->format = \SAML2\Constants::NAMEID_TRANSIENT;
+        $this->format = Constants::NAMEID_TRANSIENT;
     }
 
 
@@ -33,6 +36,6 @@ public function __construct($config, $reserved)
      */
     protected function getValue(array &$state)
     {
-        return \SimpleSAML\Utils\Random::generateID();
+        return Utils\Random::generateID();
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Source/SP.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Source/SP.php
index 5caae4f97b..4dd06c044d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Source/SP.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Source/SP.php
@@ -2,10 +2,23 @@
 
 namespace SimpleSAML\Module\saml\Auth\Source;
 
-use SimpleSAML\Auth\Source;
-use SimpleSAML\Auth\State;
-
-class SP extends Source
+use SAML2\AuthnRequest;
+use SAML2\Binding;
+use SAML2\Constants;
+use SAML2\XML\saml\NameID;
+use SimpleSAML\Auth;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\IdP;
+use SimpleSAML\Logger;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Store;
+use SimpleSAML\Utils;
+use SimpleSAML\XML\Shib13;
+
+class SP extends \SimpleSAML\Auth\Source
 {
     /**
      * The entity ID of this SP.
@@ -38,7 +51,7 @@ class SP extends Source
     /**
      * Flag to indicate whether to disable sending the Scoping element.
      *
-     * @var boolean|FALSE
+     * @var bool
      */
     private $disable_scoping;
 
@@ -72,20 +85,21 @@ public function __construct($info, $config)
          * gives the entity id. */
         $config['entityid'] = $config['entityID'];
 
-        $this->metadata = \SimpleSAML\Configuration::loadFromArray(
+        $this->metadata = Configuration::loadFromArray(
             $config,
-            'authsources['.var_export($this->authId, true).']'
+            'authsources[' . var_export($this->authId, true) . ']'
         );
         $this->entityId = $this->metadata->getString('entityID');
         $this->idp = $this->metadata->getString('idp', null);
         $this->discoURL = $this->metadata->getString('discoURL', null);
         $this->disable_scoping = $this->metadata->getBoolean('disable_scoping', false);
 
-        if (empty($this->discoURL) && \SimpleSAML\Module::isModuleEnabled('discojuice')) {
-            $this->discoURL = \SimpleSAML\Module::getModuleURL('discojuice/central.php');
+        if (empty($this->discoURL) && Module::isModuleEnabled('discojuice')) {
+            $this->discoURL = Module::getModuleURL('discojuice/central.php');
         }
     }
 
+
     /**
      * Retrieve the URL to the metadata of this SP.
      *
@@ -93,9 +107,10 @@ public function __construct($info, $config)
      */
     public function getMetadataURL()
     {
-        return \SimpleSAML\Module::getModuleURL('saml/sp/metadata.php/'.urlencode($this->authId));
+        return Module::getModuleURL('saml/sp/metadata.php/' . urlencode($this->authId));
     }
 
+
     /**
      * Retrieve the entity id of this SP.
      *
@@ -117,7 +132,7 @@ public function getHostedMetadata()
         $entityid = $this->getEntityId();
         $metadata = [
             'entityid' => $entityid,
-            'metadata-set' => 'smal20-sp-remote',
+            'metadata-set' => 'saml20-sp-remote',
             'SingleLogoutService' => $this->getSLOEndpoints(),
             'AssertionConsumerService' => $this->getACSEndpoints(),
         ];
@@ -126,9 +141,9 @@ public function getHostedMetadata()
         if ($this->metadata->hasValue('NameIDValue')) {
             $format = $this->metadata->getValue('NameIDPolicy');
             if (is_array($format)) {
-                $metadata['NameIDFormat'] = \SimpleSAML\Configuration::loadFromArray($format)->getString(
+                $metadata['NameIDFormat'] = Configuration::loadFromArray($format)->getString(
                     'Format',
-                    \SAML2\Constants::NAMEID_TRANSIENT
+                    Constants::NAMEID_TRANSIENT
                 );
             } elseif (is_string($format)) {
                 $metadata['NameIDFormat'] = $format;
@@ -167,7 +182,7 @@ public function getHostedMetadata()
             $metadata['OrganizationDisplayName'] = $this->metadata->getLocalizedString('OrganizationDisplayName', $org);
             $metadata['OrganizationURL'] = $this->metadata->getLocalizedString('OrganizationURL', null);
             if ($metadata['OrganizationURL'] === null) {
-                throw new \SimpleSAML\Error\Exception(
+                throw new Error\Exception(
                     'If OrganizationName is set, OrganizationURL must also be set.'
                 );
             }
@@ -176,11 +191,11 @@ public function getHostedMetadata()
         // add contacts
         $contacts = $this->metadata->getArray('contact', []);
         foreach ($contacts as $contact) {
-            $metadata['contacts'][] = \SimpleSAML\Utils\Config\Metadata::getContact($contact);
+            $metadata['contacts'][] = Utils\Config\Metadata::getContact($contact);
         }
 
         // add technical contact
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
         $email = $globalConfig->getString('technicalcontact_email', 'na@example.org');
         if ($email && $email !== 'na@example.org') {
             $contact = [
@@ -188,11 +203,11 @@ public function getHostedMetadata()
                 'name' => $globalConfig->getString('technicalcontact_name', null),
                 'contactType' => 'technical',
             ];
-            $metadata['contacts'][] = \SimpleSAML\Utils\Config\Metadata::getContact($contact);
+            $metadata['contacts'][] = Utils\Config\Metadata::getContact($contact);
         }
 
         // add certificate(s)
-        $certInfo = \SimpleSAML\Utils\Crypto::loadPublicKey($this->metadata, false, 'new_');
+        $certInfo = Utils\Crypto::loadPublicKey($this->metadata, false, 'new_');
         $hasNewCert = false;
         if ($certInfo !== null && array_key_exists('certData', $certInfo)) {
             $hasNewCert = true;
@@ -202,10 +217,11 @@ public function getHostedMetadata()
                 'encryption' => true,
                 'X509Certificate' => $certInfo['certData'],
                 'prefix' => 'new_',
-                'url' => \SimpleSAML\Module::getModuleURL(
-                    'admin/cert',
+                'url' => Module::getModuleURL(
+                    'admin/federation/cert',
                     [
-                        'sp' => $this->getAuthId(),
+                        'set' => 'saml20-sp-hosted',
+                        'source' => $this->getAuthId(),
                         'prefix' => 'new_'
                     ]
                 ),
@@ -213,7 +229,7 @@ public function getHostedMetadata()
             ];
         }
 
-        $certInfo = \SimpleSAML\Utils\Crypto::loadPublicKey($this->metadata);
+        $certInfo = Utils\Crypto::loadPublicKey($this->metadata);
         if ($certInfo !== null && array_key_exists('certData', $certInfo)) {
             $metadata['keys'][] = [
                 'type' => 'X509Certificate',
@@ -221,10 +237,11 @@ public function getHostedMetadata()
                 'encryption' => $hasNewCert ? false : true,
                 'X509Certificate' => $certInfo['certData'],
                 'prefix' => '',
-                'url' => \SimpleSAML\Module::getModuleURL(
-                    'admin/cert',
+                'url' => Module::getModuleURL(
+                    'admin/federation/cert',
                     [
-                        'sp' => $this->getAuthId(),
+                        'set' => 'saml20-sp-hosted',
+                        'source' => $this->getAuthId(),
                         'prefix' => ''
                     ]
                 ),
@@ -272,18 +289,18 @@ public function getIdPMetadata($entityId)
         assert(is_string($entityId));
 
         if ($this->idp !== null && $this->idp !== $entityId) {
-            throw new \SimpleSAML\Error\Exception('Cannot retrieve metadata for IdP '.
-                var_export($entityId, true).' because it isn\'t a valid IdP for this SP.');
+            throw new Error\Exception('Cannot retrieve metadata for IdP ' .
+                var_export($entityId, true) . ' because it isn\'t a valid IdP for this SP.');
         }
 
-        $metadataHandler = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadataHandler = MetaDataStorageHandler::getMetadataHandler();
 
         // First, look in saml20-idp-remote.
         try {
             return $metadataHandler->getMetaDataConfig($entityId, 'saml20-idp-remote');
         } catch (\Exception $e) {
             // Metadata wasn't found
-            \SimpleSAML\Logger::debug('getIdpMetadata: '.$e->getMessage());
+            Logger::debug('getIdpMetadata: ' . $e->getMessage());
         }
 
         // Not found in saml20-idp-remote, look in shib13-idp-remote
@@ -291,11 +308,11 @@ public function getIdPMetadata($entityId)
             return $metadataHandler->getMetaDataConfig($entityId, 'shib13-idp-remote');
         } catch (\Exception $e) {
             // Metadata wasn't found
-            \SimpleSAML\Logger::debug('getIdpMetadata: '.$e->getMessage());
+            Logger::debug('getIdpMetadata: ' . $e->getMessage());
         }
 
         // Not found
-        throw new \SimpleSAML\Error\Exception('Could not find the metadata of an IdP with entity ID '.
+        throw new Error\Exception('Could not find the metadata of an IdP with entity ID ' .
             var_export($entityId, true));
     }
 
@@ -332,67 +349,69 @@ private function getACSEndpoints()
     {
         $endpoints = [];
         $default = [
-            \SAML2\Constants::BINDING_HTTP_POST,
+            Constants::BINDING_HTTP_POST,
             'urn:oasis:names:tc:SAML:1.0:profiles:browser-post',
-            \SAML2\Constants::BINDING_HTTP_ARTIFACT,
+            Constants::BINDING_HTTP_ARTIFACT,
             'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01',
         ];
-        if ($this->metadata->getString('ProtocolBinding', '') === \SAML2\Constants::BINDING_HOK_SSO) {
-            $default[] = \SAML2\Constants::BINDING_HOK_SSO;
+        if ($this->metadata->getString('ProtocolBinding', '') === Constants::BINDING_HOK_SSO) {
+            $default[] = Constants::BINDING_HOK_SSO;
         }
 
         $bindings = $this->metadata->getArray('acs.Bindings', $default);
         $index = 0;
         foreach ($bindings as $service) {
             switch ($service) {
-                case \SAML2\Constants::BINDING_HTTP_POST:
+                case Constants::BINDING_HTTP_POST:
                     $acs = [
-                        'Binding' => \SAML2\Constants::BINDING_HTTP_POST,
-                        'Location' => \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$this->getAuthId()),
+                        'Binding' => Constants::BINDING_HTTP_POST,
+                        'Location' => Module::getModuleURL('saml/sp/saml2-acs.php/' . $this->getAuthId()),
                     ];
-                    if (!in_array(\SAML2\Constants::NS_SAMLP, $this->protocols, true)) {
-                        $this->protocols[] = \SAML2\Constants::NS_SAMLP;
+                    if (!in_array(Constants::NS_SAMLP, $this->protocols, true)) {
+                        $this->protocols[] = Constants::NS_SAMLP;
                     }
                     break;
                 case 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post':
                     $acs = [
                         'Binding' => 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post',
-                        'Location' => \SimpleSAML\Module::getModuleURL('saml/sp/saml1-acs.php/'.$this->getAuthId()),
+                        'Location' => Module::getModuleURL('saml/sp/saml1-acs.php/' . $this->getAuthId()),
                     ];
                     if (!in_array('urn:oasis:names:tc:SAML:1.0:profiles:browser-post', $this->protocols, true)) {
                         $this->protocols[] = 'urn:oasis:names:tc:SAML:1.1:protocol';
                     }
                     break;
-                case \SAML2\Constants::BINDING_HTTP_ARTIFACT:
+                case Constants::BINDING_HTTP_ARTIFACT:
                     $acs = [
-                        'Binding' => \SAML2\Constants::BINDING_HTTP_ARTIFACT,
-                        'Location' => \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$this->getAuthId()),
+                        'Binding' => Constants::BINDING_HTTP_ARTIFACT,
+                        'Location' => Module::getModuleURL('saml/sp/saml2-acs.php/' . $this->getAuthId()),
                     ];
-                    if (!in_array(\SAML2\Constants::NS_SAMLP, $this->protocols, true)) {
-                        $this->protocols[] = \SAML2\Constants::NS_SAMLP;
+                    if (!in_array(Constants::NS_SAMLP, $this->protocols, true)) {
+                        $this->protocols[] = Constants::NS_SAMLP;
                     }
                     break;
                 case 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01':
                     $acs = [
                         'Binding' => 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01',
-                        'Location' => \SimpleSAML\Module::getModuleURL(
-                            'saml/sp/saml1-acs.php/'.$this->getAuthId().'/artifact'
+                        'Location' => Module::getModuleURL(
+                            'saml/sp/saml1-acs.php/' . $this->getAuthId() . '/artifact'
                         ),
                     ];
                     if (!in_array('urn:oasis:names:tc:SAML:1.1:protocol', $this->protocols, true)) {
                         $this->protocols[] = 'urn:oasis:names:tc:SAML:1.1:protocol';
                     }
                     break;
-                case \SAML2\Constants::BINDING_HOK_SSO:
+                case Constants::BINDING_HOK_SSO:
                     $acs = [
-                        'Binding' => \SAML2\Constants::BINDING_HOK_SSO,
-                        'Location' => \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$this->getAuthId()),
-                        'hoksso:ProtocolBinding' => \SAML2\Constants::BINDING_HTTP_REDIRECT,
+                        'Binding' => Constants::BINDING_HOK_SSO,
+                        'Location' => Module::getModuleURL('saml/sp/saml2-acs.php/' . $this->getAuthId()),
+                        'hoksso:ProtocolBinding' => Constants::BINDING_HTTP_REDIRECT,
                     ];
-                    if (!in_array(\SAML2\Constants::NS_SAMLP, $this->protocols, true)) {
-                        $this->protocols[] = \SAML2\Constants::NS_SAMLP;
+                    if (!in_array(Constants::NS_SAMLP, $this->protocols, true)) {
+                        $this->protocols[] = Constants::NS_SAMLP;
                     }
                     break;
+                default:
+                    $acs = [];
             }
             $acs['index'] = $index;
             $endpoints[] = $acs;
@@ -410,19 +429,19 @@ private function getACSEndpoints()
      */
     private function getSLOEndpoints()
     {
-        $store = \SimpleSAML\Store::getInstance();
+        $store = Store::getInstance();
         $bindings = $this->metadata->getArray(
             'SingleLogoutServiceBinding',
             [
-                \SAML2\Constants::BINDING_HTTP_REDIRECT,
-                \SAML2\Constants::BINDING_SOAP,
+                Constants::BINDING_HTTP_REDIRECT,
+                Constants::BINDING_SOAP,
             ]
         );
-        $location = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-logout.php/'.$this->getAuthId());
+        $location = Module::getModuleURL('saml/sp/saml2-logout.php/' . $this->getAuthId());
 
         $endpoints = [];
         foreach ($bindings as $binding) {
-            if ($binding == \SAML2\Constants::BINDING_SOAP && !($store instanceof \SimpleSAML\Store\SQL)) {
+            if ($binding == Constants::BINDING_SOAP && !($store instanceof Store\SQL)) {
                 // we cannot properly support SOAP logout
                 continue;
             }
@@ -440,17 +459,19 @@ private function getSLOEndpoints()
      *
      * @param \SimpleSAML\Configuration $idpMetadata  The metadata of the IdP.
      * @param array $state  The state array for the current authentication.
+     * @return void
+     * @deprecated will be removed in a future version
      */
-    private function startSSO1(\SimpleSAML\Configuration $idpMetadata, array $state)
+    private function startSSO1(Configuration $idpMetadata, array $state)
     {
         $idpEntityId = $idpMetadata->getString('entityid');
 
         $state['saml:idp'] = $idpEntityId;
 
-        $ar = new \SimpleSAML\XML\Shib13\AuthnRequest();
+        $ar = new Shib13\AuthnRequest();
         $ar->setIssuer($this->entityId);
 
-        $id = State::saveState($state, 'saml:sp:sso');
+        $id = Auth\State::saveState($state, 'saml:sp:sso');
         $ar->setRelayState($id);
 
         $useArtifact = $idpMetadata->getBoolean('saml1.useartifact', null);
@@ -459,51 +480,63 @@ private function startSSO1(\SimpleSAML\Configuration $idpMetadata, array $state)
         }
 
         if ($useArtifact) {
-            $shire = \SimpleSAML\Module::getModuleURL('saml/sp/saml1-acs.php/'.$this->authId.'/artifact');
+            $shire = Module::getModuleURL('saml/sp/saml1-acs.php/' . $this->authId . '/artifact');
         } else {
-            $shire = \SimpleSAML\Module::getModuleURL('saml/sp/saml1-acs.php/'.$this->authId);
+            $shire = Module::getModuleURL('saml/sp/saml1-acs.php/' . $this->authId);
         }
 
         $url = $ar->createRedirect($idpEntityId, $shire);
 
-        \SimpleSAML\Logger::debug('Starting SAML 1 SSO to '.var_export($idpEntityId, true).
-            ' from '.var_export($this->entityId, true).'.');
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url);
+        Logger::debug('Starting SAML 1 SSO to ' . var_export($idpEntityId, true) .
+            ' from ' . var_export($this->entityId, true) . '.');
+        Utils\HTTP::redirectTrustedURL($url);
     }
 
+
     /**
      * Send a SAML2 SSO request to an IdP
      *
      * @param \SimpleSAML\Configuration $idpMetadata  The metadata of the IdP.
      * @param array $state  The state array for the current authentication.
+     * @return void
      */
-    private function startSSO2(\SimpleSAML\Configuration $idpMetadata, array $state)
+    private function startSSO2(Configuration $idpMetadata, array $state)
     {
         if (isset($state['saml:ProxyCount']) && $state['saml:ProxyCount'] < 0) {
-            State::throwException(
+            Auth\State::throwException(
                 $state,
-                new \SimpleSAML\Module\saml\Error\ProxyCountExceeded(\SAML2\Constants::STATUS_RESPONDER)
+                new Module\saml\Error\ProxyCountExceeded(Constants::STATUS_RESPONDER)
             );
         }
 
-        $ar = \SimpleSAML\Module\saml\Message::buildAuthnRequest($this->metadata, $idpMetadata);
+        $ar = Module\saml\Message::buildAuthnRequest($this->metadata, $idpMetadata);
 
-        $ar->setAssertionConsumerServiceURL(\SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$this->authId));
+        $ar->setAssertionConsumerServiceURL(Module::getModuleURL('saml/sp/saml2-acs.php/' . $this->authId));
 
         if (isset($state['\SimpleSAML\Auth\Source.ReturnURL'])) {
             $ar->setRelayState($state['\SimpleSAML\Auth\Source.ReturnURL']);
         }
 
-        if (isset($state['saml:AuthnContextClassRef'])) {
-            $accr = \SimpleSAML\Utils\Arrays::arrayize($state['saml:AuthnContextClassRef']);
-            $comp = \SAML2\Constants::COMPARISON_EXACT;
-            if (isset($state['saml:AuthnContextComparison'])
-                && in_array($state['AuthnContextComparison'], [
-                    \SAML2\Constants::COMPARISON_EXACT,
-                    \SAML2\Constants::COMPARISON_MINIMUM,
-                    \SAML2\Constants::COMPARISON_MAXIMUM,
-                    \SAML2\Constants::COMPARISON_BETTER,
-                ], true)) {
+        $accr = null;
+        if ($idpMetadata->getString('AuthnContextClassRef', false)) {
+            $accr = Utils\Arrays::arrayize($idpMetadata->getString('AuthnContextClassRef'));
+        } elseif (isset($state['saml:AuthnContextClassRef'])) {
+            $accr = Utils\Arrays::arrayize($state['saml:AuthnContextClassRef']);
+        }
+
+        if ($accr !== null) {
+            $comp = Constants::COMPARISON_EXACT;
+            if ($idpMetadata->getString('AuthnContextComparison', false)) {
+                $comp = $idpMetadata->getString('AuthnContextComparison');
+            } elseif (
+                isset($state['saml:AuthnContextComparison'])
+                && in_array($state['saml:AuthnContextComparison'], [
+                    Constants::COMPARISON_EXACT,
+                    Constants::COMPARISON_MINIMUM,
+                    Constants::COMPARISON_MAXIMUM,
+                    Constants::COMPARISON_BETTER,
+                ], true)
+            ) {
                 $comp = $state['saml:AuthnContextComparison'];
             }
             $ar->setRequestedAuthnContext(['AuthnContextClassRef' => $accr, 'Comparison' => $comp]);
@@ -522,15 +555,15 @@ private function startSSO2(\SimpleSAML\Configuration $idpMetadata, array $state)
         }
 
         if (isset($state['saml:NameID'])) {
-            if (!is_array($state['saml:NameID']) && !is_a($state['saml:NameID'], '\SAML2\XML\saml\NameID')) {
-                throw new \SimpleSAML\Error\Exception('Invalid value of $state[\'saml:NameID\'].');
+            if (!is_array($state['saml:NameID']) && !is_a($state['saml:NameID'], NameID::class)) {
+                throw new Error\Exception('Invalid value of $state[\'saml:NameID\'].');
             }
 
             $nameId = $state['saml:NameID'];
             if (is_array($nameId)) {
                 // Must be an array > convert to object
 
-                $nid = new \SAML2\XML\saml\NameID();
+                $nid = new NameID();
                 if (!array_key_exists('Value', $nameId)) {
                     throw new \InvalidArgumentException('Missing "Value" in array, cannot create NameID from it.');
                 }
@@ -565,7 +598,7 @@ private function startSSO2(\SimpleSAML\Configuration $idpMetadata, array $state)
             } elseif (is_array($state['saml:NameIDPolicy'])) {
                 $policy = $state['saml:NameIDPolicy'];
             } elseif ($state['saml:NameIDPolicy'] === null) {
-                $policy = ['Format' => \SAML2\Constants::NAMEID_TRANSIENT];
+                $policy = ['Format' => Constants::NAMEID_TRANSIENT];
             }
             if ($policy !== null) {
                 $ar->setNameIdPolicy($policy);
@@ -598,7 +631,7 @@ private function startSSO2(\SimpleSAML\Configuration $idpMetadata, array $state)
                 $requesterID[] = $state['core:SP'];
             }
         } else {
-            \SimpleSAML\Logger::debug('Disabling samlp:Scoping for '.var_export($idpMetadata->getString('entityid'), true));
+            Logger::debug('Disabling samlp:Scoping for ' . var_export($idpMetadata->getString('entityid'), true));
         }
 
         $ar->setIDPList(
@@ -620,39 +653,42 @@ private function startSSO2(\SimpleSAML\Configuration $idpMetadata, array $state)
         // save IdP entity ID as part of the state
         $state['ExpectedIssuer'] = $idpMetadata->getString('entityid');
 
-        $id = State::saveState($state, 'saml:sp:sso', true);
+        $id = Auth\State::saveState($state, 'saml:sp:sso', true);
         $ar->setId($id);
 
-        \SimpleSAML\Logger::debug(
-            'Sending SAML 2 AuthnRequest to '.var_export($idpMetadata->getString('entityid'), true)
+        Logger::debug(
+            'Sending SAML 2 AuthnRequest to ' . var_export($idpMetadata->getString('entityid'), true)
         );
 
         // Select appropriate SSO endpoint
-        if ($ar->getProtocolBinding() === \SAML2\Constants::BINDING_HOK_SSO) {
+        if ($ar->getProtocolBinding() === Constants::BINDING_HOK_SSO) {
+            /** @var array $dst */
             $dst = $idpMetadata->getDefaultEndpoint(
                 'SingleSignOnService',
                 [
-                    \SAML2\Constants::BINDING_HOK_SSO
+                    Constants::BINDING_HOK_SSO
                 ]
             );
         } else {
+            /** @var array $dst */
             $dst = $idpMetadata->getEndpointPrioritizedByBinding(
                 'SingleSignOnService',
                 [
-                    \SAML2\Constants::BINDING_HTTP_REDIRECT,
-                    \SAML2\Constants::BINDING_HTTP_POST,
+                    Constants::BINDING_HTTP_REDIRECT,
+                    Constants::BINDING_HTTP_POST,
                 ]
             );
         }
         $ar->setDestination($dst['Location']);
 
-        $b = \SAML2\Binding::getBinding($dst['Binding']);
+        $b = Binding::getBinding($dst['Binding']);
 
         $this->sendSAML2AuthnRequest($state, $b, $ar);
 
         assert(false);
     }
 
+
     /**
      * Function to actually send the authentication request.
      *
@@ -661,18 +697,21 @@ private function startSSO2(\SimpleSAML\Configuration $idpMetadata, array $state)
      * @param array &$state  The state array.
      * @param \SAML2\Binding $binding  The binding.
      * @param \SAML2\AuthnRequest  $ar  The authentication request.
+     * @return void
      */
-    public function sendSAML2AuthnRequest(array &$state, \SAML2\Binding $binding, \SAML2\AuthnRequest $ar)
+    public function sendSAML2AuthnRequest(array &$state, Binding $binding, AuthnRequest $ar)
     {
         $binding->send($ar);
         assert(false);
     }
 
+
     /**
      * Send a SSO request to an IdP.
      *
      * @param string $idp  The entity ID of the IdP.
      * @param array $state  The state array for the current authentication.
+     * @return void
      */
     public function startSSO($idp, array $state)
     {
@@ -694,22 +733,24 @@ public function startSSO($idp, array $state)
         }
     }
 
+
     /**
      * Start an IdP discovery service operation.
      *
      * @param array $state  The state array.
+     * @return void
      */
     private function startDisco(array $state)
     {
-        $id = State::saveState($state, 'saml:sp:sso');
+        $id = Auth\State::saveState($state, 'saml:sp:sso');
 
         $discoURL = $this->discoURL;
         if ($discoURL === null) {
             // Fallback to internal discovery service
-            $discoURL = \SimpleSAML\Module::getModuleURL('saml/disco.php');
+            $discoURL = Module::getModuleURL('saml/disco.php');
         }
 
-        $returnTo = \SimpleSAML\Module::getModuleURL('saml/sp/discoresp.php', ['AuthID' => $id]);
+        $returnTo = Module::getModuleURL('saml/sp/discoresp.php', ['AuthID' => $id]);
 
         $params = [
             'entityID' => $this->entityId,
@@ -725,15 +766,17 @@ private function startDisco(array $state)
             $params['isPassive'] = 'true';
         }
 
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($discoURL, $params);
+        Utils\HTTP::redirectTrustedURL($discoURL, $params);
     }
 
+
     /**
      * Start login.
      *
      * This function saves the information about the login, and redirects to the IdP.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function authenticate(&$state)
     {
@@ -750,29 +793,28 @@ public function authenticate(&$state)
 
         if (isset($state['saml:IDPList']) && sizeof($state['saml:IDPList']) > 0) {
             // we have a SAML IDPList (we are a proxy): filter the list of IdPs available
-            $mdh = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
-            $known_idps = $mdh->getList();
-            $intersection = array_intersect($state['saml:IDPList'], array_keys($known_idps));
+            $mdh = MetaDataStorageHandler::getMetadataHandler();
+            $matchedEntities = $mdh->getMetaDataForEntities($state['saml:IDPList'], 'saml20-idp-remote');
 
-            if (empty($intersection)) {
+            if (empty($matchedEntities)) {
                 // all requested IdPs are unknown
-                throw new \SimpleSAML\Module\saml\Error\NoSupportedIDP(
-                    \SAML2\Constants::STATUS_REQUESTER,
+                throw new Module\saml\Error\NoSupportedIDP(
+                    Constants::STATUS_REQUESTER,
                     'None of the IdPs requested are supported by this proxy.'
                 );
             }
 
-            if (!is_null($idp) && !in_array($idp, $intersection, true)) {
+            if (!is_null($idp) && !array_key_exists($idp, $matchedEntities)) {
                 // the IdP is enforced but not in the IDPList
-                throw new \SimpleSAML\Module\saml\Error\NoAvailableIDP(
-                    \SAML2\Constants::STATUS_REQUESTER,
+                throw new Module\saml\Error\NoAvailableIDP(
+                    Constants::STATUS_REQUESTER,
                     'None of the IdPs requested are available to this proxy.'
                 );
             }
 
-            if (is_null($idp) && sizeof($intersection) === 1) {
+            if (is_null($idp) && sizeof($matchedEntities) === 1) {
                 // only one IdP requested or valid
-                $idp = current($state['saml:IDPList']);
+                $idp = key($matchedEntities);
             }
         }
 
@@ -785,6 +827,7 @@ public function authenticate(&$state)
         assert(false);
     }
 
+
     /**
      * Re-authenticate an user.
      *
@@ -792,20 +835,26 @@ public function authenticate(&$state)
      * interact with the user even in the case when the user is already authenticated.
      *
      * @param array &$state  Information about the current authentication.
+     * @return void
      */
     public function reauthenticate(array &$state)
     {
-        assert(is_array($state));
-
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $data = $session->getAuthState($this->authId);
+        if ($data === null) {
+            throw new Error\NoState();
+        }
+
         foreach ($data as $k => $v) {
             $state[$k] = $v;
         }
 
         // check if we have an IDPList specified in the request
-        if (isset($state['saml:IDPList']) && sizeof($state['saml:IDPList']) > 0 &&
-            !in_array($state['saml:sp:IdP'], $state['saml:IDPList'], true)) {
+        if (
+            isset($state['saml:IDPList'])
+            && sizeof($state['saml:IDPList']) > 0
+            && !in_array($state['saml:sp:IdP'], $state['saml:IDPList'], true)
+        ) {
             /*
              * The user has an existing, valid session. However, the SP
              * provided a list of IdPs it accepts for authentication, and
@@ -814,14 +863,14 @@ public function reauthenticate(array &$state)
              * First, check if we recognize any of the IdPs requested.
              */
 
-            $mdh = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+            $mdh = MetaDataStorageHandler::getMetadataHandler();
             $known_idps = $mdh->getList();
             $intersection = array_intersect($state['saml:IDPList'], array_keys($known_idps));
 
             if (empty($intersection)) {
                 // all requested IdPs are unknown
-                throw new \SimpleSAML\Module\saml\Error\NoSupportedIDP(
-                    \SAML2\Constants::STATUS_REQUESTER,
+                throw new Module\saml\Error\NoSupportedIDP(
+                    Constants::STATUS_REQUESTER,
                     'None of the IdPs requested are supported by this proxy.'
                 );
             }
@@ -833,8 +882,8 @@ public function reauthenticate(array &$state)
              */
             if (!is_null($this->idp) && !in_array($this->idp, $intersection, true)) {
                 // an IdP is enforced but not requested
-                throw new \SimpleSAML\Module\saml\Error\NoAvailableIDP(
-                    \SAML2\Constants::STATUS_REQUESTER,
+                throw new Module\saml\Error\NoAvailableIDP(
+                    Constants::STATUS_REQUESTER,
                     'None of the IdPs requested are available to this proxy.'
                 );
             }
@@ -844,8 +893,8 @@ public function reauthenticate(array &$state)
              * starting the authentication process again with a different IdP, or
              * cancel the current SSO attempt.
              */
-            \SimpleSAML\Logger::warning(
-                "Reauthentication after logout is needed. The IdP '${state['saml:sp:IdP']}' is not in the IDPList ".
+            Logger::warning(
+                "Reauthentication after logout is needed. The IdP '${state['saml:sp:IdP']}' is not in the IDPList " .
                 "provided by the Service Provider '${state['core:SP']}'."
             );
 
@@ -873,6 +922,7 @@ public function reauthenticate(array &$state)
      * - 'core:IdP': the identifier of the local IdP.
      * - 'SPMetadata': an array with the metadata of this local SP.
      *
+     * @return void
      * @throws \SimpleSAML\Error\NoPassive In case the authentication request was passive.
      */
     public static function askForIdPChange(array &$state)
@@ -884,59 +934,64 @@ public static function askForIdPChange(array &$state)
 
         if (isset($state['isPassive']) && (bool) $state['isPassive']) {
             // passive request, we cannot authenticate the user
-            throw new \SimpleSAML\Module\saml\Error\NoPassive(
-                \SAML2\Constants::STATUS_REQUESTER,
+            throw new Module\saml\Error\NoPassive(
+                Constants::STATUS_REQUESTER,
                 'Reauthentication required'
             );
         }
 
         // save the state WITHOUT a restart URL, so that we don't try an IdP-initiated login if something goes wrong
-        $id = State::saveState($state, 'saml:proxy:invalid_idp', true);
-        $url = \SimpleSAML\Module::getModuleURL('saml/proxy/invalid_session.php');
-        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, ['AuthState' => $id]);
+        $id = Auth\State::saveState($state, 'saml:proxy:invalid_idp', true);
+        $url = Module::getModuleURL('saml/proxy/invalid_session.php');
+        Utils\HTTP::redirectTrustedURL($url, ['AuthState' => $id]);
         assert(false);
     }
 
+
     /**
      * Log the user out before logging in again.
      *
      * This method will never return.
      *
      * @param array $state The state array.
+     * @return void
      */
     public static function reauthLogout(array $state)
     {
-        \SimpleSAML\Logger::debug('Proxy: logging the user out before re-authentication.');
+        Logger::debug('Proxy: logging the user out before re-authentication.');
 
         if (isset($state['Responder'])) {
             $state['saml:proxy:reauthLogout:PrevResponder'] = $state['Responder'];
         }
-        $state['Responder'] = ['\SimpleSAML\Module\saml\Auth\Source\SP', 'reauthPostLogout'];
+        $state['Responder'] = [SP::class, 'reauthPostLogout'];
 
-        $idp = \SimpleSAML\IdP::getByState($state);
+        $idp = IdP::getByState($state);
         $idp->handleLogoutRequest($state, null);
         assert(false);
     }
 
+
     /**
      * Complete login operation after re-authenticating the user on another IdP.
      *
      * @param array $state  The authentication state.
+     * @return void
      */
     public static function reauthPostLogin(array $state)
     {
         assert(isset($state['ReturnCallback']));
 
         // Update session state
-        $session = \SimpleSAML\Session::getSessionFromRequest();
+        $session = Session::getSessionFromRequest();
         $authId = $state['saml:sp:AuthId'];
-        $session->doLogin($authId, State::getPersistentAuthData($state));
+        $session->doLogin($authId, Auth\State::getPersistentAuthData($state));
 
         // resume the login process
         call_user_func($state['ReturnCallback'], $state);
         assert(false);
     }
 
+
     /**
      * Post-logout handler for re-authentication.
      *
@@ -944,28 +999,32 @@ public static function reauthPostLogin(array $state)
      *
      * @param \SimpleSAML\IdP $idp The IdP we are logging out from.
      * @param array &$state The state array with the state during logout.
+     * @return void
      */
-    public static function reauthPostLogout(\SimpleSAML\IdP $idp, array $state)
+    public static function reauthPostLogout(IdP $idp, array $state)
     {
         assert(isset($state['saml:sp:AuthId']));
 
-        \SimpleSAML\Logger::debug('Proxy: logout completed.');
+        Logger::debug('Proxy: logout completed.');
 
         if (isset($state['saml:proxy:reauthLogout:PrevResponder'])) {
             $state['Responder'] = $state['saml:proxy:reauthLogout:PrevResponder'];
         }
 
-        $sp = Source::getById($state['saml:sp:AuthId'], '\SimpleSAML\Module\saml\Auth\Source\SP');
-        /** @var \SimpleSAML\Module\saml\Auth\Source\SP $authSource */
-        \SimpleSAML\Logger::debug('Proxy: logging in again.');
+        /** @var \SimpleSAML\Module\saml\Auth\Source\SP $sp */
+        $sp = Auth\Source::getById($state['saml:sp:AuthId'], Module\saml\Auth\Source\SP::class);
+
+        Logger::debug('Proxy: logging in again.');
         $sp->authenticate($state);
         assert(false);
     }
 
+
     /**
      * Start a SAML 2 logout operation.
      *
      * @param array $state  The logout state.
+     * @return void
      */
     public function startSLO2(&$state)
     {
@@ -974,7 +1033,7 @@ public function startSLO2(&$state)
         assert(array_key_exists('saml:logout:NameID', $state));
         assert(array_key_exists('saml:logout:SessionIndex', $state));
 
-        $id = State::saveState($state, 'saml:slosent');
+        $id = Auth\State::saveState($state, 'saml:slosent');
 
         $idp = $state['saml:logout:IdP'];
         $nameId = $state['saml:logout:NameID'];
@@ -982,15 +1041,21 @@ public function startSLO2(&$state)
 
         $idpMetadata = $this->getIdPMetadata($idp);
 
-        $endpoint = $idpMetadata->getEndpointPrioritizedByBinding('SingleLogoutService', [
-            \SAML2\Constants::BINDING_HTTP_REDIRECT,
-            \SAML2\Constants::BINDING_HTTP_POST], false);
+        /** @var array $endpoint */
+        $endpoint = $idpMetadata->getEndpointPrioritizedByBinding(
+            'SingleLogoutService',
+            [
+                Constants::BINDING_HTTP_REDIRECT,
+                Constants::BINDING_HTTP_POST
+            ],
+            false
+        );
         if ($endpoint === false) {
-            \SimpleSAML\Logger::info('No logout endpoint for IdP '.var_export($idp, true).'.');
+            Logger::info('No logout endpoint for IdP ' . var_export($idp, true) . '.');
             return;
         }
 
-        $lr = \SimpleSAML\Module\saml\Message::buildLogoutRequest($this->metadata, $idpMetadata);
+        $lr = Module\saml\Message::buildLogoutRequest($this->metadata, $idpMetadata);
         $lr->setNameId($nameId);
         $lr->setSessionIndex($sessionIndex);
         $lr->setRelayState($id);
@@ -1001,19 +1066,21 @@ public function startSLO2(&$state)
             $encryptNameId = $this->metadata->getBoolean('nameid.encryption', false);
         }
         if ($encryptNameId) {
-            $lr->encryptNameId(\SimpleSAML\Module\saml\Message::getEncryptionKey($idpMetadata));
+            $lr->encryptNameId(Module\saml\Message::getEncryptionKey($idpMetadata));
         }
 
-        $b = \SAML2\Binding::getBinding($endpoint['Binding']);
+        $b = Binding::getBinding($endpoint['Binding']);
         $b->send($lr);
 
         assert(false);
     }
 
+
     /**
      * Start logout operation.
      *
      * @param array $state  The logout state.
+     * @return void
      */
     public function logout(&$state)
     {
@@ -1034,12 +1101,14 @@ public function logout(&$state)
         }
     }
 
+
     /**
      * Handle a response from a SSO operation.
      *
      * @param array $state  The authentication state.
      * @param string $idp  The entity id of the IdP.
      * @param array $attributes  The attributes.
+     * @return void
      */
     public function handleResponse(array $state, $idp, array $attributes)
     {
@@ -1059,7 +1128,7 @@ public function handleResponse(array $state, $idp, array $attributes)
         $authProcState = [
             'saml:sp:IdP' => $idp,
             'saml:sp:State' => $state,
-            'ReturnCall' => ['\SimpleSAML\Module\saml\Auth\Source\SP', 'onProcessingCompleted'],
+            'ReturnCall' => [SP::class, 'onProcessingCompleted'],
 
             'Attributes' => $attributes,
             'Destination' => $spMetadataArray,
@@ -1073,16 +1142,18 @@ public function handleResponse(array $state, $idp, array $attributes)
             $authProcState['saml:sp:SessionIndex'] = $state['saml:sp:SessionIndex'];
         }
 
-        $pc = new \SimpleSAML\Auth\ProcessingChain($idpMetadataArray, $spMetadataArray, 'sp');
+        $pc = new Auth\ProcessingChain($idpMetadataArray, $spMetadataArray, 'sp');
         $pc->processState($authProcState);
 
         self::onProcessingCompleted($authProcState);
     }
 
+
     /**
      * Handle a logout request from an IdP.
      *
      * @param string $idpEntityId  The entity ID of the IdP.
+     * @return void
      */
     public function handleLogout($idpEntityId)
     {
@@ -1092,6 +1163,7 @@ public function handleLogout($idpEntityId)
         $this->callLogoutCallback($idpEntityId);
     }
 
+
     /**
      * Handle an unsolicited login operations.
      *
@@ -1105,22 +1177,25 @@ public function handleLogout($idpEntityId)
      * the session. The function will check if the URL is allowed, so there is no need to
      * manually check the URL on beforehand. Please refer to the 'trusted.url.domains'
      * configuration directive for more information about allowing (or disallowing) URLs.
+     * @return void
      */
     public static function handleUnsolicitedAuth($authId, array $state, $redirectTo)
     {
         assert(is_string($authId));
         assert(is_string($redirectTo));
 
-        $session = \SimpleSAML\Session::getSessionFromRequest();
-        $session->doLogin($authId, State::getPersistentAuthData($state));
+        $session = Session::getSessionFromRequest();
+        $session->doLogin($authId, Auth\State::getPersistentAuthData($state));
 
-        \SimpleSAML\Utils\HTTP::redirectUntrustedURL($redirectTo);
+        Utils\HTTP::redirectUntrustedURL($redirectTo);
     }
 
+
     /**
      * Called when we have completed the procssing chain.
      *
      * @param array $authProcState  The processing chain state.
+     * @return void
      */
     public static function onProcessingCompleted(array $authProcState)
     {
@@ -1132,9 +1207,11 @@ public static function onProcessingCompleted(array $authProcState)
         $state = $authProcState['saml:sp:State'];
 
         $sourceId = $state['saml:sp:AuthId'];
-        $source = Source::getById($sourceId);
+
+        /** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
+        $source = Auth\Source::getById($sourceId);
         if ($source === null) {
-            throw new \Exception('Could not find authentication source with id '.$sourceId);
+            throw new \Exception('Could not find authentication source with id ' . $sourceId);
         }
 
         // Register a callback that we can call if we receive a logout request from the IdP
@@ -1151,6 +1228,6 @@ public static function onProcessingCompleted(array $authProcState)
             self::handleUnsolicitedAuth($sourceId, $state, $redirectTo);
         }
 
-        Source::completeAuth($state);
+        Auth\Source::completeAuth($state);
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/BaseNameIDGenerator.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/BaseNameIDGenerator.php
index 5ff64f3e3d..d199f28f97 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/BaseNameIDGenerator.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/BaseNameIDGenerator.php
@@ -2,12 +2,14 @@
 
 namespace SimpleSAML\Module\saml;
 
+use SAML2\XML\saml\NameID;
+use SimpleSAML\Logger;
+
 /**
  * Base filter for generating NameID values.
  *
  * @package SimpleSAMLphp
  */
-
 abstract class BaseNameIDGenerator extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
@@ -37,11 +39,11 @@ abstract class BaseNameIDGenerator extends \SimpleSAML\Auth\ProcessingFilter
     /**
      * The format of this NameID.
      *
-     * This property must be initialized the subclass.
+     * This property must be set by the subclass.
      *
-     * @var string
+     * @var string|null
      */
-    protected $format;
+    protected $format = null;
 
 
     /**
@@ -81,6 +83,7 @@ abstract protected function getValue(array &$state);
      * Generate transient NameID.
      *
      * @param array &$state  The request state.
+     * @return void
      */
     public function process(&$state)
     {
@@ -92,7 +95,7 @@ public function process(&$state)
             return;
         }
 
-        $nameId = new \SAML2\XML\saml\NameID();
+        $nameId = new NameID();
         $nameId->setValue($value);
         $nameId->setFormat($this->format);
 
@@ -100,7 +103,7 @@ public function process(&$state)
             if (isset($state['IdPMetadata']['entityid'])) {
                 $nameId->setNameQualifier($state['IdPMetadata']['entityid']);
             } else {
-                \SimpleSAML\Logger::warning('No IdP entity ID, unable to set NameQualifier.');
+                Logger::warning('No IdP entity ID, unable to set NameQualifier.');
             }
         } elseif (is_string($this->nameQualifier)) {
             $nameId->setNameQualifier($this->nameQualifier);
@@ -110,7 +113,7 @@ public function process(&$state)
             if (isset($state['SPMetadata']['entityid'])) {
                 $nameId->setSPNameQualifier($state['SPMetadata']['entityid']);
             } else {
-                \SimpleSAML\Logger::warning('No SP entity ID, unable to set SPNameQualifier.');
+                Logger::warning('No SP entity ID, unable to set SPNameQualifier.');
             }
         } elseif (is_string($this->spNameQualifier)) {
             $nameId->setSPNameQualifier($this->spNameQualifier);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error.php
index e45b846ff8..50604b39ff 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error.php
@@ -2,6 +2,8 @@
 
 namespace SimpleSAML\Module\saml;
 
+use SAML2\Constants;
+
 /**
  * Class for representing a SAML 2 error.
  *
@@ -50,10 +52,10 @@ public function __construct($status, $subStatus = null, $statusMessage = null, \
 
         $st = self::shortStatus($status);
         if ($subStatus !== null) {
-            $st .= '/'.self::shortStatus($subStatus);
+            $st .= '/' . self::shortStatus($subStatus);
         }
         if ($statusMessage !== null) {
-            $st .= ': '.$statusMessage;
+            $st .= ': ' . $statusMessage;
         }
         parent::__construct($st, 0, $cause);
 
@@ -114,16 +116,16 @@ public static function fromException(\Exception $exception)
         // TODO: remove this branch in 2.0
         } elseif ($exception instanceof \SimpleSAML\Error\NoPassive) {
             $e = new self(
-                \SAML2\Constants::STATUS_RESPONDER,
-                \SAML2\Constants::STATUS_NO_PASSIVE,
+                Constants::STATUS_RESPONDER,
+                Constants::STATUS_NO_PASSIVE,
                 $exception->getMessage(),
                 $exception
             );
         // TODO: remove this branch in 2.0
         } elseif ($exception instanceof \SimpleSAML\Error\ProxyCountExceeded) {
             $e = new self(
-                \SAML2\Constants::STATUS_RESPONDER,
-                \SAML2\Constants::STATUS_PROXY_COUNT_EXCEEDED,
+                Constants::STATUS_RESPONDER,
+                Constants::STATUS_PROXY_COUNT_EXCEEDED,
                 $exception->getMessage(),
                 $exception
             );
@@ -131,7 +133,7 @@ public static function fromException(\Exception $exception)
             $e = new self(
                 \SAML2\Constants::STATUS_RESPONDER,
                 null,
-                get_class($exception).': '.$exception->getMessage(),
+                get_class($exception) . ': ' . $exception->getMessage(),
                 $exception
             );
         }
@@ -156,11 +158,11 @@ public function toException()
         $e = null;
 
         switch ($this->status) {
-            case \SAML2\Constants::STATUS_RESPONDER:
+            case Constants::STATUS_RESPONDER:
                 switch ($this->subStatus) {
-                    case \SAML2\Constants::STATUS_NO_PASSIVE:
+                    case Constants::STATUS_NO_PASSIVE:
                         $e = new \SimpleSAML\Module\saml\Error\NoPassive(
-                            \SAML2\Constants::STATUS_RESPONDER,
+                            Constants::STATUS_RESPONDER,
                             $this->statusMessage
                         );
                         break;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAuthnContext.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAuthnContext.php
index 54a147463b..c1b47f88cc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAuthnContext.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAuthnContext.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\Module\saml\Error;
-
 /**
  * A SAML error indicating that none of the requested Authentication Contexts can be used.
  *
@@ -9,6 +7,8 @@
  * @package SimpleSAMLphp
  */
 
+namespace SimpleSAML\Module\saml\Error;
+
 use SAML2\Constants;
 
 class NoAuthnContext extends \SimpleSAML\Module\saml\Error
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAvailableIDP.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAvailableIDP.php
index 92f78d00b5..3f024c0d0e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAvailableIDP.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoAvailableIDP.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\Module\saml\Error;
-
 /**
  * A SAML error indicating that none of the requested IdPs can be used.
  *
@@ -9,6 +7,8 @@
  * @package SimpleSAMLphp
  */
 
+namespace SimpleSAML\Module\saml\Error;
+
 use SAML2\Constants;
 
 class NoAvailableIDP extends \SimpleSAML\Module\saml\Error
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoPassive.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoPassive.php
index 8602bce1fc..1a5a8d5c18 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoPassive.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoPassive.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\Module\saml\Error;
-
 /**
  * A SAML error indicating that passive authentication cannot be used.
  *
@@ -9,6 +7,8 @@
  * @package SimpleSAMLphp
  */
 
+namespace SimpleSAML\Module\saml\Error;
+
 use SAML2\Constants;
 
 class NoPassive extends \SimpleSAML\Module\saml\Error
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoSupportedIDP.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoSupportedIDP.php
index 5eedd1d27a..429ddf538c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoSupportedIDP.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/NoSupportedIDP.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\Module\saml\Error;
-
 /**
  * A SAML error indicating that none of the IdPs requested are supported.
  *
@@ -9,6 +7,8 @@
  * @package SimpleSAMLphp
  */
 
+namespace SimpleSAML\Module\saml\Error;
+
 use SAML2\Constants;
 
 class NoSupportedIDP extends \SimpleSAML\Module\saml\Error
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/ProxyCountExceeded.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/ProxyCountExceeded.php
index f85216d822..99e40182c1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/ProxyCountExceeded.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Error/ProxyCountExceeded.php
@@ -1,7 +1,5 @@
 <?php
 
-namespace SimpleSAML\Module\saml\Error;
-
 /**
  * A SAML error indicating that the maximum amount of proxies traversed has been reached.
  *
@@ -9,6 +7,8 @@
  * @package SimpleSAMLphp
  */
 
+namespace SimpleSAML\Module\saml\Error;
+
 use SAML2\Constants;
 
 class ProxyCountExceeded extends \SimpleSAML\Module\saml\Error
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML1.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML1.php
index e158a666b5..d0a3d8c9ac 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML1.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML1.php
@@ -2,20 +2,25 @@
 
 namespace SimpleSAML\Module\saml\IdP;
 
+use SimpleSAML\Auth;
 use SimpleSAML\Bindings\Shib13\HTTPPost;
-use SimpleSAML\Utils\Config\Metadata;
-use SimpleSAML\Utils\Crypto;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\IdP;
+use SimpleSAML\Logger;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Stats;
+use SimpleSAML\Utils;
+use SimpleSAML\XML\Shib13\AuthnResponse;
 
 /**
  * IdP implementation for SAML 1.1 protocol.
  *
  * @package SimpleSAMLphp
+ * @deprecated This class will be removed in a future release
  */
-
 class SAML1
 {
-
     /**
      * Retrieve the metadata of a hosted SAML 1.1 IdP.
      *
@@ -24,11 +29,11 @@ class SAML1
      * @return array
      * @throws \SimpleSAML\Error\Exception
      * @throws \SimpleSAML\Error\MetadataNotFound
-     * @throws \SimpleSAML_Error_Exception
+     * @throws \SimpleSAML\Error\Exception
      */
     public static function getHostedMetadata($entityid)
     {
-        $handler = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $handler = MetaDataStorageHandler::getMetadataHandler();
         $config = $handler->getMetaDataConfig($entityid, 'shib13-idp-hosted');
 
         $metadata = [
@@ -41,7 +46,7 @@ public static function getHostedMetadata($entityid)
 
         // add certificates
         $keys = [];
-        $certInfo = Crypto::loadPublicKey($config, false, 'new_');
+        $certInfo = Utils\Crypto::loadPublicKey($config, false, 'new_');
         $hasNewCert = false;
         if ($certInfo !== null) {
             $keys[] = [
@@ -54,7 +59,8 @@ public static function getHostedMetadata($entityid)
             $hasNewCert = true;
         }
 
-        $certInfo = Crypto::loadPublicKey($config, true);
+        /** @var array $certInfo */
+        $certInfo = Utils\Crypto::loadPublicKey($config, true);
         $keys[] = [
             'type' => 'X509Certificate',
             'signing' => true,
@@ -73,7 +79,7 @@ public static function getHostedMetadata($entityid)
             );
 
             if (!$config->hasValue('OrganizationURL')) {
-                throw new \SimpleSAMl\Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
+                throw new Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
             }
             $metadata['OrganizationURL'] = $config->getLocalizedString('OrganizationURL');
         }
@@ -88,7 +94,7 @@ public static function getHostedMetadata($entityid)
             $metadata['EntityAttributes'] = $config->getArray('EntityAttributes');
 
             // check for entity categories
-            if (Metadata::isHiddenFromDiscovery($metadata)) {
+            if (Utils\Config\Metadata::isHiddenFromDiscovery($metadata)) {
                 $metadata['hide.from.discovery'] = true;
             }
         }
@@ -106,7 +112,7 @@ public static function getHostedMetadata($entityid)
         }
 
         // add contact information
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
         $email = $globalConfig->getString('technicalcontact_email', false);
         if ($email && $email !== 'na@example.org') {
             $contact = [
@@ -114,7 +120,7 @@ public static function getHostedMetadata($entityid)
                 'name' => $globalConfig->getString('technicalcontact_name', null),
                 'contactType' => 'technical',
             ];
-            $metadata['contacts'][] = Metadata::getContact($contact);
+            $metadata['contacts'][] = Utils\Config\Metadata::getContact($contact);
         }
 
         return $metadata;
@@ -125,6 +131,7 @@ public static function getHostedMetadata($entityid)
      * Send a response to the SP.
      *
      * @param array $state  The authentication state.
+     * @return void
      */
     public static function sendResponse(array $state)
     {
@@ -135,23 +142,23 @@ public static function sendResponse(array $state)
 
         $spMetadata = $state["SPMetadata"];
         $spEntityId = $spMetadata['entityid'];
-        $spMetadata = \SimpleSAML\Configuration::loadFromArray(
+        $spMetadata = Configuration::loadFromArray(
             $spMetadata,
             '$metadata['.var_export($spEntityId, true).']'
         );
 
-        \SimpleSAML\Logger::info('Sending SAML 1.1 Response to '.var_export($spEntityId, true));
+        Logger::info('Sending SAML 1.1 Response to '.var_export($spEntityId, true));
 
         $attributes = $state['Attributes'];
         $shire = $state['saml:shire'];
         $target = $state['saml:target'];
 
-        $idp = \SimpleSAML\IdP::getByState($state);
+        $idp = IdP::getByState($state);
 
         $idpMetadata = $idp->getConfig();
 
-        $config = \SimpleSAML\Configuration::getInstance();
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $config = Configuration::getInstance();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
 
         $statsData = [
             'spEntityID' => $spEntityId,
@@ -161,10 +168,10 @@ public static function sendResponse(array $state)
         if (isset($state['saml:AuthnRequestReceivedAt'])) {
             $statsData['logintime'] = microtime(true) - $state['saml:AuthnRequestReceivedAt'];
         }
-        \SimpleSAML\Stats::log('saml:idp:Response', $statsData);
+        Stats::log('saml:idp:Response', $statsData);
 
         // Generate and send response.
-        $ar = new \SimpleSAML\XML\Shib13\AuthnResponse();
+        $ar = new AuthnResponse();
         $authnResponseXML = $ar->generate($idpMetadata, $spMetadata, $shire, $attributes);
 
         $httppost = new HTTPPost($config, $metadata);
@@ -176,8 +183,9 @@ public static function sendResponse(array $state)
      * Receive an authentication request.
      *
      * @param \SimpleSAML\IdP $idp  The IdP we are receiving it for.
+     * @return void
      */
-    public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
+    public static function receiveAuthnRequest(IdP $idp)
     {
         if (isset($_REQUEST['cookieTime'])) {
             $cookieTime = (int) $_REQUEST['cookieTime'];
@@ -186,17 +194,17 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
                  * Less than five seconds has passed since we were
                  * here the last time. Cookies are probably disabled.
                  */
-                HTTP::checkSessionCookie(HTTP::getSelfURL());
+                Utils\HTTP::checkSessionCookie(Utils\HTTP::getSelfURL());
             }
         }
 
         if (!isset($_REQUEST['providerId'])) {
-            throw new \SimpleSAML\Error\BadRequest('Missing providerId parameter.');
+            throw new Error\BadRequest('Missing providerId parameter.');
         }
         $spEntityId = (string) $_REQUEST['providerId'];
 
         if (!isset($_REQUEST['shire'])) {
-            throw new \SimpleSAML\Error\BadRequest('Missing shire parameter.');
+            throw new Error\BadRequest('Missing shire parameter.');
         }
         $shire = (string) $_REQUEST['shire'];
 
@@ -206,11 +214,11 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
             $target = null;
         }
 
-        \SimpleSAML\Logger::info(
+        Logger::info(
             'Shib1.3 - IdP.SSOService: Got incoming Shib authnRequest from '.var_export($spEntityId, true).'.'
         );
 
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $spMetadata = $metadata->getMetaDataConfig($spEntityId, 'shib13-sp-remote');
 
         $found = false;
@@ -230,7 +238,7 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
             );
         }
 
-        \SimpleSAML\Stats::log(
+        Stats::log(
             'saml:idp:AuthnRequest',
             [
                 'spEntityID' => $spEntityId,
@@ -238,15 +246,15 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
             ]
         );
 
-        $sessionLostURL = HTTP::addURLParameters(
-            HTTP::getSelfURL(),
+        $sessionLostURL = Utils\HTTP::addURLParameters(
+            Utils\HTTP::getSelfURL(),
             ['cookieTime' => time()]
         );
 
         $state = [
             'Responder' => ['\SimpleSAML\Module\saml\IdP\SAML1', 'sendResponse'],
             'SPMetadata' => $spMetadata->toArray(),
-            \SimpleSAML\Auth\State::RESTART => $sessionLostURL,
+            Auth\State::RESTART => $sessionLostURL,
             'saml:shire' => $shire,
             'saml:target' => $target,
             'saml:AuthnRequestReceivedAt' => microtime(true),
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML2.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML2.php
index 3d4d255b4d..eca7ad6e89 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML2.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SAML2.php
@@ -2,28 +2,48 @@
 
 namespace SimpleSAML\Module\saml\IdP;
 
+use DOMNodeList;
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use SAML2\Assertion;
+use SAML2\AuthnRequest;
+use SAML2\Binding;
 use SAML2\Constants;
+use SAML2\DOMDocumentFactory;
+use SAML2\EncryptedAssertion;
+use SAML2\HTTPRedirect;
+use SAML2\LogoutRequest;
+use SAML2\LogoutResponse;
+use SAML2\SOAP;
+use SAML2\XML\ds\X509Certificate;
+use SAML2\XML\ds\X509Data;
+use SAML2\XML\ds\KeyInfo;
+use SAML2\XML\saml\AttributeValue;
 use SAML2\XML\saml\Issuer;
+use SAML2\XML\saml\NameID;
+use SAML2\XML\saml\SubjectConfirmation;
+use SAML2\XML\saml\SubjectConfirmationData;
+use SimpleSAML\Auth;
 use SimpleSAML\Configuration;
+use SimpleSAML\Error;
+use SimpleSAML\IdP;
 use SimpleSAML\Logger;
-use SAML2\SOAP;
-use SimpleSAML\Utils\Config\Metadata;
-use SimpleSAML\Utils\Crypto;
-use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+use SimpleSAML\Module;
+use SimpleSAML\Stats;
+use SimpleSAML\Utils;
 
 /**
  * IdP implementation for SAML 2.0 protocol.
  *
  * @package SimpleSAMLphp
  */
-
 class SAML2
 {
     /**
      * Send a response to the SP.
      *
      * @param array $state The authentication state.
+     * @return void
      */
     public static function sendResponse(array $state)
     {
@@ -37,17 +57,17 @@ public static function sendResponse(array $state)
         $spEntityId = $spMetadata['entityid'];
         $spMetadata = Configuration::loadFromArray(
             $spMetadata,
-            '$metadata['.var_export($spEntityId, true).']'
+            '$metadata[' . var_export($spEntityId, true) . ']'
         );
 
-        Logger::info('Sending SAML 2.0 Response to '.var_export($spEntityId, true));
+        Logger::info('Sending SAML 2.0 Response to ' . var_export($spEntityId, true));
 
         $requestId = $state['saml:RequestId'];
         $relayState = $state['saml:RelayState'];
         $consumerURL = $state['saml:ConsumerURL'];
         $protocolBinding = $state['saml:Binding'];
 
-        $idp = \SimpleSAML\IdP::getByState($state);
+        $idp = IdP::getByState($state);
 
         $idpMetadata = $idp->getConfig();
 
@@ -59,7 +79,7 @@ public static function sendResponse(array $state)
 
         // create the session association (for logout)
         $association = [
-            'id'                => 'saml:'.$spEntityId,
+            'id'                => 'saml:' . $spEntityId,
             'Handler'           => '\SimpleSAML\Module\saml\IdP\SAML2',
             'Expires'           => $assertion->getSessionNotOnOrAfter(),
             'saml:entityID'     => $spEntityId,
@@ -87,10 +107,10 @@ public static function sendResponse(array $state)
         if (isset($state['saml:AuthnRequestReceivedAt'])) {
             $statsData['logintime'] = microtime(true) - $state['saml:AuthnRequestReceivedAt'];
         }
-        \SimpleSAML\Stats::log('saml:idp:Response', $statsData);
+        Stats::log('saml:idp:Response', $statsData);
 
         // send the response
-        $binding = \SAML2\Binding::getBinding($protocolBinding);
+        $binding = Binding::getBinding($protocolBinding);
         $binding->send($ar);
     }
 
@@ -101,6 +121,7 @@ public static function sendResponse(array $state)
      * \SimpleSAML\Error\Exception $exception  The exception.
      *
      * @param array $state The error state.
+     * @return void
      */
     public static function handleAuthError(\SimpleSAML\Error\Exception $exception, array $state)
     {
@@ -113,7 +134,7 @@ public static function handleAuthError(\SimpleSAML\Error\Exception $exception, a
         $spEntityId = $spMetadata['entityid'];
         $spMetadata = Configuration::loadFromArray(
             $spMetadata,
-            '$metadata['.var_export($spEntityId, true).']'
+            '$metadata[' . var_export($spEntityId, true) . ']'
         );
 
         $requestId = $state['saml:RequestId'];
@@ -121,13 +142,13 @@ public static function handleAuthError(\SimpleSAML\Error\Exception $exception, a
         $consumerURL = $state['saml:ConsumerURL'];
         $protocolBinding = $state['saml:Binding'];
 
-        $idp = \SimpleSAML\IdP::getByState($state);
+        $idp = IdP::getByState($state);
 
         $idpMetadata = $idp->getConfig();
 
         $error = \SimpleSAML\Module\saml\Error::fromException($exception);
 
-        Logger::warning("Returning error to SP with entity ID '".var_export($spEntityId, true)."'.");
+        Logger::warning("Returning error to SP with entity ID '" . var_export($spEntityId, true) . "'.");
         $exception->log(Logger::WARNING);
 
         $ar = self::buildResponse($idpMetadata, $spMetadata, $consumerURL);
@@ -150,9 +171,9 @@ public static function handleAuthError(\SimpleSAML\Error\Exception $exception, a
         if (isset($state['saml:AuthnRequestReceivedAt'])) {
             $statsData['logintime'] = microtime(true) - $state['saml:AuthnRequestReceivedAt'];
         }
-        \SimpleSAML\Stats::log('saml:idp:Response:error', $statsData);
+        Stats::log('saml:idp:Response:error', $statsData);
 
-        $binding = \SAML2\Binding::getBinding($protocolBinding);
+        $binding = Binding::getBinding($protocolBinding);
         $binding->send($ar);
     }
 
@@ -162,15 +183,15 @@ public static function handleAuthError(\SimpleSAML\Error\Exception $exception, a
      *
      * @param array                     $supportedBindings The bindings we allow for the response.
      * @param \SimpleSAML\Configuration $spMetadata The metadata for the SP.
-     * @param string|NULL               $AssertionConsumerServiceURL AssertionConsumerServiceURL from request.
-     * @param string|NULL               $ProtocolBinding ProtocolBinding from request.
-     * @param int|NULL                  $AssertionConsumerServiceIndex AssertionConsumerServiceIndex from request.
+     * @param string|null               $AssertionConsumerServiceURL AssertionConsumerServiceURL from request.
+     * @param string|null               $ProtocolBinding ProtocolBinding from request.
+     * @param int|null                  $AssertionConsumerServiceIndex AssertionConsumerServiceIndex from request.
      *
-     * @return array  Array with the Location and Binding we should use for the response.
+     * @return array|null  Array with the Location and Binding we should use for the response.
      */
     private static function getAssertionConsumerService(
         array $supportedBindings,
-        \SimpleSAML\Configuration $spMetadata,
+        Configuration $spMetadata,
         $AssertionConsumerServiceURL,
         $ProtocolBinding,
         $AssertionConsumerServiceIndex
@@ -232,14 +253,14 @@ private static function getAssertionConsumerService(
 
         Logger::warning('Authentication request specifies invalid AssertionConsumerService:');
         if ($AssertionConsumerServiceURL !== null) {
-            Logger::warning('AssertionConsumerServiceURL: '.var_export($AssertionConsumerServiceURL, true));
+            Logger::warning('AssertionConsumerServiceURL: ' . var_export($AssertionConsumerServiceURL, true));
         }
         if ($ProtocolBinding !== null) {
-            Logger::warning('ProtocolBinding: '.var_export($ProtocolBinding, true));
+            Logger::warning('ProtocolBinding: ' . var_export($ProtocolBinding, true));
         }
         if ($AssertionConsumerServiceIndex !== null) {
             Logger::warning(
-                'AssertionConsumerServiceIndex: '.var_export($AssertionConsumerServiceIndex, true)
+                'AssertionConsumerServiceIndex: ' . var_export($AssertionConsumerServiceIndex, true)
             );
         }
 
@@ -252,22 +273,23 @@ private static function getAssertionConsumerService(
      * Receive an authentication request.
      *
      * @param \SimpleSAML\IdP $idp The IdP we are receiving it for.
+     * @return void
      * @throws \SimpleSAML\Error\BadRequest In case an error occurs when trying to receive the request.
      */
     public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
     {
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $idpMetadata = $idp->getConfig();
 
-        $supportedBindings = [\SAML2\Constants::BINDING_HTTP_POST];
+        $supportedBindings = [Constants::BINDING_HTTP_POST];
         if ($idpMetadata->getBoolean('saml20.sendartifact', false)) {
-            $supportedBindings[] = \SAML2\Constants::BINDING_HTTP_ARTIFACT;
+            $supportedBindings[] = Constants::BINDING_HTTP_ARTIFACT;
         }
         if ($idpMetadata->getBoolean('saml20.hok.assertion', false)) {
-            $supportedBindings[] = \SAML2\Constants::BINDING_HOK_SSO;
+            $supportedBindings[] = Constants::BINDING_HOK_SSO;
         }
         if ($idpMetadata->getBoolean('saml20.ecp', false)) {
-            $supportedBindings[] = \SAML2\Constants::BINDING_PAOS;
+            $supportedBindings[] = Constants::BINDING_PAOS;
         }
 
         if (isset($_REQUEST['spentityid']) || isset($_REQUEST['providerId'])) {
@@ -280,7 +302,7 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
                      * Less than five seconds has passed since we were
                      * here the last time. Cookies are probably disabled.
                      */
-                    \SimpleSAML\Utils\HTTP::checkSessionCookie(\SimpleSAML\Utils\HTTP::getSelfURL());
+                    Utils\HTTP::checkSessionCookie(Utils\HTTP::getSelfURL());
                 }
             }
 
@@ -325,30 +347,33 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
             $extensions = null;
             $allowCreate = true;
             $authnContext = null;
-            $binding = null;
 
             $idpInit = true;
 
             Logger::info(
-                'SAML2.0 - IdP.SSOService: IdP initiated authentication: '.var_export($spEntityId, true)
+                'SAML2.0 - IdP.SSOService: IdP initiated authentication: ' . var_export($spEntityId, true)
             );
         } else {
-            $binding = \SAML2\Binding::getCurrentBinding();
+            $binding = Binding::getCurrentBinding();
             $request = $binding->receive();
 
-            if (!($request instanceof \SAML2\AuthnRequest)) {
-                throw new \SimpleSAML\Error\BadRequest(
+            if (!($request instanceof AuthnRequest)) {
+                throw new Error\BadRequest(
                     'Message received on authentication request endpoint wasn\'t an authentication request.'
                 );
             }
 
             $issuer = $request->getIssuer();
             if ($issuer === null) {
-                throw new \SimpleSAML\Error\BadRequest(
+                throw new Error\BadRequest(
                     'Received message on authentication request endpoint without issuer.'
                 );
             } elseif ($issuer instanceof Issuer) {
                 $spEntityId = $issuer->getValue();
+                if ($spEntityId === null) {
+                    /* Without an issuer we have no way to respond to the message. */
+                    throw new Error\BadRequest('Received message on logout endpoint without issuer.');
+                }
             } else { // we got a string, old case
                 $spEntityId = $issuer;
             }
@@ -388,11 +413,11 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
             $idpInit = false;
 
             Logger::info(
-                'SAML2.0 - IdP.SSOService: incoming authentication request: '.var_export($spEntityId, true)
+                'SAML2.0 - IdP.SSOService: incoming authentication request: ' . var_export($spEntityId, true)
             );
         }
 
-        \SimpleSAML\Stats::log('saml:idp:AuthnRequest', [
+        Stats::log('saml:idp:AuthnRequest', [
             'spEntityID'  => $spEntityId,
             'idpEntityID' => $idpMetadata->getString('entityid'),
             'forceAuthn'  => $forceAuthn,
@@ -408,6 +433,9 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
             $protocolBinding,
             $consumerIndex
         );
+        if ($acsEndpoint === null) {
+            throw new \Exception('Unable to use any of the ACS endpoints found for SP \'' . $spEntityId . '\'');
+        }
 
         $IDPList = array_unique(array_merge($IDPList, $spMetadata->getArrayizeString('IDPList', [])));
         if ($ProxyCount === null) {
@@ -430,18 +458,18 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
         */
         $sessionLostParams['cookieTime'] = time();
 
-        $sessionLostURL = \SimpleSAML\Utils\HTTP::addURLParameters(
-            \SimpleSAML\Utils\HTTP::getSelfURLNoQuery(),
+        $sessionLostURL = Utils\HTTP::addURLParameters(
+            Utils\HTTP::getSelfURLNoQuery(),
             $sessionLostParams
         );
 
         $state = [
-            'Responder'                   => ['\SimpleSAML\Module\saml\IdP\SAML2', 'sendResponse'],
-            \SimpleSAML\Auth\State::EXCEPTION_HANDLER_FUNC => [
+            'Responder' => ['\SimpleSAML\Module\saml\IdP\SAML2', 'sendResponse'],
+            Auth\State::EXCEPTION_HANDLER_FUNC => [
                 '\SimpleSAML\Module\saml\IdP\SAML2',
                 'handleAuthError'
             ],
-            \SimpleSAML\Auth\State::RESTART => $sessionLostURL,
+            Auth\State::RESTART => $sessionLostURL,
 
             'SPMetadata'                  => $spMetadata->toArray(),
             'saml:RelayState'             => $relayState,
@@ -463,36 +491,39 @@ public static function receiveAuthnRequest(\SimpleSAML\IdP $idp)
         $idp->handleAuthenticationRequest($state);
     }
 
+
     /**
      * Send a logout request to a given association.
      *
      * @param \SimpleSAML\IdP $idp The IdP we are sending a logout request from.
      * @param array           $association The association that should be terminated.
-     * @param string|NULL     $relayState An id that should be carried across the logout.
+     * @param string|null     $relayState An id that should be carried across the logout.
+     * @return void
      */
-    public static function sendLogoutRequest(\SimpleSAML\IdP $idp, array $association, $relayState)
+    public static function sendLogoutRequest(IdP $idp, array $association, $relayState)
     {
         assert(is_string($relayState) || $relayState === null);
 
-        Logger::info('Sending SAML 2.0 LogoutRequest to: '.var_export($association['saml:entityID'], true));
+        Logger::info('Sending SAML 2.0 LogoutRequest to: ' . var_export($association['saml:entityID'], true));
 
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $idpMetadata = $idp->getConfig();
         $spMetadata = $metadata->getMetaDataConfig($association['saml:entityID'], 'saml20-sp-remote');
 
-        \SimpleSAML\Stats::log('saml:idp:LogoutRequest:sent', [
+        Stats::log('saml:idp:LogoutRequest:sent', [
             'spEntityID'  => $association['saml:entityID'],
             'idpEntityID' => $idpMetadata->getString('entityid'),
         ]);
 
+        /** @var array $dst */
         $dst = $spMetadata->getEndpointPrioritizedByBinding(
             'SingleLogoutService',
             [
-                \SAML2\Constants::BINDING_HTTP_REDIRECT,
-                \SAML2\Constants::BINDING_HTTP_POST
+                Constants::BINDING_HTTP_REDIRECT,
+                Constants::BINDING_HTTP_POST
             ]
         );
-        $binding = \SAML2\Binding::getBinding($dst['Binding']);
+        $binding = Binding::getBinding($dst['Binding']);
         $lr = self::buildLogoutRequest($idpMetadata, $spMetadata, $association, $relayState);
         $lr->setDestination($dst['Location']);
 
@@ -505,8 +536,9 @@ public static function sendLogoutRequest(\SimpleSAML\IdP $idp, array $associatio
      *
      * @param \SimpleSAML\IdP $idp The IdP we are sending a logout request from.
      * @param array           &$state The logout state array.
+     * @return void
      */
-    public static function sendLogoutResponse(\SimpleSAML\IdP $idp, array $state)
+    public static function sendLogoutResponse(IdP $idp, array $state)
     {
         assert(isset($state['saml:SPEntityId']));
         assert(isset($state['saml:RequestId']));
@@ -514,7 +546,7 @@ public static function sendLogoutResponse(\SimpleSAML\IdP $idp, array $state)
 
         $spEntityId = $state['saml:SPEntityId'];
 
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $idpMetadata = $idp->getConfig();
         $spMetadata = $metadata->getMetaDataConfig($spEntityId, 'saml20-sp-remote');
 
@@ -525,28 +557,30 @@ public static function sendLogoutResponse(\SimpleSAML\IdP $idp, array $state)
         if (isset($state['core:Failed']) && $state['core:Failed']) {
             $partial = true;
             $lr->setStatus([
-                'Code'    => \SAML2\Constants::STATUS_SUCCESS,
-                'SubCode' => \SAML2\Constants::STATUS_PARTIAL_LOGOUT,
+                'Code'    => Constants::STATUS_SUCCESS,
+                'SubCode' => Constants::STATUS_PARTIAL_LOGOUT,
             ]);
-            Logger::info('Sending logout response for partial logout to SP '.var_export($spEntityId, true));
+            Logger::info('Sending logout response for partial logout to SP ' . var_export($spEntityId, true));
         } else {
             $partial = false;
-            Logger::debug('Sending logout response to SP '.var_export($spEntityId, true));
+            Logger::debug('Sending logout response to SP ' . var_export($spEntityId, true));
         }
 
-        \SimpleSAML\Stats::log('saml:idp:LogoutResponse:sent', [
+        Stats::log('saml:idp:LogoutResponse:sent', [
             'spEntityID'  => $spEntityId,
             'idpEntityID' => $idpMetadata->getString('entityid'),
             'partial'     => $partial
         ]);
+
+        /** @var array $dst */
         $dst = $spMetadata->getEndpointPrioritizedByBinding(
             'SingleLogoutService',
             [
-                \SAML2\Constants::BINDING_HTTP_REDIRECT,
-                \SAML2\Constants::BINDING_HTTP_POST
+                Constants::BINDING_HTTP_REDIRECT,
+                Constants::BINDING_HTTP_POST
             ]
         );
-        $binding = \SAML2\Binding::getBinding($dst['Binding']);
+        $binding = Binding::getBinding($dst['Binding']);
         if (isset($dst['ResponseLocation'])) {
             $dst = $dst['ResponseLocation'];
         } else {
@@ -562,31 +596,36 @@ public static function sendLogoutResponse(\SimpleSAML\IdP $idp, array $state)
      * Receive a logout message.
      *
      * @param \SimpleSAML\IdP $idp The IdP we are receiving it for.
+     * @return void
      * @throws \SimpleSAML\Error\BadRequest In case an error occurs while trying to receive the logout message.
      */
-    public static function receiveLogoutMessage(\SimpleSAML\IdP $idp)
+    public static function receiveLogoutMessage(IdP $idp)
     {
-        $binding = \SAML2\Binding::getCurrentBinding();
+        $binding = Binding::getCurrentBinding();
         $message = $binding->receive();
 
         $issuer = $message->getIssuer();
         if ($issuer === null) {
             /* Without an issuer we have no way to respond to the message. */
-            throw new \SimpleSAML\Error\BadRequest('Received message on logout endpoint without issuer.');
+            throw new Error\BadRequest('Received message on logout endpoint without issuer.');
         } elseif ($issuer instanceof Issuer) {
             $spEntityId = $issuer->getValue();
+            if ($spEntityId === null) {
+                /* Without an issuer we have no way to respond to the message. */
+                throw new Error\BadRequest('Received message on logout endpoint without issuer.');
+            }
         } else {
             $spEntityId = $issuer;
         }
 
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $idpMetadata = $idp->getConfig();
         $spMetadata = $metadata->getMetaDataConfig($spEntityId, 'saml20-sp-remote');
 
         \SimpleSAML\Module\saml\Message::validateMessage($spMetadata, $idpMetadata, $message);
 
-        if ($message instanceof \SAML2\LogoutResponse) {
-            Logger::info('Received SAML 2.0 LogoutResponse from: '.var_export($spEntityId, true));
+        if ($message instanceof LogoutResponse) {
+            Logger::info('Received SAML 2.0 LogoutResponse from: ' . var_export($spEntityId, true));
             $statsData = [
                 'spEntityID'  => $spEntityId,
                 'idpEntityID' => $idpMetadata->getString('entityid'),
@@ -594,29 +633,29 @@ public static function receiveLogoutMessage(\SimpleSAML\IdP $idp)
             if (!$message->isSuccess()) {
                 $statsData['error'] = $message->getStatus();
             }
-            \SimpleSAML\Stats::log('saml:idp:LogoutResponse:recv', $statsData);
+            Stats::log('saml:idp:LogoutResponse:recv', $statsData);
 
             $relayState = $message->getRelayState();
 
             if (!$message->isSuccess()) {
                 $logoutError = \SimpleSAML\Module\saml\Message::getResponseError($message);
-                Logger::warning('Unsuccessful logout. Status was: '.$logoutError);
+                Logger::warning('Unsuccessful logout. Status was: ' . $logoutError);
             } else {
                 $logoutError = null;
             }
 
-            $assocId = 'saml:'.$spEntityId;
+            $assocId = 'saml:' . $spEntityId;
 
             $idp->handleLogoutResponse($assocId, $relayState, $logoutError);
-        } elseif ($message instanceof \SAML2\LogoutRequest) {
-            Logger::info('Received SAML 2.0 LogoutRequest from: '.var_export($spEntityId, true));
-            \SimpleSAML\Stats::log('saml:idp:LogoutRequest:recv', [
+        } elseif ($message instanceof LogoutRequest) {
+            Logger::info('Received SAML 2.0 LogoutRequest from: ' . var_export($spEntityId, true));
+            Stats::log('saml:idp:LogoutRequest:recv', [
                 'spEntityID'  => $spEntityId,
                 'idpEntityID' => $idpMetadata->getString('entityid'),
             ]);
 
             $spStatsId = $spMetadata->getString('core:statistics-id', $spEntityId);
-            Logger::stats('saml20-idp-SLO spinit '.$spStatsId.' '.$idpMetadata->getString('entityid'));
+            Logger::stats('saml20-idp-SLO spinit ' . $spStatsId . ' ' . $idpMetadata->getString('entityid'));
 
             $state = [
                 'Responder'       => ['\SimpleSAML\Module\saml\IdP\SAML2', 'sendLogoutResponse'],
@@ -625,10 +664,10 @@ public static function receiveLogoutMessage(\SimpleSAML\IdP $idp)
                 'saml:RequestId'  => $message->getId(),
             ];
 
-            $assocId = 'saml:'.$spEntityId;
+            $assocId = 'saml:' . $spEntityId;
             $idp->handleLogoutRequest($state, $assocId);
         } else {
-            throw new \SimpleSAML\Error\BadRequest('Unknown message received on logout endpoint: '.get_class($message));
+            throw new Error\BadRequest('Unknown message received on logout endpoint: ' . get_class($message));
         }
     }
 
@@ -642,34 +681,36 @@ public static function receiveLogoutMessage(\SimpleSAML\IdP $idp)
      *
      * @return string The logout URL.
      */
-    public static function getLogoutURL(\SimpleSAML\IdP $idp, array $association, $relayState)
+    public static function getLogoutURL(IdP $idp, array $association, $relayState)
     {
         assert(is_string($relayState) || $relayState === null);
 
-        Logger::info('Sending SAML 2.0 LogoutRequest to: '.var_export($association['saml:entityID'], true));
+        Logger::info('Sending SAML 2.0 LogoutRequest to: ' . var_export($association['saml:entityID'], true));
 
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         $idpMetadata = $idp->getConfig();
         $spMetadata = $metadata->getMetaDataConfig($association['saml:entityID'], 'saml20-sp-remote');
 
         $bindings = [
-            \SAML2\Constants::BINDING_HTTP_REDIRECT,
-            \SAML2\Constants::BINDING_HTTP_POST
+            Constants::BINDING_HTTP_REDIRECT,
+            Constants::BINDING_HTTP_POST
         ];
+
+        /** @var array $dst */
         $dst = $spMetadata->getEndpointPrioritizedByBinding('SingleLogoutService', $bindings);
 
-        if ($dst['Binding'] === \SAML2\Constants::BINDING_HTTP_POST) {
+        if ($dst['Binding'] === Constants::BINDING_HTTP_POST) {
             $params = ['association' => $association['id'], 'idp' => $idp->getId()];
             if ($relayState !== null) {
                 $params['RelayState'] = $relayState;
             }
-            return \SimpleSAML\Module::getModuleURL('core/idp/logout-iframe-post.php', $params);
+            return Module::getModuleURL('core/idp/logout-iframe-post.php', $params);
         }
 
         $lr = self::buildLogoutRequest($idpMetadata, $spMetadata, $association, $relayState);
         $lr->setDestination($dst['Location']);
 
-        $binding = new \SAML2\HTTPRedirect();
+        $binding = new HTTPRedirect();
         return $binding->getRedirectURL($lr);
     }
 
@@ -682,9 +723,9 @@ public static function getLogoutURL(\SimpleSAML\IdP $idp, array $association, $r
      *
      * @return \SimpleSAML\Configuration  Configuration object for the SP metadata.
      */
-    public static function getAssociationConfig(\SimpleSAML\IdP $idp, array $association)
+    public static function getAssociationConfig(IdP $idp, array $association)
     {
-        $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $metadata = MetaDataStorageHandler::getMetadataHandler();
         try {
             return $metadata->getMetaDataConfig($association['saml:entityID'], 'saml20-sp-remote');
         } catch (\Exception $e) {
@@ -705,7 +746,7 @@ public static function getAssociationConfig(\SimpleSAML\IdP $idp, array $associa
      */
     public static function getHostedMetadata($entityid)
     {
-        $handler = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $handler = MetaDataStorageHandler::getMetadataHandler();
         $config = $handler->getMetaDataConfig($entityid, 'saml20-idp-hosted');
 
         // configure endpoints
@@ -754,7 +795,7 @@ public static function getHostedMetadata($entityid)
 
         // add certificates
         $keys = [];
-        $certInfo = Crypto::loadPublicKey($config, false, 'new_');
+        $certInfo = Utils\Crypto::loadPublicKey($config, false, 'new_');
         $hasNewCert = false;
         if ($certInfo !== null) {
             $keys[] = [
@@ -767,7 +808,8 @@ public static function getHostedMetadata($entityid)
             $hasNewCert = true;
         }
 
-        $certInfo = Crypto::loadPublicKey($config, true);
+        /** @var array $certInfo */
+        $certInfo = Utils\Crypto::loadPublicKey($config, true);
         $keys[] = [
             'type' => 'X509Certificate',
             'signing' => true,
@@ -777,7 +819,8 @@ public static function getHostedMetadata($entityid)
         ];
 
         if ($config->hasValue('https.certificate')) {
-            $httpsCert = Crypto::loadPublicKey($config, true, 'https.');
+            /** @var array $httpsCert */
+            $httpsCert = Utils\Crypto::loadPublicKey($config, true, 'https.');
             $keys[] = [
                 'type' => 'X509Certificate',
                 'signing' => true,
@@ -793,7 +836,7 @@ public static function getHostedMetadata($entityid)
             $metadata['ArtifactResolutionService'][] = [
                 'index' => 0,
                 'Binding' => Constants::BINDING_SOAP,
-                'Location' => HTTP::getBaseURL().'saml2/idp/ArtifactResolutionService.php'
+                'Location' => Utils\HTTP::getBaseURL() . 'saml2/idp/ArtifactResolutionService.php'
             ];
         }
 
@@ -804,7 +847,7 @@ public static function getHostedMetadata($entityid)
                 [
                     'hoksso:ProtocolBinding' => Constants::BINDING_HTTP_REDIRECT,
                     'Binding' => Constants::BINDING_HOK_SSO,
-                    'Location' => HTTP::getBaseURL().'saml2/idp/SSOService.php',
+                    'Location' => Utils\HTTP::getBaseURL() . 'saml2/idp/SSOService.php',
                 ]
             );
         }
@@ -814,7 +857,7 @@ public static function getHostedMetadata($entityid)
             $metadata['SingleSignOnService'][] = [
                 'index' => 0,
                 'Binding' => Constants::BINDING_SOAP,
-                'Location' => HTTP::getBaseURL().'saml2/idp/SSOService.php',
+                'Location' => Utils\HTTP::getBaseURL() . 'saml2/idp/SSOService.php',
             ];
         }
 
@@ -827,7 +870,7 @@ public static function getHostedMetadata($entityid)
             );
 
             if (!$config->hasValue('OrganizationURL')) {
-                throw new \SimpleSAML\Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
+                throw new Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
             }
             $metadata['OrganizationURL'] = $config->getLocalizedString('OrganizationURL');
         }
@@ -842,7 +885,7 @@ public static function getHostedMetadata($entityid)
             $metadata['EntityAttributes'] = $config->getArray('EntityAttributes');
 
             // check for entity categories
-            if (Metadata::isHiddenFromDiscovery($metadata)) {
+            if (Utils\Config\Metadata::isHiddenFromDiscovery($metadata)) {
                 $metadata['hide.from.discovery'] = true;
             }
         }
@@ -872,11 +915,11 @@ public static function getHostedMetadata($entityid)
         if ($config->hasValue('contacts')) {
             $contacts = $config->getArray('contacts');
             foreach ($contacts as $contact) {
-                $metadata['contacts'][] = Metadata::getContact($contact);
+                $metadata['contacts'][] = Utils\Config\Metadata::getContact($contact);
             }
         }
 
-        $globalConfig = \SimpleSAML\Configuration::getInstance();
+        $globalConfig = Configuration::getInstance();
         $email = $globalConfig->getString('technicalcontact_email', false);
         if ($email && $email !== 'na@example.org') {
             $contact = [
@@ -884,7 +927,7 @@ public static function getHostedMetadata($entityid)
                 'name' => $globalConfig->getString('technicalcontact_name', null),
                 'contactType' => 'technical',
             ];
-            $metadata['contacts'][] = Metadata::getContact($contact);
+            $metadata['contacts'][] = Utils\Config\Metadata::getContact($contact);
         }
 
         return $metadata;
@@ -918,12 +961,12 @@ private static function generateNameIdValue(
                 $idpEntityId = $idpMetadata->getString('entityid');
                 $spEntityId = $spMetadata->getString('entityid');
 
-                $secretSalt = \SimpleSAML\Utils\Config::getSecretSalt();
+                $secretSalt = Utils\Config::getSecretSalt();
 
-                $uidData = 'uidhashbase'.$secretSalt;
-                $uidData .= strlen($idpEntityId).':'.$idpEntityId;
-                $uidData .= strlen($spEntityId).':'.$spEntityId;
-                $uidData .= strlen($attributeValue).':'.$attributeValue;
+                $uidData = 'uidhashbase' . $secretSalt;
+                $uidData .= strlen($idpEntityId) . ':' . $idpEntityId;
+                $uidData .= strlen($spEntityId) . ':' . $spEntityId;
+                $uidData .= strlen($attributeValue) . ':' . $attributeValue;
                 $uidData .= $secretSalt;
 
                 return hash('sha1', $uidData);
@@ -932,7 +975,7 @@ private static function generateNameIdValue(
 
         $attributes = $state['Attributes'];
         if (!array_key_exists($attribute, $attributes)) {
-            Logger::error('Unable to add NameID: Missing '.var_export($attribute, true).
+            Logger::error('Unable to add NameID: Missing ' . var_export($attribute, true) .
                 ' in the attributes of the user.');
             return null;
         }
@@ -994,8 +1037,8 @@ private static function encodeAttributes(
                 }
 
                 $attrval = $value;
-                if ($value instanceof \DOMNodeList) {
-                    $attrval = new \SAML2\XML\saml\AttributeValue($value->item(0)->parentNode);
+                if ($value instanceof DOMNodeList) {
+                    $attrval = new AttributeValue($value->item(0)->parentNode);
                 }
 
                 switch ($encoding) {
@@ -1007,14 +1050,14 @@ private static function encodeAttributes(
                         break;
                     case 'raw':
                         if (is_string($value)) {
-                            $doc = \SAML2\DOMDocumentFactory::fromString('<root>'.$value.'</root>');
+                            $doc = DOMDocumentFactory::fromString('<root>' . $value . '</root>');
                             $value = $doc->firstChild->childNodes;
                         }
-                        assert($value instanceof \DOMNodeList || $value instanceof \SAML2\XML\saml\NameID);
+                        assert($value instanceof DOMNodeList || $value instanceof NameID);
                         break;
                     default:
-                        throw new \SimpleSAML\Error\Exception('Invalid encoding for attribute '.
-                            var_export($name, true).': '.var_export($encoding, true));
+                        throw new Error\Exception('Invalid encoding for attribute ' .
+                            var_export($name, true) . ': ' . var_export($encoding, true));
                 }
                 $ret[$name][] = $value;
             }
@@ -1057,7 +1100,7 @@ private static function getAttributeNameFormat(
         }
 
         // default
-        return 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic';
+        return Constants::NAMEFORMAT_BASIC;
     }
 
 
@@ -1089,7 +1132,7 @@ private static function buildAssertion(
 
         $config = Configuration::getInstance();
 
-        $a = new \SAML2\Assertion();
+        $a = new Assertion();
         if ($signAssertion) {
             \SimpleSAML\Module\saml\Message::addSign($idpMetadata, $spMetadata, $a);
         }
@@ -1110,10 +1153,10 @@ private static function buildAssertion(
 
         if (isset($state['saml:AuthnContextClassRef'])) {
             $a->setAuthnContextClassRef($state['saml:AuthnContextClassRef']);
-        } elseif (\SimpleSAML\Utils\HTTP::isHTTPS()) {
-            $a->setAuthnContextClassRef(\SAML2\Constants::AC_PASSWORD_PROTECTED_TRANSPORT);
+        } elseif (Utils\HTTP::isHTTPS()) {
+            $a->setAuthnContextClassRef(Constants::AC_PASSWORD_PROTECTED_TRANSPORT);
         } else {
-            $a->setAuthnContextClassRef(\SAML2\Constants::AC_PASSWORD);
+            $a->setAuthnContextClassRef(Constants::AC_PASSWORD);
         }
 
         $sessionStart = $now;
@@ -1125,10 +1168,10 @@ private static function buildAssertion(
         $sessionLifetime = $config->getInteger('session.duration', 8 * 60 * 60);
         $a->setSessionNotOnOrAfter($sessionStart + $sessionLifetime);
 
-        $a->setSessionIndex(\SimpleSAML\Utils\Random::generateID());
+        $a->setSessionIndex(Utils\Random::generateID());
 
-        $sc = new \SAML2\XML\saml\SubjectConfirmation();
-        $scd = new \SAML2\XML\saml\SubjectConfirmationData();
+        $sc = new SubjectConfirmation();
+        $scd = new SubjectConfirmationData();
         $scd->setNotOnOrAfter($now + $assertionLifetime);
         $scd->setRecipient($state['saml:ConsumerURL']);
         $scd->setInResponseTo($state['saml:RequestId']);
@@ -1136,7 +1179,7 @@ private static function buildAssertion(
 
         // ProtcolBinding of SP's <AuthnRequest> overwrites IdP hosted metadata configuration
         $hokAssertion = null;
-        if ($state['saml:Binding'] === \SAML2\Constants::BINDING_HOK_SSO) {
+        if ($state['saml:Binding'] === Constants::BINDING_HOK_SSO) {
             $hokAssertion = true;
         }
         if ($hokAssertion === null) {
@@ -1145,43 +1188,43 @@ private static function buildAssertion(
 
         if ($hokAssertion) {
             // Holder-of-Key
-            $sc->setMethod(\SAML2\Constants::CM_HOK);
-            if (\SimpleSAML\Utils\HTTP::isHTTPS()) {
+            $sc->setMethod(Constants::CM_HOK);
+            if (Utils\HTTP::isHTTPS()) {
                 if (isset($_SERVER['SSL_CLIENT_CERT']) && !empty($_SERVER['SSL_CLIENT_CERT'])) {
                     // extract certificate data (if this is a certificate)
                     $clientCert = $_SERVER['SSL_CLIENT_CERT'];
                     $pattern = '/^-----BEGIN CERTIFICATE-----([^-]*)^-----END CERTIFICATE-----/m';
                     if (preg_match($pattern, $clientCert, $matches)) {
                         // we have a client certificate from the browser which we add to the HoK assertion
-                        $x509Certificate = new \SAML2\XML\ds\X509Certificate();
+                        $x509Certificate = new X509Certificate();
                         $x509Certificate->setCertificate(str_replace(["\r", "\n", " "], '', $matches[1]));
 
-                        $x509Data = new \SAML2\XML\ds\X509Data();
+                        $x509Data = new X509Data();
                         $x509Data->addData($x509Certificate);
 
-                        $keyInfo = new \SAML2\XML\ds\KeyInfo();
+                        $keyInfo = new KeyInfo();
                         $keyInfo->addInfo($x509Data);
 
                         $scd->addInfo($keyInfo);
                     } else {
-                        throw new \SimpleSAML\Error\Exception(
-                            'Error creating HoK assertion: No valid client certificate provided during TLS handshake '.
-                            'with IdP'
+                        throw new Error\Exception(
+                            'Error creating HoK assertion: No valid client certificate provided during '
+                            . 'TLS handshake with IdP'
                         );
                     }
                 } else {
-                    throw new \SimpleSAML\Error\Exception(
+                    throw new Error\Exception(
                         'Error creating HoK assertion: No client certificate provided during TLS handshake with IdP'
                     );
                 }
             } else {
-                throw new \SimpleSAML\Error\Exception(
+                throw new Error\Exception(
                     'Error creating HoK assertion: No HTTPS connection to IdP, but required for Holder-of-Key SSO'
                 );
             }
         } else {
             // Bearer
-            $sc->setMethod(\SAML2\Constants::CM_BEARER);
+            $sc->setMethod(Constants::CM_BEARER);
         }
         $sc->setSubjectConfirmationData($scd);
         $a->setSubjectConfirmation([$sc]);
@@ -1205,7 +1248,7 @@ private static function buildAssertion(
             // either not set in request, or not set to a format we supply. Fall back to old generation method
             $nameIdFormat = current($spMetadata->getArrayizeString('NameIDFormat', []));
             if ($nameIdFormat === false) {
-                $nameIdFormat = current($idpMetadata->getArrayizeString('NameIDFormat', [\SAML2\Constants::NAMEID_TRANSIENT]));
+                $nameIdFormat = current($idpMetadata->getArrayizeString('NameIDFormat', [Constants::NAMEID_TRANSIENT]));
             }
         }
 
@@ -1218,21 +1261,21 @@ private static function buildAssertion(
                 $spNameQualifier = $spMetadata->getString('entityid');
             }
 
-            if ($nameIdFormat === \SAML2\Constants::NAMEID_TRANSIENT) {
+            if ($nameIdFormat === Constants::NAMEID_TRANSIENT) {
                 // generate a random id
-                $nameIdValue = \SimpleSAML\Utils\Random::generateID();
+                $nameIdValue = Utils\Random::generateID();
             } else {
                 /* this code will end up generating either a fixed assigned id (via nameid.attribute)
                    or random id if not assigned/configured */
                 $nameIdValue = self::generateNameIdValue($idpMetadata, $spMetadata, $state);
                 if ($nameIdValue === null) {
                     Logger::warning('Falling back to transient NameID.');
-                    $nameIdFormat = \SAML2\Constants::NAMEID_TRANSIENT;
-                    $nameIdValue = \SimpleSAML\Utils\Random::generateID();
+                    $nameIdFormat = Constants::NAMEID_TRANSIENT;
+                    $nameIdValue = Utils\Random::generateID();
                 }
             }
 
-            $nameId = new \SAML2\XML\saml\NameID();
+            $nameId = new NameID();
             $nameId->setFormat($nameIdFormat);
             $nameId->setValue($nameIdValue);
             $nameId->setSPNameQualifier($spNameQualifier);
@@ -1271,7 +1314,7 @@ private static function buildAssertion(
     private static function encryptAssertion(
         Configuration $idpMetadata,
         Configuration $spMetadata,
-        \SAML2\Assertion $assertion
+        Assertion $assertion
     ) {
         $encryptAssertion = $spMetadata->getBoolean('assertion.encryption', null);
         if ($encryptAssertion === null) {
@@ -1293,27 +1336,27 @@ private static function encryptAssertion(
                 $key = $keys[0];
                 switch ($key['type']) {
                     case 'X509Certificate':
-                        $pemKey = "-----BEGIN CERTIFICATE-----\n".
-                            chunk_split($key['X509Certificate'], 64).
+                        $pemKey = "-----BEGIN CERTIFICATE-----\n" .
+                            chunk_split($key['X509Certificate'], 64) .
                             "-----END CERTIFICATE-----\n";
                         break;
                     default:
-                        throw new \SimpleSAML\Error\Exception('Unsupported encryption key type: '.$key['type']);
+                        throw new Error\Exception('Unsupported encryption key type: ' . $key['type']);
                 }
 
                 // extract the public key from the certificate for encryption
                 $key = new XMLSecurityKey(XMLSecurityKey::RSA_OAEP_MGF1P, ['type' => 'public']);
                 $key->loadKey($pemKey);
             } else {
-                throw new \SimpleSAML\Error\ConfigurationError(
-                    'Missing encryption key for entity `'.$spMetadata->getString('entityid').'`',
-                    $spMetadata->getString('metadata-set').'.php',
+                throw new Error\ConfigurationError(
+                    'Missing encryption key for entity `' . $spMetadata->getString('entityid') . '`',
+                    $spMetadata->getString('metadata-set') . '.php',
                     null
                 );
             }
         }
 
-        $ea = new \SAML2\EncryptedAssertion();
+        $ea = new EncryptedAssertion();
         $ea->setAssertion($assertion, $key);
         return $ea;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SQLNameID.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SQLNameID.php
index 95d5712df2..d4f91d9d3f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SQLNameID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/IdP/SQLNameID.php
@@ -2,60 +2,164 @@
 
 namespace SimpleSAML\Module\saml\IdP;
 
+use PDO;
+use SimpleSAML\Error;
+use SimpleSAML\Store;
+use SimpleSAML\Database;
+use SimpleSAML\Configuration;
+
 /**
  * Helper class for working with persistent NameIDs stored in SQL datastore.
  *
  * @package SimpleSAMLphp
  */
-
 class SQLNameID
 {
+    const TABLE_VERSION = 1;
+    const DEFAULT_TABLE_PREFIX = '';
+    const TABLE_SUFFIX = '_saml_PersistentNameID';
+
+
     /**
-     * Create NameID table in SQL, if it is missing.
-     *
-     * @param \SimpleSAML\Store\SQL $store  The datastore.
+     * @param string $query
+     * @param array $params Parameters
+     * @param array $config
+     * @return \PDOStatement object
+     */
+    private static function read($query, array $params = [], array $config = [])
+    {
+        if (!empty($config)) {
+            $database = Database::getInstance(Configuration::loadFromArray($config));
+            $stmt = $database->read($query, $params);
+        } else {
+            $store = self::getStore();
+            $stmt = $store->pdo->prepare($query);
+            $stmt->execute($params);
+        }
+        return $stmt;
+    }
+
+
+    /**
+     * @param string $query
+     * @param array $params Parameters
+     * @param array $config
+     * @return int|false The number of rows affected by the query or false on error.
+     */
+    private static function write($query, array $params = [], array $config = [])
+    {
+        if (!empty($config)) {
+            $database = Database::getInstance(Configuration::loadFromArray($config));
+            $res = $database->write($query, $params);
+        } else {
+            $store = self::getStore();
+            $query = $store->pdo->prepare($query);
+            $res = $query->execute($params);
+            if ($res) {
+                $res = $query->rowCount();
+            }
+        }
+        return $res;
+    }
+
+
+    /**
+     * @param array $config
+     * @return string
+     */
+    private static function tableName(array $config = [])
+    {
+        $store = empty($config) ? self::getStore() : null;
+        $prefix = $store === null ? self::DEFAULT_TABLE_PREFIX : $store->prefix;
+        $table = $prefix . self::TABLE_SUFFIX;
+        return $table;
+    }
+
+    /**
+     * @param array $config
+     * @return void
      */
-    private static function createTable(\SimpleSAML\Store\SQL $store)
+    private static function create(array $config = [])
     {
-        if ($store->getTableVersion('saml_PersistentNameID') === 1) {
-            return;
+        $store = empty($config) ? self::getStore() : null;
+        $table = self::tableName($config);
+        if ($store === null) {
+            try {
+                self::createTable($table, $config);
+            } catch (\Exception $e) {
+                \SimpleSAML\Logger::debug('SQL persistent NameID table already exists.');
+            }
+        } elseif ($store->getTableVersion('saml_PersistentNameID') !== self::TABLE_VERSION) {
+            self::createTable($table);
+            $store->setTableVersion('saml_PersistentNameID', self::TABLE_VERSION);
         }
+    }
+
+
+    /**
+     * @param string $query
+     * @param array $params
+     * @param array $config
+     * @return \PDOStatement
+     */
+    private static function createAndRead($query, array $params = [], array $config = [])
+    {
+        self::create($config);
+        return self::read($query, $params, $config);
+    }
+
+
+    /**
+     * @param string $query
+     * @param array $params
+     * @param array $config
+     * @return int|false The number of rows affected by the query or false on error.
+     */
+    private static function createAndWrite($query, array $params = [], array $config = [])
+    {
+        self::create($config);
+        return self::write($query, $params, $config);
+    }
 
-        $query = 'CREATE TABLE '.$store->prefix.'_saml_PersistentNameID (
+
+    /**
+     * Create NameID table in SQL.
+     *
+     * @param string $table  The table name.
+     * @param array $config
+     * @return void
+     */
+    private static function createTable($table, array $config = [])
+    {
+        $query = 'CREATE TABLE ' . $table . ' (
             _idp VARCHAR(256) NOT NULL,
             _sp VARCHAR(256) NOT NULL,
             _user VARCHAR(256) NOT NULL,
             _value VARCHAR(40) NOT NULL,
             UNIQUE (_idp, _sp, _user)
         )';
-        $store->pdo->exec($query);
-
-        $query = 'CREATE INDEX '.$store->prefix.'_saml_PersistentNameID_idp_sp ON ';
-        $query .= $store->prefix.'_saml_PersistentNameID (_idp, _sp)';
-        $store->pdo->exec($query);
+        self::write($query, [], $config);
 
-        $store->setTableVersion('saml_PersistentNameID', 1);
+        $query = 'CREATE INDEX ' . $table . '_idp_sp ON ';
+        $query .= $table . ' (_idp, _sp)';
+        self::write($query, [], $config);
     }
 
 
     /**
      * Retrieve the SQL datastore.
      *
-     * Will also ensure that the NameID table is present.
-     *
      * @return \SimpleSAML\Store\SQL  SQL datastore.
      */
     private static function getStore()
     {
-        $store = \SimpleSAML\Store::getInstance();
-        if (!($store instanceof \SimpleSAML\Store\SQL)) {
-            throw new \SimpleSAML\Error\Exception(
+        $store = Store::getInstance();
+        if (!($store instanceof Store\SQL)) {
+            throw new Error\Exception(
                 'SQL NameID store requires SimpleSAMLphp to be configured with a SQL datastore.'
             );
         }
 
-        self::createTable($store);
-
         return $store;
     }
 
@@ -63,21 +167,20 @@ private static function getStore()
     /**
      * Add a NameID into the database.
      *
-     * @param \SimpleSAML\Store\SQL $store  The data store.
      * @param string $idpEntityId  The IdP entityID.
      * @param string $spEntityId  The SP entityID.
      * @param string $user  The user's unique identificator (e.g. username).
      * @param string $value  The NameID value.
+     * @param array $config
+     * @return void
      */
-    public static function add($idpEntityId, $spEntityId, $user, $value)
+    public static function add($idpEntityId, $spEntityId, $user, $value, array $config = [])
     {
         assert(is_string($idpEntityId));
         assert(is_string($spEntityId));
         assert(is_string($user));
         assert(is_string($value));
 
-        $store = self::getStore();
-
         $params = [
             '_idp' => $idpEntityId,
             '_sp' => $spEntityId,
@@ -85,10 +188,9 @@ public static function add($idpEntityId, $spEntityId, $user, $value)
             '_value' => $value,
         ];
 
-        $query = 'INSERT INTO '.$store->prefix;
-        $query .= '_saml_PersistentNameID (_idp, _sp, _user, _value) VALUES(:_idp, :_sp, :_user, :_value)';
-        $query = $store->pdo->prepare($query);
-        $query->execute($params);
+        $query = 'INSERT INTO ' . self::tableName($config);
+        $query .= ' (_idp, _sp, _user, _value) VALUES(:_idp, :_sp, :_user, :_value)';
+        self::createAndWrite($query, $params, $config);
     }
 
 
@@ -98,28 +200,26 @@ public static function add($idpEntityId, $spEntityId, $user, $value)
      * @param string $idpEntityId  The IdP entityID.
      * @param string $spEntityId  The SP entityID.
      * @param string $user  The user's unique identificator (e.g. username).
-     * @return string|NULL $value  The NameID value, or NULL of no NameID value was found.
+     * @param array $config
+     * @return string|null $value  The NameID value, or NULL of no NameID value was found.
      */
-    public static function get($idpEntityId, $spEntityId, $user)
+    public static function get($idpEntityId, $spEntityId, $user, array $config = [])
     {
         assert(is_string($idpEntityId));
         assert(is_string($spEntityId));
         assert(is_string($user));
 
-        $store = self::getStore();
-
         $params = [
             '_idp' => $idpEntityId,
             '_sp' => $spEntityId,
             '_user' => $user,
         ];
 
-        $query = 'SELECT _value FROM '.$store->prefix;
-        $query .= '_saml_PersistentNameID WHERE _idp = :_idp AND _sp = :_sp AND _user = :_user';
-        $query = $store->pdo->prepare($query);
-        $query->execute($params);
+        $query = 'SELECT _value FROM ' . self::tableName($config);
+        $query .= ' WHERE _idp = :_idp AND _sp = :_sp AND _user = :_user';
+        $query = self::createAndRead($query, $params, $config);
 
-        $row = $query->fetch(\PDO::FETCH_ASSOC);
+        $row = $query->fetch(PDO::FETCH_ASSOC);
         if ($row === false) {
             // No NameID found
             return null;
@@ -135,25 +235,24 @@ public static function get($idpEntityId, $spEntityId, $user)
      * @param string $idpEntityId  The IdP entityID.
      * @param string $spEntityId  The SP entityID.
      * @param string $user  The user's unique identificator (e.g. username).
+     * @param array $config
+     * @return void
      */
-    public static function delete($idpEntityId, $spEntityId, $user)
+    public static function delete($idpEntityId, $spEntityId, $user, array $config = [])
     {
         assert(is_string($idpEntityId));
         assert(is_string($spEntityId));
         assert(is_string($user));
 
-        $store = self::getStore();
-
         $params = [
             '_idp' => $idpEntityId,
             '_sp' => $spEntityId,
             '_user' => $user,
         ];
 
-        $query = 'DELETE FROM '.$store->prefix;
-        $query .= '_saml_PersistentNameID WHERE _idp = :_idp AND _sp = :_sp AND _user = :_user';
-        $query = $store->pdo->prepare($query);
-        $query->execute($params);
+        $query = 'DELETE FROM ' . self::tableName($config);
+        $query .= ' WHERE _idp = :_idp AND _sp = :_sp AND _user = :_user';
+        self::createAndWrite($query, $params, $config);
     }
 
 
@@ -162,27 +261,25 @@ public static function delete($idpEntityId, $spEntityId, $user)
      *
      * @param string $idpEntityId  The IdP entityID.
      * @param string $spEntityId  The SP entityID.
+     * @param array $config
      * @return array  Array of userid => NameID.
      */
-    public static function getIdentities($idpEntityId, $spEntityId)
+    public static function getIdentities($idpEntityId, $spEntityId, array $config = [])
     {
         assert(is_string($idpEntityId));
         assert(is_string($spEntityId));
 
-        $store = self::getStore();
-
         $params = [
             '_idp' => $idpEntityId,
             '_sp' => $spEntityId,
         ];
 
-        $query = 'SELECT _user, _value FROM '.$store->prefix;
-        $query .= '_saml_PersistentNameID WHERE _idp = :_idp AND _sp = :_sp';
-        $query = $store->pdo->prepare($query);
-        $query->execute($params);
+        $query = 'SELECT _user, _value FROM ' . self::tableName($config);
+        $query .= ' WHERE _idp = :_idp AND _sp = :_sp';
+        $query = self::createAndRead($query, $params, $config);
 
         $res = [];
-        while (($row = $query->fetch(\PDO::FETCH_ASSOC)) !== false) {
+        while (($row = $query->fetch(PDO::FETCH_ASSOC)) !== false) {
             $res[$row['_user']] = $row['_value'];
         }
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Message.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Message.php
index a0f7193104..ca15e50130 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Message.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Message.php
@@ -3,8 +3,23 @@
 namespace SimpleSAML\Module\saml;
 
 use RobRichards\XMLSecLibs\XMLSecurityKey;
+use SAML2\Assertion;
+use SAML2\AuthnRequest;
 use SAML2\Constants;
+use SAML2\EncryptedAssertion;
+use SAML2\LogoutRequest;
+use SAML2\LogoutResponse;
+use SAML2\Response;
+use SAML2\SignedElement;
+use SAML2\StatusResponse;
+use SAML2\XML\ds\KeyInfo;
+use SAML2\XML\ds\X509Certificate;
+use SAML2\XML\ds\X509Data;
 use SAML2\XML\saml\Issuer;
+use SimpleSAML\Configuration;
+use SimpleSAML\Error as SSP_Error;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils;
 
 /**
  * Common code for building SAML 2 messages based on the available metadata.
@@ -19,20 +34,23 @@ class Message
      * @param \SimpleSAML\Configuration $srcMetadata The metadata of the sender.
      * @param \SimpleSAML\Configuration $dstMetadata The metadata of the recipient.
      * @param \SAML2\SignedElement $element The element we should add the data to.
+     * @return void
      */
     public static function addSign(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata,
-        \SAML2\SignedElement $element
+        Configuration $srcMetadata,
+        Configuration $dstMetadata,
+        SignedElement $element
     ) {
         $dstPrivateKey = $dstMetadata->getString('signature.privatekey', null);
 
         if ($dstPrivateKey !== null) {
-            $keyArray = \SimpleSAML\Utils\Crypto::loadPrivateKey($dstMetadata, true, 'signature.');
-            $certArray = \SimpleSAML\Utils\Crypto::loadPublicKey($dstMetadata, false, 'signature.');
+            /** @var array $keyArray */
+            $keyArray = Utils\Crypto::loadPrivateKey($dstMetadata, true, 'signature.');
+            $certArray = Utils\Crypto::loadPublicKey($dstMetadata, false, 'signature.');
         } else {
-            $keyArray = \SimpleSAML\Utils\Crypto::loadPrivateKey($srcMetadata, true);
-            $certArray = \SimpleSAML\Utils\Crypto::loadPublicKey($srcMetadata, false);
+            /** @var array $keyArray */
+            $keyArray = Utils\Crypto::loadPrivateKey($srcMetadata, true);
+            $certArray = Utils\Crypto::loadPublicKey($srcMetadata, false);
         }
 
         $algo = $dstMetadata->getString('signature.algorithm', null);
@@ -68,20 +86,21 @@ public static function addSign(
      * @param \SimpleSAML\Configuration $srcMetadata The metadata of the sender.
      * @param \SimpleSAML\Configuration $dstMetadata The metadata of the recipient.
      * @param \SAML2\Message $message The message we should add the data to.
+     * @return void
      */
     private static function addRedirectSign(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata,
+        Configuration $srcMetadata,
+        Configuration $dstMetadata,
         \SAML2\Message $message
     ) {
 
         $signingEnabled = null;
-        if ($message instanceof \SAML2\LogoutRequest || $message instanceof \SAML2\LogoutResponse) {
+        if ($message instanceof LogoutRequest || $message instanceof LogoutResponse) {
             $signingEnabled = $srcMetadata->getBoolean('sign.logout', null);
             if ($signingEnabled === null) {
                 $signingEnabled = $dstMetadata->getBoolean('sign.logout', null);
             }
-        } elseif ($message instanceof \SAML2\AuthnRequest) {
+        } elseif ($message instanceof AuthnRequest) {
             $signingEnabled = $srcMetadata->getBoolean('sign.authnrequest', null);
             if ($signingEnabled === null) {
                 $signingEnabled = $dstMetadata->getBoolean('sign.authnrequest', null);
@@ -126,16 +145,16 @@ private static function findCertificate(array $certFingerprints, array $certific
             }
 
             /* We have found a matching fingerprint. */
-            $pem = "-----BEGIN CERTIFICATE-----\n".
-                chunk_split($cert, 64).
+            $pem = "-----BEGIN CERTIFICATE-----\n" .
+                chunk_split($cert, 64) .
                 "-----END CERTIFICATE-----\n";
             return $pem;
         }
 
-        $candidates = "'".implode("', '", $candidates)."'";
-        $fps = "'".implode("', '", $certFingerprints)."'";
-        throw new \SimpleSAML\Error\Exception('Unable to find a certificate matching the configured '.
-            'fingerprint. Candidates: '.$candidates.'; certFingerprint: '.$fps.'.');
+        $candidates = "'" . implode("', '", $candidates) . "'";
+        $fps = "'" . implode("', '", $certFingerprints) . "'";
+        throw new SSP_Error\Exception('Unable to find a certificate matching the configured ' .
+            'fingerprint. Candidates: ' . $candidates . '; certFingerprint: ' . $fps . '.');
     }
 
 
@@ -144,12 +163,12 @@ private static function findCertificate(array $certFingerprints, array $certific
      *
      * @param \SimpleSAML\Configuration $srcMetadata The metadata of the sender.
      * @param \SAML2\SignedElement $element Either a \SAML2\Response or a \SAML2\Assertion.
-     * @return boolean True if the signature is correct, false otherwise.
+     * @return bool True if the signature is correct, false otherwise.
      *
      * @throws \SimpleSAML\Error\Exception if there is not certificate in the metadata for the entity.
      * @throws \Exception if the signature validation fails with an exception.
      */
-    public static function checkSign(\SimpleSAML\Configuration $srcMetadata, \SAML2\SignedElement $element)
+    public static function checkSign(Configuration $srcMetadata, SignedElement $element)
     {
         // find the public key that should verify signatures by this entity
         $keys = $srcMetadata->getPublicKeys('signing');
@@ -158,17 +177,17 @@ public static function checkSign(\SimpleSAML\Configuration $srcMetadata, \SAML2\
             foreach ($keys as $key) {
                 switch ($key['type']) {
                     case 'X509Certificate':
-                        $pemKeys[] = "-----BEGIN CERTIFICATE-----\n".
-                            chunk_split($key['X509Certificate'], 64).
+                        $pemKeys[] = "-----BEGIN CERTIFICATE-----\n" .
+                            chunk_split($key['X509Certificate'], 64) .
                             "-----END CERTIFICATE-----\n";
                         break;
                     default:
-                        \SimpleSAML\Logger::debug('Skipping unknown key type: '.$key['type']);
+                        Logger::debug('Skipping unknown key type: ' . $key['type']);
                 }
             }
         } elseif ($srcMetadata->hasValue('certFingerprint')) {
-            \SimpleSAML\Logger::notice(
-                "Validating certificates by fingerprint is deprecated. Please use ".
+            Logger::notice(
+                "Validating certificates by fingerprint is deprecated. Please use " .
                 "certData or certificate options in your remote metadata configuration."
             );
 
@@ -182,22 +201,22 @@ public static function checkSign(\SimpleSAML\Configuration $srcMetadata, \SAML2\
             // we don't have the full certificate stored. Try to find it in the message or the assertion instead
             if (count($certificates) === 0) {
                 /* We need the full certificate in order to match it against the fingerprint. */
-                \SimpleSAML\Logger::debug('No certificate in message when validating against fingerprint.');
+                Logger::debug('No certificate in message when validating against fingerprint.');
                 return false;
             } else {
-                \SimpleSAML\Logger::debug('Found '.count($certificates).' certificates in '.get_class($element));
+                Logger::debug('Found ' . count($certificates) . ' certificates in ' . get_class($element));
             }
 
             $pemCert = self::findCertificate($certFingerprint, $certificates);
             $pemKeys = [$pemCert];
         } else {
-            throw new \SimpleSAML\Error\Exception(
-                'Missing certificate in metadata for '.
+            throw new SSP_Error\Exception(
+                'Missing certificate in metadata for ' .
                 var_export($srcMetadata->getString('entityid'), true)
             );
         }
 
-        \SimpleSAML\Logger::debug('Has '.count($pemKeys).' candidate keys for validation.');
+        Logger::debug('Has ' . count($pemKeys) . ' candidate keys for validation.');
 
         $lastException = null;
         foreach ($pemKeys as $i => $pem) {
@@ -208,12 +227,12 @@ public static function checkSign(\SimpleSAML\Configuration $srcMetadata, \SAML2\
                 // make sure that we have a valid signature on either the response or the assertion
                 $res = $element->validate($key);
                 if ($res) {
-                    \SimpleSAML\Logger::debug('Validation with key #'.$i.' succeeded.');
+                    Logger::debug('Validation with key #' . $i . ' succeeded.');
                     return true;
                 }
-                \SimpleSAML\Logger::debug('Validation with key #'.$i.' failed without exception.');
+                Logger::debug('Validation with key #' . $i . ' failed without exception.');
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::debug('Validation with key #'.$i.' failed with exception: '.$e->getMessage());
+                Logger::debug('Validation with key #' . $i . ' failed with exception: ' . $e->getMessage());
                 $lastException = $e;
             }
         }
@@ -233,21 +252,22 @@ public static function checkSign(\SimpleSAML\Configuration $srcMetadata, \SAML2\
      * @param \SimpleSAML\Configuration $srcMetadata The metadata of the sender.
      * @param \SimpleSAML\Configuration $dstMetadata The metadata of the recipient.
      * @param \SAML2\Message $message The message we should check the signature on.
+     * @return void
      *
      * @throws \SimpleSAML\Error\Exception if message validation is enabled, but there is no signature in the message.
      */
     public static function validateMessage(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata,
+        Configuration $srcMetadata,
+        Configuration $dstMetadata,
         \SAML2\Message $message
     ) {
         $enabled = null;
-        if ($message instanceof \SAML2\LogoutRequest || $message instanceof \SAML2\LogoutResponse) {
+        if ($message instanceof LogoutRequest || $message instanceof LogoutResponse) {
             $enabled = $srcMetadata->getBoolean('validate.logout', null);
             if ($enabled === null) {
                 $enabled = $dstMetadata->getBoolean('validate.logout', null);
             }
-        } elseif ($message instanceof \SAML2\AuthnRequest) {
+        } elseif ($message instanceof AuthnRequest) {
             $enabled = $srcMetadata->getBoolean('validate.authnrequest', null);
             if ($enabled === null) {
                 $enabled = $dstMetadata->getBoolean('validate.authnrequest', null);
@@ -266,7 +286,7 @@ public static function validateMessage(
         }
 
         if (!self::checkSign($srcMetadata, $message)) {
-            throw new \SimpleSAML\Error\Exception(
+            throw new SSP_Error\Exception(
                 'Validation of received messages enabled, but no signature found on message.'
             );
         }
@@ -282,8 +302,8 @@ public static function validateMessage(
      * @return array Array of decryption keys.
      */
     public static function getDecryptionKeys(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata
+        Configuration $srcMetadata,
+        Configuration $dstMetadata
     ) {
         $sharedKey = $srcMetadata->getString('sharedkey', null);
         if ($sharedKey !== null) {
@@ -295,7 +315,7 @@ public static function getDecryptionKeys(
         $keys = [];
 
         // load the new private key if it exists
-        $keyArray = \SimpleSAML\Utils\Crypto::loadPrivateKey($dstMetadata, false, 'new_');
+        $keyArray = Utils\Crypto::loadPrivateKey($dstMetadata, false, 'new_');
         if ($keyArray !== null) {
             assert(isset($keyArray['PEM']));
 
@@ -308,7 +328,7 @@ public static function getDecryptionKeys(
         }
 
         // find the existing private key
-        $keyArray = \SimpleSAML\Utils\Crypto::loadPrivateKey($dstMetadata, true);
+        $keyArray = Utils\Crypto::loadPrivateKey($dstMetadata, true);
         assert(isset($keyArray['PEM']));
 
         $key = new XMLSecurityKey(XMLSecurityKey::RSA_1_5, ['type' => 'private']);
@@ -333,8 +353,8 @@ public static function getDecryptionKeys(
      * @return array  Array of blacklisted algorithms.
      */
     public static function getBlacklistedAlgorithms(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata
+        Configuration $srcMetadata,
+        Configuration $dstMetadata
     ) {
         $blacklist = $srcMetadata->getArray('encryption.blacklisted-algorithms', null);
         if ($blacklist === null) {
@@ -358,13 +378,13 @@ public static function getBlacklistedAlgorithms(
      * @throws \Exception if decryption fails for whatever reason.
      */
     private static function decryptAssertion(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata,
+        Configuration $srcMetadata,
+        Configuration $dstMetadata,
         $assertion
     ) {
-        assert($assertion instanceof \SAML2\Assertion || $assertion instanceof \SAML2\EncryptedAssertion);
+        assert($assertion instanceof Assertion || $assertion instanceof EncryptedAssertion);
 
-        if ($assertion instanceof \SAML2\Assertion) {
+        if ($assertion instanceof Assertion) {
             $encryptAssertion = $srcMetadata->getBoolean('assertion.encryption', null);
             if ($encryptAssertion === null) {
                 $encryptAssertion = $dstMetadata->getBoolean('assertion.encryption', false);
@@ -380,7 +400,7 @@ private static function decryptAssertion(
         try {
             $keys = self::getDecryptionKeys($srcMetadata, $dstMetadata);
         } catch (\Exception $e) {
-            throw new \SimpleSAML\Error\Exception('Error decrypting assertion: '.$e->getMessage());
+            throw new SSP_Error\Exception('Error decrypting assertion: ' . $e->getMessage());
         }
 
         $blacklist = self::getBlacklistedAlgorithms($srcMetadata, $dstMetadata);
@@ -389,13 +409,19 @@ private static function decryptAssertion(
         foreach ($keys as $i => $key) {
             try {
                 $ret = $assertion->getAssertion($key, $blacklist);
-                \SimpleSAML\Logger::debug('Decryption with key #'.$i.' succeeded.');
+                Logger::debug('Decryption with key #' . $i . ' succeeded.');
                 return $ret;
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::debug('Decryption with key #'.$i.' failed with exception: '.$e->getMessage());
+                Logger::debug('Decryption with key #' . $i . ' failed with exception: ' . $e->getMessage());
                 $lastException = $e;
             }
         }
+
+        /**
+         * The annotation below is not working - See vimeo/psalm#1909
+         * @psalm-suppress InvalidThrow
+         * @var \Exception $lastException
+         */
         throw $lastException;
     }
 
@@ -412,9 +438,9 @@ private static function decryptAssertion(
      * @throws \SimpleSAML\Error\Exception if we cannot get the decryption keys or decryption fails.
      */
     private static function decryptAttributes(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata,
-        \SAML2\Assertion &$assertion
+        Configuration $srcMetadata,
+        Configuration $dstMetadata,
+        Assertion &$assertion
     ) {
         if (!$assertion->hasEncryptedAttributes()) {
             return;
@@ -423,7 +449,7 @@ private static function decryptAttributes(
         try {
             $keys = self::getDecryptionKeys($srcMetadata, $dstMetadata);
         } catch (\Exception $e) {
-            throw new \SimpleSAML\Error\Exception('Error decrypting attributes: '.$e->getMessage());
+            throw new SSP_Error\Exception('Error decrypting attributes: ' . $e->getMessage());
         }
 
         $blacklist = self::getBlacklistedAlgorithms($srcMetadata, $dstMetadata);
@@ -432,15 +458,15 @@ private static function decryptAttributes(
         foreach ($keys as $i => $key) {
             try {
                 $assertion->decryptAttributes($key, $blacklist);
-                \SimpleSAML\Logger::debug('Attribute decryption with key #'.$i.' succeeded.');
+                Logger::debug('Attribute decryption with key #' . $i . ' succeeded.');
                 $error = false;
                 break;
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::debug('Attribute decryption failed with exception: '.$e->getMessage());
+                Logger::debug('Attribute decryption failed with exception: ' . $e->getMessage());
             }
         }
         if ($error) {
-            throw new \SimpleSAML\Error\Exception('Could not decrypt the attributes');
+            throw new SSP_Error\Exception('Could not decrypt the attributes');
         }
     }
 
@@ -452,7 +478,7 @@ private static function decryptAttributes(
      *
      * @return \SimpleSAML\Module\saml\Error The error.
      */
-    public static function getResponseError(\SAML2\StatusResponse $response)
+    public static function getResponseError(StatusResponse $response)
     {
         $status = $response->getStatus();
         return new \SimpleSAML\Module\saml\Error($status['Code'], $status['SubCode'], $status['Message']);
@@ -467,10 +493,10 @@ public static function getResponseError(\SAML2\StatusResponse $response)
      * @return \SAML2\AuthnRequest An authentication request object.
      */
     public static function buildAuthnRequest(
-        \SimpleSAML\Configuration $spMetadata,
-        \SimpleSAML\Configuration $idpMetadata
+        Configuration $spMetadata,
+        Configuration $idpMetadata
     ) {
-        $ar = new \SAML2\AuthnRequest();
+        $ar = new AuthnRequest();
 
         // get the NameIDPolicy to apply. IdP metadata has precedence.
         $nameIdPolicy = null;
@@ -480,7 +506,7 @@ public static function buildAuthnRequest(
             $nameIdPolicy = $spMetadata->getValue('NameIDPolicy');
         }
 
-        $policy = \SimpleSAML\Utils\Config\Metadata::parseNameIdPolicy($nameIdPolicy);
+        $policy = Utils\Config\Metadata::parseNameIdPolicy($nameIdPolicy);
         if ($policy !== null) {
             // either we have a policy set, or we used the transient default
             $ar->setNameIdPolicy($policy);
@@ -490,15 +516,15 @@ public static function buildAuthnRequest(
         $ar->setIsPassive($spMetadata->getBoolean('IsPassive', false));
 
         $protbind = $spMetadata->getValueValidate('ProtocolBinding', [
-            \SAML2\Constants::BINDING_HTTP_POST,
-            \SAML2\Constants::BINDING_HOK_SSO,
-            \SAML2\Constants::BINDING_HTTP_ARTIFACT,
-            \SAML2\Constants::BINDING_HTTP_REDIRECT,
-        ], \SAML2\Constants::BINDING_HTTP_POST);
+            Constants::BINDING_HTTP_POST,
+            Constants::BINDING_HOK_SSO,
+            Constants::BINDING_HTTP_ARTIFACT,
+            Constants::BINDING_HTTP_REDIRECT,
+        ], Constants::BINDING_HTTP_POST);
 
         // Shoaib: setting the appropriate binding based on parameter in sp-metadata defaults to HTTP_POST
         $ar->setProtocolBinding($protbind);
-        $issuer = new \SAML2\XML\saml\Issuer();
+        $issuer = new Issuer();
         $issuer->setValue($spMetadata->getString('entityid'));
         $ar->setIssuer($issuer);
         $ar->setAssertionConsumerServiceIndex($spMetadata->getInteger('AssertionConsumerServiceIndex', null));
@@ -507,11 +533,11 @@ public static function buildAuthnRequest(
         if ($spMetadata->hasValue('AuthnContextClassRef')) {
             $accr = $spMetadata->getArrayizeString('AuthnContextClassRef');
             $comp = $spMetadata->getValueValidate('AuthnContextComparison', [
-                \SAML2\Constants::COMPARISON_EXACT,
-                \SAML2\Constants::COMPARISON_MINIMUM,
-                \SAML2\Constants::COMPARISON_MAXIMUM,
-                \SAML2\Constants::COMPARISON_BETTER,
-            ], \SAML2\Constants::COMPARISON_EXACT);
+                Constants::COMPARISON_EXACT,
+                Constants::COMPARISON_MINIMUM,
+                Constants::COMPARISON_MAXIMUM,
+                Constants::COMPARISON_BETTER,
+            ], Constants::COMPARISON_EXACT);
             $ar->setRequestedAuthnContext(['AuthnContextClassRef' => $accr, 'Comparison' => $comp]);
         }
 
@@ -529,10 +555,10 @@ public static function buildAuthnRequest(
      * @return \SAML2\LogoutRequest A logout request object.
      */
     public static function buildLogoutRequest(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata
+        Configuration $srcMetadata,
+        Configuration $dstMetadata
     ) {
-        $lr = new \SAML2\LogoutRequest();
+        $lr = new LogoutRequest();
         $issuer = new Issuer();
         $issuer->setValue($srcMetadata->getString('entityid'));
         $issuer->setFormat(Constants::NAMEID_ENTITY);
@@ -552,10 +578,10 @@ public static function buildLogoutRequest(
      * @return \SAML2\LogoutResponse A logout response object.
      */
     public static function buildLogoutResponse(
-        \SimpleSAML\Configuration $srcMetadata,
-        \SimpleSAML\Configuration $dstMetadata
+        Configuration $srcMetadata,
+        Configuration $dstMetadata
     ) {
-        $lr = new \SAML2\LogoutResponse();
+        $lr = new LogoutResponse();
         $issuer = new Issuer();
         $issuer->setValue($srcMetadata->getString('entityid'));
         $issuer->setFormat(Constants::NAMEID_ENTITY);
@@ -582,20 +608,20 @@ public static function buildLogoutResponse(
      * @throws \Exception if the destination of the response does not match the current URL.
      */
     public static function processResponse(
-        \SimpleSAML\Configuration $spMetadata,
-        \SimpleSAML\Configuration $idpMetadata,
-        \SAML2\Response $response
+        Configuration $spMetadata,
+        Configuration $idpMetadata,
+        Response $response
     ) {
         if (!$response->isSuccess()) {
             throw self::getResponseError($response);
         }
 
         // validate Response-element destination
-        $currentURL = \SimpleSAML\Utils\HTTP::getSelfURLNoQuery();
+        $currentURL = Utils\HTTP::getSelfURLNoQuery();
         $msgDestination = $response->getDestination();
         if ($msgDestination !== null && $msgDestination !== $currentURL) {
-            throw new \Exception('Destination in response doesn\'t match the current URL. Destination is "'.
-                $msgDestination.'", current URL is "'.$currentURL.'".');
+            throw new \Exception('Destination in response doesn\'t match the current URL. Destination is "' .
+                $msgDestination . '", current URL is "' . $currentURL . '".');
         }
 
         $responseSigned = self::checkSign($idpMetadata, $response);
@@ -606,7 +632,7 @@ public static function processResponse(
          */
         $assertion = $response->getAssertions();
         if (empty($assertion)) {
-            throw new \SimpleSAML\Error\Exception('No assertions found in response from IdP.');
+            throw new SSP_Error\Exception('No assertions found in response from IdP.');
         }
 
         $ret = [];
@@ -635,13 +661,13 @@ public static function processResponse(
      * @throws \Exception if we couldn't decrypt the NameID for unexpected reasons.
      */
     private static function processAssertion(
-        \SimpleSAML\Configuration $spMetadata,
-        \SimpleSAML\Configuration $idpMetadata,
-        \SAML2\Response $response,
+        Configuration $spMetadata,
+        Configuration $idpMetadata,
+        Response $response,
         $assertion,
         $responseSigned
     ) {
-        assert($assertion instanceof \SAML2\Assertion || $assertion instanceof \SAML2\EncryptedAssertion);
+        assert($assertion instanceof Assertion || $assertion instanceof EncryptedAssertion);
         assert(is_bool($responseSigned));
 
         $assertion = self::decryptAssertion($idpMetadata, $spMetadata, $assertion);
@@ -649,14 +675,14 @@ private static function processAssertion(
 
         if (!self::checkSign($idpMetadata, $assertion)) {
             if (!$responseSigned) {
-                throw new \SimpleSAML\Error\Exception('Neither the assertion nor the response was signed.');
+                throw new SSP_Error\Exception('Neither the assertion nor the response was signed.');
             }
         } // at least one valid signature found
 
-        $currentURL = \SimpleSAML\Utils\HTTP::getSelfURLNoQuery();
+        $currentURL = Utils\HTTP::getSelfURLNoQuery();
 
         // check various properties of the assertion
-        $config = \SimpleSAML\Configuration::getInstance();
+        $config = Configuration::getInstance();
         $allowed_clock_skew = $config->getInteger('assertion.allowed_clock_skew', 180);
         $options = [
             'options' => [
@@ -668,19 +694,19 @@ private static function processAssertion(
         $allowed_clock_skew = filter_var($allowed_clock_skew, FILTER_VALIDATE_INT, $options);
         $notBefore = $assertion->getNotBefore();
         if ($notBefore !== null && $notBefore > time() + $allowed_clock_skew) {
-            throw new \SimpleSAML\Error\Exception(
+            throw new SSP_Error\Exception(
                 'Received an assertion that is valid in the future. Check clock synchronization on IdP and SP.'
             );
         }
         $notOnOrAfter = $assertion->getNotOnOrAfter();
         if ($notOnOrAfter !== null && $notOnOrAfter <= time() - $allowed_clock_skew) {
-            throw new \SimpleSAML\Error\Exception(
+            throw new SSP_Error\Exception(
                 'Received an assertion that has expired. Check clock synchronization on IdP and SP.'
             );
         }
         $sessionNotOnOrAfter = $assertion->getSessionNotOnOrAfter();
         if ($sessionNotOnOrAfter !== null && $sessionNotOnOrAfter <= time() - $allowed_clock_skew) {
-            throw new \SimpleSAML\Error\Exception(
+            throw new SSP_Error\Exception(
                 'Received an assertion with a session that has expired. Check clock synchronization on IdP and SP.'
             );
         }
@@ -688,19 +714,21 @@ private static function processAssertion(
         if ($validAudiences !== null) {
             $spEntityId = $spMetadata->getString('entityid');
             if (!in_array($spEntityId, $validAudiences, true)) {
-                $candidates = '['.implode('], [', $validAudiences).']';
-                throw new \SimpleSAML\Error\Exception('This SP ['.$spEntityId.
-                    ']  is not a valid audience for the assertion. Candidates were: '.$candidates);
+                $candidates = '[' . implode('], [', $validAudiences) . ']';
+                throw new SSP_Error\Exception(
+                    'This SP [' . $spEntityId .
+                    ']  is not a valid audience for the assertion. Candidates were: ' . $candidates
+                );
             }
         }
 
         $found = false;
         $lastError = 'No SubjectConfirmation element in Subject.';
-        $validSCMethods = [\SAML2\Constants::CM_BEARER, \SAML2\Constants::CM_HOK, \SAML2\Constants::CM_VOUCHES];
+        $validSCMethods = [Constants::CM_BEARER, Constants::CM_HOK, Constants::CM_VOUCHES];
         foreach ($assertion->getSubjectConfirmation() as $sc) {
             $method = $sc->getMethod();
             if (!in_array($method, $validSCMethods, true)) {
-                $lastError = 'Invalid Method on SubjectConfirmation: '.var_export($method, true);
+                $lastError = 'Invalid Method on SubjectConfirmation: ' . var_export($method, true);
                 continue;
             }
 
@@ -709,20 +737,20 @@ private static function processAssertion(
             if ($hok === null) {
                 $hok = $spMetadata->getBoolean('saml20.hok.assertion', false);
             }
-            if ($method === \SAML2\Constants::CM_BEARER && $hok) {
+            if ($method === Constants::CM_BEARER && $hok) {
                 $lastError = 'Bearer SubjectConfirmation received, but Holder-of-Key SubjectConfirmation needed';
                 continue;
             }
-            if ($method === \SAML2\Constants::CM_HOK && !$hok) {
-                $lastError = 'Holder-of-Key SubjectConfirmation received, '.
+            if ($method === Constants::CM_HOK && !$hok) {
+                $lastError = 'Holder-of-Key SubjectConfirmation received, ' .
                     'but the Holder-of-Key profile is not enabled.';
                 continue;
             }
 
             $scd = $sc->getSubjectConfirmationData();
-            if ($method === \SAML2\Constants::CM_HOK) {
+            if ($method === Constants::CM_HOK) {
                 // check HoK Assertion
-                if (\SimpleSAML\Utils\HTTP::isHTTPS() === false) {
+                if (Utils\HTTP::isHTTPS() === false) {
                     $lastError = 'No HTTPS connection, but required for Holder-of-Key SSO';
                     continue;
                 }
@@ -734,52 +762,52 @@ private static function processAssertion(
                 $clientCert = $_SERVER['SSL_CLIENT_CERT'];
                 $pattern = '/^-----BEGIN CERTIFICATE-----([^-]*)^-----END CERTIFICATE-----/m';
                 if (!preg_match($pattern, $clientCert, $matches)) {
-                    $lastError = 'Error while looking for client certificate during TLS handshake with SP, the client '.
-                        'certificate does not have the expected structure';
+                    $lastError = 'Error while looking for client certificate during TLS handshake with SP, ' .
+                        'the client certificate does not have the expected structure';
                     continue;
                 }
                 // we have a valid client certificate from the browser
                 $clientCert = str_replace(["\r", "\n", " "], '', $matches[1]);
 
                 $keyInfo = [];
-                foreach ($scd->info as $thing) {
-                    if ($thing instanceof \SAML2\XML\ds\KeyInfo) {
+                foreach ($scd->getInfo() as $thing) {
+                    if ($thing instanceof KeyInfo) {
                         $keyInfo[] = $thing;
                     }
                 }
                 if (count($keyInfo) != 1) {
-                    $lastError = 'Error validating Holder-of-Key assertion: Only one <ds:KeyInfo> element in '.
+                    $lastError = 'Error validating Holder-of-Key assertion: Only one <ds:KeyInfo> element in ' .
                         '<SubjectConfirmationData> allowed';
                     continue;
                 }
 
                 $x509data = [];
-                foreach ($keyInfo[0]->info as $thing) {
-                    if ($thing instanceof \SAML2\XML\ds\X509Data) {
+                foreach ($keyInfo[0]->getInfo() as $thing) {
+                    if ($thing instanceof X509Data) {
                         $x509data[] = $thing;
                     }
                 }
                 if (count($x509data) != 1) {
-                    $lastError = 'Error validating Holder-of-Key assertion: Only one <ds:X509Data> element in '.
+                    $lastError = 'Error validating Holder-of-Key assertion: Only one <ds:X509Data> element in ' .
                         '<ds:KeyInfo> within <SubjectConfirmationData> allowed';
                     continue;
                 }
 
                 $x509cert = [];
-                foreach ($x509data[0]->data as $thing) {
-                    if ($thing instanceof \SAML2\XML\ds\X509Certificate) {
+                foreach ($x509data[0]->getData() as $thing) {
+                    if ($thing instanceof X509Certificate) {
                         $x509cert[] = $thing;
                     }
                 }
                 if (count($x509cert) != 1) {
-                    $lastError = 'Error validating Holder-of-Key assertion: Only one <ds:X509Certificate> element in '.
+                    $lastError = 'Error validating Holder-of-Key assertion: Only one <ds:X509Certificate> element in ' .
                         '<ds:X509Data> within <SubjectConfirmationData> allowed';
                     continue;
                 }
 
-                $HoKCertificate = $x509cert[0]->certificate;
+                $HoKCertificate = $x509cert[0]->getCertificate();
                 if ($HoKCertificate !== $clientCert) {
-                    $lastError = 'Provided client certificate does not match the certificate bound to the '.
+                    $lastError = 'Provided client certificate does not match the certificate bound to the ' .
                         'Holder-of-Key assertion';
                     continue;
                 }
@@ -792,36 +820,39 @@ private static function processAssertion(
             }
 
             $notBefore = $scd->getNotBefore();
-            if ($notBefore && $notBefore > time() + 60) {
-                $lastError = 'NotBefore in SubjectConfirmationData is in the future: '.$notBefore;
+            if (is_int($notBefore) && $notBefore > time() + 60) {
+                $lastError = 'NotBefore in SubjectConfirmationData is in the future: ' . $notBefore;
                 continue;
             }
             $notOnOrAfter = $scd->getNotOnOrAfter();
-            if ($notOnOrAfter && $notOnOrAfter <= time() - 60) {
-                $lastError = 'NotOnOrAfter in SubjectConfirmationData is in the past: '.$notOnOrAfter;
+            if (is_int($notOnOrAfter) && $notOnOrAfter <= time() - 60) {
+                $lastError = 'NotOnOrAfter in SubjectConfirmationData is in the past: ' . $notOnOrAfter;
                 continue;
             }
             $recipient = $scd->getRecipient();
             if ($recipient !== null && $recipient !== $currentURL) {
-                $lastError = 'Recipient in SubjectConfirmationData does not match the current URL. Recipient is '.
-                    var_export($recipient, true).', current URL is '.var_export($currentURL, true).'.';
+                $lastError = 'Recipient in SubjectConfirmationData does not match the current URL. Recipient is ' .
+                    var_export($recipient, true) . ', current URL is ' . var_export($currentURL, true) . '.';
                 continue;
             }
             $inResponseTo = $scd->getInResponseTo();
-            if ($inResponseTo !== null && $response->getInResponseTo() !== null &&
-                $inResponseTo !== $response->getInResponseTo()
+            if (
+                $inResponseTo !== null
+                && $response->getInResponseTo() !== null
+                && $inResponseTo !== $response->getInResponseTo()
             ) {
-                $lastError = 'InResponseTo in SubjectConfirmationData does not match the Response. Response has '.
-                    var_export($response->getInResponseTo(), true).
-                    ', SubjectConfirmationData has '.var_export($inResponseTo, true).'.';
+                $lastError = 'InResponseTo in SubjectConfirmationData does not match the Response. Response has ' .
+                    var_export($response->getInResponseTo(), true) .
+                    ', SubjectConfirmationData has ' . var_export($inResponseTo, true) . '.';
                 continue;
             }
             $found = true;
             break;
         }
         if (!$found) {
-            throw new \SimpleSAML\Error\Exception('Error validating SubjectConfirmation in Assertion: '.$lastError);
-        } // as far as we can tell, the assertion is valid
+            throw new SSP_Error\Exception('Error validating SubjectConfirmation in Assertion: ' . $lastError);
+        }
+        // as far as we can tell, the assertion is valid
 
         // maybe we need to base64 decode the attributes in the assertion?
         if ($idpMetadata->getBoolean('base64attributes', false)) {
@@ -843,7 +874,7 @@ private static function processAssertion(
             try {
                 $keys = self::getDecryptionKeys($idpMetadata, $spMetadata);
             } catch (\Exception $e) {
-                throw new \SimpleSAML\Error\Exception('Error decrypting NameID: '.$e->getMessage());
+                throw new SSP_Error\Exception('Error decrypting NameID: ' . $e->getMessage());
             }
 
             $blacklist = self::getBlacklistedAlgorithms($idpMetadata, $spMetadata);
@@ -852,11 +883,11 @@ private static function processAssertion(
             foreach ($keys as $i => $key) {
                 try {
                     $assertion->decryptNameId($key, $blacklist);
-                    \SimpleSAML\Logger::debug('Decryption with key #'.$i.' succeeded.');
+                    Logger::debug('Decryption with key #' . $i . ' succeeded.');
                     $lastException = null;
                     break;
                 } catch (\Exception $e) {
-                    \SimpleSAML\Logger::debug('Decryption with key #'.$i.' failed with exception: '.$e->getMessage());
+                    Logger::debug('Decryption with key #' . $i . ' failed with exception: ' . $e->getMessage());
                     $lastException = $e;
                 }
             }
@@ -878,7 +909,7 @@ private static function processAssertion(
      *
      * @throws \SimpleSAML\Error\Exception if there is no supported encryption key in the metadata of this entity.
      */
-    public static function getEncryptionKey(\SimpleSAML\Configuration $metadata)
+    public static function getEncryptionKey(Configuration $metadata)
     {
 
         $sharedKey = $metadata->getString('sharedkey', null);
@@ -892,8 +923,8 @@ public static function getEncryptionKey(\SimpleSAML\Configuration $metadata)
         foreach ($keys as $key) {
             switch ($key['type']) {
                 case 'X509Certificate':
-                    $pemKey = "-----BEGIN CERTIFICATE-----\n".
-                        chunk_split($key['X509Certificate'], 64).
+                    $pemKey = "-----BEGIN CERTIFICATE-----\n" .
+                        chunk_split($key['X509Certificate'], 64) .
                         "-----END CERTIFICATE-----\n";
                     $key = new XMLSecurityKey(XMLSecurityKey::RSA_OAEP_MGF1P, ['type' => 'public']);
                     $key->loadKey($pemKey);
@@ -901,7 +932,7 @@ public static function getEncryptionKey(\SimpleSAML\Configuration $metadata)
             }
         }
 
-        throw new \SimpleSAML\Error\Exception('No supported encryption key in '.
+        throw new SSP_Error\Exception('No supported encryption key in ' .
             var_export($metadata->getString('entityid'), true));
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/SP/LogoutStore.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/SP/LogoutStore.php
index 6142654ac0..b29b5040ee 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/SP/LogoutStore.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/SP/LogoutStore.php
@@ -36,10 +36,11 @@ private static function createLogoutTable(Store\SQL $store)
             switch ($store->driver) {
                 case 'pgsql':
                     // This does not affect the NOT NULL constraint
-                    $update = ['ALTER TABLE '.$store->prefix.
-                        '_saml_LogoutStore ALTER COLUMN _expire DATETIME'];
+                    $update = [
+                        'ALTER TABLE ' . $store->prefix . '_saml_LogoutStore ALTER COLUMN _expire TYPE TIMESTAMP'
+                    ];
                     break;
-                case  'sqlite':
+                case 'sqlite':
                     /**
                      * Because SQLite does not support field alterations, the approach is to:
                      *     Create a new table without the proper column size
@@ -49,19 +50,25 @@ private static function createLogoutTable(Store\SQL $store)
                      *     Read the index
                      */
                     $update = [
-                        'CREATE TABLE '.$store->prefix.'_saml_LogoutStore_new (_authSource VARCHAR(255) NOT NULL,'.
-                        '_nameId VARCHAR(40) NOT NULL, _sessionIndex VARCHAR(50) NOT NULL, _expire DATETIME NOT NULL,'.
+                        'CREATE TABLE ' . $store->prefix . '_saml_LogoutStore_new (' .
+                        '_authSource VARCHAR(255) NOT NULL, _nameId VARCHAR(40) NOT NULL' .
+                        ', _sessionIndex VARCHAR(50) NOT NULL, _expire DATETIME NOT NULL,' .
                         '_sessionId VARCHAR(50) NOT NULL, UNIQUE (_authSource, _nameID, _sessionIndex))',
-                        'INSERT INTO '.$store->prefix.'_saml_LogoutStore_new SELECT * FROM '.$store->prefix.'_saml_LogoutStore',
-                        'DROP TABLE '.$store->prefix.'_saml_LogoutStore',
-                        'ALTER TABLE '.$store->prefix.'_saml_LogoutStore_new RENAME TO '.$store->prefix.'_saml_LogoutStore',
-                        'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_expire ON '.$store->prefix.'_saml_LogoutStore (_expire)',
-                        'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON '.$store->prefix.'_saml_LogoutStore (_authSource, _nameId)'
+                        'INSERT INTO ' . $store->prefix . '_saml_LogoutStore_new SELECT * FROM ' .
+                        $store->prefix . '_saml_LogoutStore',
+                        'DROP TABLE ' . $store->prefix . '_saml_LogoutStore',
+                        'ALTER TABLE ' . $store->prefix . '_saml_LogoutStore_new RENAME TO ' .
+                        $store->prefix . '_saml_LogoutStore',
+                        'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_expire ON ' .
+                        $store->prefix . '_saml_LogoutStore (_expire)',
+                        'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_nameId ON ' .
+                        $store->prefix . '_saml_LogoutStore (_authSource, _nameId)'
                     ];
                     break;
                 default:
-                    $update = ['ALTER TABLE '.$store->prefix.
-                        '_saml_LogoutStore MODIFY _expire DATETIME NOT NULL'];
+                    $update = [
+                        'ALTER TABLE ' . $store->prefix . '_saml_LogoutStore MODIFY _expire DATETIME NOT NULL'
+                    ];
                     break;
             }
 
@@ -70,28 +77,32 @@ private static function createLogoutTable(Store\SQL $store)
                     $store->pdo->exec($query);
                 }
             } catch (\Exception $e) {
-                Logger::warning('Database error: '.var_export($store->pdo->errorInfo(), true));
+                Logger::warning('Database error: ' . var_export($store->pdo->errorInfo(), true));
                 return;
             }
             $store->setTableVersion('saml_LogoutStore', 4);
             return;
-
         } elseif ($tableVer === 2) {
-            // TableVersion 3 fixes the indexes that were set to 255 in version 2; they cannot be larger than 191 on MySQL
+            /**
+             * TableVersion 3 fixes the indexes that were set to 255 in version 2;
+             *   they cannot be larger than 191 on MySQL
+             */
 
             if ($store->driver === 'mysql') {
                 // Drop old indexes
-                $query = 'ALTER TABLE '.$store->prefix.'_saml_LogoutStore DROP INDEX '.$store->prefix.'_saml_LogoutStore_nameId';
+                $query = 'ALTER TABLE ' . $store->prefix . '_saml_LogoutStore DROP INDEX ' .
+                $store->prefix . '_saml_LogoutStore_nameId';
                 $store->pdo->exec($query);
-                $query = 'ALTER TABLE '.$store->prefix.'_saml_LogoutStore DROP INDEX _authSource';
+                $query = 'ALTER TABLE ' . $store->prefix . '_saml_LogoutStore DROP INDEX _authSource';
                 $store->pdo->exec($query);
 
                 // Create new indexes
-                $query = 'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON ';
-                $query .= $store->prefix.'_saml_LogoutStore (_authSource(191), _nameId)';
+                $query = 'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_nameId ON ';
+                $query .= $store->prefix . '_saml_LogoutStore (_authSource(191), _nameId)';
                 $store->pdo->exec($query);
 
-                $query = 'ALTER TABLE '.$store->prefix.'_saml_LogoutStore ADD UNIQUE KEY (_authSource(191), _nameID, _sessionIndex)';
+                $query = 'ALTER TABLE ' . $store->prefix .
+                '_saml_LogoutStore ADD UNIQUE KEY (_authSource(191), _nameID, _sessionIndex)';
                 $store->pdo->exec($query);
             }
 
@@ -102,10 +113,11 @@ private static function createLogoutTable(Store\SQL $store)
             switch ($store->driver) {
                 case 'pgsql':
                     // This does not affect the NOT NULL constraint
-                    $update = ['ALTER TABLE '.$store->prefix.
+                    $update = [
+                        'ALTER TABLE ' . $store->prefix .
                         '_saml_LogoutStore ALTER COLUMN _authSource TYPE VARCHAR(255)'];
                     break;
-                case  'sqlite':
+                case 'sqlite':
                     /**
                      * Because SQLite does not support field alterations, the approach is to:
                      *     Create a new table without the proper column size
@@ -115,23 +127,33 @@ private static function createLogoutTable(Store\SQL $store)
                      *     Read the index
                      */
                     $update = [
-                        'CREATE TABLE '.$store->prefix.'_saml_LogoutStore_new (_authSource VARCHAR(255) NOT NULL,'.
-                        '_nameId VARCHAR(40) NOT NULL, _sessionIndex VARCHAR(50) NOT NULL, _expire TIMESTAMP NOT NULL,'.
-                        '_sessionId VARCHAR(50) NOT NULL, UNIQUE (_authSource, _nameID, _sessionIndex))',
-                        'INSERT INTO '.$store->prefix.'_saml_LogoutStore_new SELECT * FROM '.$store->prefix.'_saml_LogoutStore',
-                        'DROP TABLE '.$store->prefix.'_saml_LogoutStore',
-                        'ALTER TABLE '.$store->prefix.'_saml_LogoutStore_new RENAME TO '.$store->prefix.'_saml_LogoutStore',
-                        'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_expire ON '.$store->prefix.'_saml_LogoutStore (_expire)',
-                        'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON '.$store->prefix.'_saml_LogoutStore (_authSource, _nameId)'
+                        'CREATE TABLE ' . $store->prefix .
+                        '_saml_LogoutStore_new (_authSource VARCHAR(255) NOT NULL,' .
+                        '_nameId VARCHAR(40) NOT NULL, _sessionIndex VARCHAR(50) NOT NULL, ' .
+                        '_expire TIMESTAMP NOT NULL, _sessionId VARCHAR(50) NOT NULL, UNIQUE ' .
+                        '(_authSource, _nameID, _sessionIndex))',
+                        'INSERT INTO ' . $store->prefix . '_saml_LogoutStore_new SELECT * FROM ' .
+                        $store->prefix . '_saml_LogoutStore',
+                        'DROP TABLE ' . $store->prefix . '_saml_LogoutStore',
+                        'ALTER TABLE ' . $store->prefix . '_saml_LogoutStore_new RENAME TO ' .
+                        $store->prefix . '_saml_LogoutStore',
+                        'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_expire ON ' .
+                        $store->prefix . '_saml_LogoutStore (_expire)',
+                        'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_nameId ON ' .
+                        $store->prefix . '_saml_LogoutStore (_authSource, _nameId)'
                     ];
                     break;
                 case 'mysql':
-                    $update = ['ALTER TABLE '.$store->prefix.
-                        '_saml_LogoutStore MODIFY _authSource VARCHAR(191) NOT NULL'];
+                    $update = [
+                        'ALTER TABLE ' . $store->prefix .
+                        '_saml_LogoutStore MODIFY _authSource VARCHAR(191) NOT NULL'
+                    ];
                     break;
                 default:
-                    $update = ['ALTER TABLE '.$store->prefix.
-                        '_saml_LogoutStore MODIFY _authSource VARCHAR(255) NOT NULL'];
+                    $update = [
+                        'ALTER TABLE ' . $store->prefix .
+                        '_saml_LogoutStore MODIFY _authSource VARCHAR(255) NOT NULL'
+                    ];
                     break;
             }
 
@@ -140,29 +162,30 @@ private static function createLogoutTable(Store\SQL $store)
                     $store->pdo->exec($query);
                 }
             } catch (\Exception $e) {
-                Logger::warning('Database error: '.var_export($store->pdo->errorInfo(), true));
+                Logger::warning('Database error: ' . var_export($store->pdo->errorInfo(), true));
                 return;
             }
             $store->setTableVersion('saml_LogoutStore', 2);
             return;
         }
 
-        $query = 'CREATE TABLE '.$store->prefix.'_saml_LogoutStore (
-            _authSource VARCHAR('.($store->driver === 'mysql' ? '191' : '255').') NOT NULL,
+        $query = 'CREATE TABLE ' . $store->prefix . '_saml_LogoutStore (
+            _authSource VARCHAR(' . ($store->driver === 'mysql' ? '191' : '255') . ') NOT NULL,
             _nameId VARCHAR(40) NOT NULL,
             _sessionIndex VARCHAR(50) NOT NULL,
-            _expire DATETIME NOT NULL,
+            _expire ' . ($store->driver === 'pgsql' ? 'TIMESTAMP' : 'DATETIME') . ' NOT NULL,
             _sessionId VARCHAR(50) NOT NULL,
-            UNIQUE (_authSource'.($store->driver === 'mysql' ? '(191)' : '').', _nameID, _sessionIndex)
+            UNIQUE (_authSource' . ($store->driver === 'mysql' ? '(191)' : '') . ', _nameID, _sessionIndex)
         )';
         $store->pdo->exec($query);
 
-        $query = 'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_expire ON ';
-        $query .= $store->prefix.'_saml_LogoutStore (_expire)';
+        $query = 'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_expire ON ';
+        $query .= $store->prefix . '_saml_LogoutStore (_expire)';
         $store->pdo->exec($query);
 
-        $query = 'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON ';
-        $query .= $store->prefix.'_saml_LogoutStore (_authSource'.($store->driver === 'mysql' ? '(191)' : '').', _nameId)';
+        $query = 'CREATE INDEX ' . $store->prefix . '_saml_LogoutStore_nameId ON ';
+        $query .= $store->prefix . '_saml_LogoutStore (_authSource' . ($store->driver === 'mysql' ? '(191)' : '') .
+        ', _nameId)';
         $store->pdo->exec($query);
 
         $store->setTableVersion('saml_LogoutStore', 4);
@@ -179,7 +202,7 @@ private static function cleanLogoutStore(Store\SQL $store)
     {
         Logger::debug('saml.LogoutStore: Cleaning logout store.');
 
-        $query = 'DELETE FROM '.$store->prefix.'_saml_LogoutStore WHERE _expire < :now';
+        $query = 'DELETE FROM ' . $store->prefix . '_saml_LogoutStore WHERE _expire < :now';
         $params = ['now' => gmdate('Y-m-d H:i:s')];
 
         $query = $store->pdo->prepare($query);
@@ -226,7 +249,7 @@ private static function addSessionSQL(
             '_sessionId' => $sessionId,
         ];
         $store->insertOrUpdate(
-            $store->prefix.'_saml_LogoutStore',
+            $store->prefix . '_saml_LogoutStore',
             ['_authSource', '_nameId', '_sessionIndex'],
             $data
         );
@@ -255,8 +278,8 @@ private static function getSessionsSQL(Store\SQL $store, $authId, $nameId)
         ];
 
         // We request the columns in lowercase in order to be compatible with PostgreSQL
-        $query = 'SELECT _sessionIndex AS _sessionindex, _sessionId AS _sessionid FROM '.$store->prefix;
-        $query .= '_saml_LogoutStore'.' WHERE _authSource = :_authSource AND _nameId = :_nameId AND _expire >= :now';
+        $query = 'SELECT _sessionIndex AS _sessionindex, _sessionId AS _sessionid FROM ' . $store->prefix;
+        $query .= '_saml_LogoutStore WHERE _authSource = :_authSource AND _nameId = :_nameId AND _expire >= :now';
         $query = $store->pdo->prepare($query);
         $query->execute($params);
 
@@ -285,7 +308,7 @@ private static function getSessionsStore(Store $store, $authId, $nameId, array $
 
         $res = [];
         foreach ($sessionIndexes as $sessionIndex) {
-            $sessionId = $store->get('saml.LogoutStore', $nameId.':'.$sessionIndex);
+            $sessionId = $store->get('saml.LogoutStore', $nameId . ':' . $sessionIndex);
             if ($sessionId === null) {
                 continue;
             }
@@ -318,6 +341,12 @@ public static function addSession($authId, $nameId, $sessionIndex, $expire)
         assert(is_string($sessionIndex) || $sessionIndex === null);
         assert(is_int($expire));
 
+        $session = Session::getSessionFromRequest();
+        if ($session->isTransient()) {
+            // transient sessions are useless for this purpose, nothing to do
+            return;
+        }
+
         if ($sessionIndex === null) {
             /* This IdP apparently did not include a SessionIndex, and thus probably does not
              * support SLO. We still want to add the session to the data store just in case
@@ -346,13 +375,13 @@ public static function addSession($authId, $nameId, $sessionIndex, $expire)
             $sessionIndex = sha1($sessionIndex);
         }
 
-        $session = Session::getSessionFromRequest();
+        /** @var string $sessionId */
         $sessionId = $session->getSessionId();
 
         if ($store instanceof Store\SQL) {
             self::addSessionSQL($store, $authId, $strNameId, $sessionIndex, $expire, $sessionId);
         } else {
-            $store->set('saml.LogoutStore', $strNameId.':'.$sessionIndex, $sessionId, $expire);
+            $store->set('saml.LogoutStore', $strNameId . ':' . $sessionIndex, $sessionId, $expire);
         }
     }
 
@@ -431,7 +460,7 @@ public static function logoutSessions($authId, $nameId, array $sessionIndexes)
             }
 
             Logger::info(
-                'saml.LogoutStore: Logging out of session with trackId ['.$session->getTrackID().'].'
+                'saml.LogoutStore: Logging out of session with trackId [' . $session->getTrackID() . '].'
             );
             $session->doLogout($authId);
             $numLoggedOut += 1;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/templates/proxy/invalid_session.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/templates/proxy/invalid_session.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/modules/saml/templates/proxy/invalid_session.php
rename to vendor/simplesamlphp/simplesamlphp/modules/saml/templates/proxy/invalid_session.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/idp/certs.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/idp/certs.php
index 7a2597519a..5f11e7461d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/idp/certs.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/idp/certs.php
@@ -18,19 +18,22 @@
 
 switch ($_SERVER['PATH_INFO']) {
     case '/new_idp.crt':
-        $certInfo = SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, false, 'new_');
+        /** @var array $certInfo */
+        $certInfo = SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, true, 'new_');
         break;
     case '/idp.crt':
+        /** @var array $certInfo */
         $certInfo = SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, true);
         break;
     case '/https.crt':
+        /** @var array $certInfo */
         $certInfo = SimpleSAML\Utils\Crypto::loadPublicKey($idpmeta, true, 'https.');
         break;
     default:
         throw new \SimpleSAML\Error\NotFound('Unknown certificate.');
 }
-
-header('Content-Disposition: attachment; filename='.substr($_SERVER['PATH_INFO'], 1));
+header('Content-Disposition: attachment; filename=' . substr($_SERVER['PATH_INFO'], 1));
 header('Content-Type: application/x-x509-ca-cert');
+
 echo $certInfo['PEM'];
 exit(0);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/proxy/invalid_session.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/proxy/invalid_session.php
index 1afc151ae1..3b9c096104 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/proxy/invalid_session.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/proxy/invalid_session.php
@@ -16,9 +16,11 @@
 
 try {
     // try to get the state
+    /** @var array $state  State can never be null without a third argument */
     $state = \SimpleSAML\Auth\State::loadState($_REQUEST['AuthState'], 'saml:proxy:invalid_idp');
 } catch (\Exception $e) {
     // the user probably hit the back button after starting the logout, try to recover the state with another stage
+    /** @var array $state  State can never be null without a third argument */
     $state = \SimpleSAML\Auth\State::loadState($_REQUEST['AuthState'], 'core:Logout:afterbridge');
 
     // success! Try to continue with reauthentication, since we no longer have a valid session here
@@ -38,14 +40,15 @@
 }
 
 if (isset($_POST['continue'])) {
-    // log the user out before being able to login again
-    $as = \SimpleSAML\Auth\Source::getById($state['saml:sp:AuthId'], '\SimpleSAML\Module\saml\Auth\Source\SP');
     /** @var \SimpleSAML\Module\saml\Auth\Source\SP $as */
+    $as = \SimpleSAML\Auth\Source::getById($state['saml:sp:AuthId'], '\SimpleSAML\Module\saml\Auth\Source\SP');
+
+    // log the user out before being able to login again
     $as->reauthLogout($state);
 }
 
 $cfg = \SimpleSAML\Configuration::getInstance();
-$template = new \SimpleSAML\XHTML\Template($cfg, 'saml:proxy/invalid_session.php');
+$template = new \SimpleSAML\XHTML\Template($cfg, 'saml:proxy/invalid_session.tpl.php');
 $translator = $template->getTranslator();
 $template->data['AuthState'] = (string) $_REQUEST['AuthState'];
 
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/discoresp.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/discoresp.php
index 94ac7c1d77..ec944c3ed8 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/discoresp.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/discoresp.php
@@ -11,6 +11,8 @@
 if (!array_key_exists('idpentityid', $_REQUEST)) {
     throw new \SimpleSAML\Error\BadRequest('Missing idpentityid to discovery service response handler');
 }
+
+/** @var array $state */
 $state = \SimpleSAML\Auth\State::loadState($_REQUEST['AuthID'], 'saml:sp:sso');
 
 // Find authentication source
@@ -19,7 +21,7 @@
 
 $source = \SimpleSAML\Auth\Source::getById($sourceId);
 if ($source === null) {
-    throw new Exception('Could not find authentication source with id '.$sourceId);
+    throw new Exception('Could not find authentication source with id ' . $sourceId);
 }
 if (!($source instanceof \SimpleSAML\Module\saml\Auth\Source\SP)) {
     throw new \SimpleSAML\Error\Exception('Source type changed?');
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/metadata.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/metadata.php
index 1289d31e98..b13d86fed3 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/metadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/metadata.php
@@ -33,7 +33,7 @@
 ];
 
 $slob = $spconfig->getArray('SingleLogoutServiceBinding', $slosvcdefault);
-$slol = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-logout.php/'.$sourceId);
+$slol = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-logout.php/' . $sourceId);
 
 foreach ($slob as $binding) {
     if ($binding == \SAML2\Constants::BINDING_SOAP && !($store instanceof \SimpleSAML\Store\SQL)) {
@@ -42,7 +42,7 @@
     }
     $metaArray20['SingleLogoutService'][] = [
         'Binding'  => $binding,
-        'Location' => $slol,
+        'Location' => $spconfig->getString('SingleLogoutServiceLocation', $slol),
     ];
 }
 
@@ -67,35 +67,37 @@
     switch ($services) {
         case 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST':
             $acsArray['Binding'] = \SAML2\Constants::BINDING_HTTP_POST;
-            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$sourceId);
+            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/' . $sourceId);
             if (!in_array(\SAML2\Constants::NS_SAMLP, $supported_protocols, true)) {
                 $supported_protocols[] = \SAML2\Constants::NS_SAMLP;
             }
             break;
         case 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post':
             $acsArray['Binding'] = 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post';
-            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml1-acs.php/'.$sourceId);
+            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml1-acs.php/' . $sourceId);
             if (!in_array('urn:oasis:names:tc:SAML:1.1:protocol', $supported_protocols, true)) {
                 $supported_protocols[] = 'urn:oasis:names:tc:SAML:1.1:protocol';
             }
             break;
         case 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact':
             $acsArray['Binding'] = 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact';
-            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$sourceId);
+            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/' . $sourceId);
             if (!in_array(\SAML2\Constants::NS_SAMLP, $supported_protocols, true)) {
                 $supported_protocols[] = \SAML2\Constants::NS_SAMLP;
             }
             break;
         case 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01':
             $acsArray['Binding'] = 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01';
-            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml1-acs.php/'.$sourceId.'/artifact');
+            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL(
+                'saml/sp/saml1-acs.php/' . $sourceId . '/artifact'
+            );
             if (!in_array('urn:oasis:names:tc:SAML:1.1:protocol', $supported_protocols, true)) {
                 $supported_protocols[] = 'urn:oasis:names:tc:SAML:1.1:protocol';
             }
             break;
         case 'urn:oasis:names:tc:SAML:2.0:profiles:holder-of-key:SSO:browser':
             $acsArray['Binding'] = 'urn:oasis:names:tc:SAML:2.0:profiles:holder-of-key:SSO:browser';
-            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/'.$sourceId);
+            $acsArray['Location'] = \SimpleSAML\Module::getModuleURL('saml/sp/saml2-acs.php/' . $sourceId);
             $acsArray['hoksso:ProtocolBinding'] = \SAML2\Constants::BINDING_HTTP_REDIRECT;
             if (!in_array(\SAML2\Constants::NS_SAMLP, $supported_protocols, true)) {
                 $supported_protocols[] = \SAML2\Constants::NS_SAMLP;
@@ -106,7 +108,7 @@
     $index++;
 }
 
-$metaArray20['AssertionConsumerService'] = $eps;
+$metaArray20['AssertionConsumerService'] = $spconfig->getArray('AssertionConsumerService', $eps);
 
 $keys = [];
 $certInfo = \SimpleSAML\Utils\Crypto::loadPublicKey($spconfig, false, 'new_');
@@ -208,9 +210,11 @@
 // add technical contact
 $email = $config->getString('technicalcontact_email', 'na@example.org');
 if ($email && $email !== 'na@example.org') {
-    $techcontact['emailAddress'] = $email;
-    $techcontact['name'] = $config->getString('technicalcontact_name', null);
-    $techcontact['contactType'] = 'technical';
+    $techcontact = [
+        'emailAddress' => $email,
+        'name' => $config->getString('technicalcontact_name', null),
+        'contactType' => 'technical'
+    ];
     $metaArray20['contacts'][] = \SimpleSAML\Utils\Config\Metadata::getContact($techcontact);
 }
 
@@ -268,13 +272,14 @@
 $xml = \SimpleSAML\Metadata\Signer::sign($xml, $spconfig->toArray(), 'SAML 2 SP');
 
 if (array_key_exists('output', $_REQUEST) && $_REQUEST['output'] == 'xhtml') {
-    $t = new \SimpleSAML\XHTML\Template($config, 'metadata.php', 'admin');
+    $t = new \SimpleSAML\XHTML\Template($config, 'metadata.tpl.php', 'admin');
 
     $t->data['clipboard.js'] = true;
     $t->data['header'] = 'saml20-sp'; // TODO: Replace with headerString in 2.0
     $t->data['headerString'] = \SimpleSAML\Locale\Translate::noop('metadata_saml20-sp');
     $t->data['metadata'] = htmlspecialchars($xml);
-    $t->data['metadataflat'] = '$metadata['.var_export($entityId, true).'] = '.var_export($metaArray20, true).';';
+    $t->data['metadataflat'] = '$metadata[' . var_export($entityId, true)
+        . '] = ' . var_export($metaArray20, true) . ';';
     $t->data['metaurl'] = $source->getMetadataURL();
     $t->show();
 } else {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml1-acs.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml1-acs.php
index db18627fd9..6b981774ce 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml1-acs.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml1-acs.php
@@ -21,6 +21,7 @@
 }
 $sourceId = substr($sourceId, 1, $end - 1);
 
+/** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId, '\SimpleSAML\Module\saml\Auth\Source\SP');
 
 SimpleSAML\Logger::debug('Received SAML1 response');
@@ -35,6 +36,7 @@
         'saml:sp:RelayState' => \SimpleSAML\Utils\HTTP::checkURLAllowed($target),
     ];
 } else {
+    /** @var array $state  State can never be null without a third argument */
     $state = \SimpleSAML\Auth\State::loadState($_REQUEST['TARGET'], 'saml:sp:sso');
 
     // Check that the authentication source is correct
@@ -66,7 +68,7 @@
     $responseXML = base64_decode($responseXML);
     $isValidated = false; /* Must check signature on response. */
 } else {
-    assert(false);
+    throw new \SimpleSAML\Error\BadRequest('Missing SAMLResponse or SAMLart parameter.');
 }
 
 $response = new \SimpleSAML\XML\Shib13\AuthnResponse();
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-acs.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-acs.php
index 34c80bc766..4d05bf2b8e 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-acs.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-acs.php
@@ -9,9 +9,11 @@
 }
 
 $sourceId = substr($_SERVER['PATH_INFO'], 1);
+
+/** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId, '\SimpleSAML\Module\saml\Auth\Source\SP');
-$spMetadata = $source->getMetadata();
 
+$spMetadata = $source->getMetadata();
 try {
     $b = \SAML2\Binding::getCurrentBinding();
 } catch (Exception $e) {
@@ -51,14 +53,17 @@
     }
 }
 
-$idp = $issuer;
 if ($issuer instanceof \SAML2\XML\saml\Issuer) {
-    $idp = $idp->getValue();
+    $issuer = $issuer->getValue();
+    if ($issuer === null) {
+        // no issuer found in the assertions
+        throw new Exception('Missing <saml:Issuer> in message delivered to AssertionConsumerService.');
+    }
 }
 
 $session = \SimpleSAML\Session::getSessionFromRequest();
 $prevAuth = $session->getAuthData($sourceId, 'saml:sp:prevAuth');
-if ($prevAuth !== null && $prevAuth['id'] === $response->getId() && $prevAuth['issuer'] === $idp) {
+if ($prevAuth !== null && $prevAuth['id'] === $response->getId() && $prevAuth['issuer'] === $issuer) {
     /* OK, it looks like this message has the same issuer
      * and ID as the SP session we already have active. We
      * therefore assume that the user has somehow triggered
@@ -77,17 +82,17 @@
     throw new \SimpleSAML\Error\Exception('Duplicate assertion received.');
 }
 
-$idpMetadata = [];
-
+$idpMetadata = null;
 $state = null;
 $stateId = $response->getInResponseTo();
+
 if (!empty($stateId)) {
     // this should be a response to a request we sent earlier
     try {
         $state = \SimpleSAML\Auth\State::loadState($stateId, 'saml:sp:sso');
     } catch (Exception $e) {
         // something went wrong,
-        SimpleSAML\Logger::warning('Could not load state specified by InResponseTo: '.$e->getMessage().
+        SimpleSAML\Logger::warning('Could not load state specified by InResponseTo: ' . $e->getMessage() .
             ' Processing response as unsolicited.');
     }
 }
@@ -103,11 +108,13 @@
 
     // check that the issuer is the one we are expecting
     assert(array_key_exists('ExpectedIssuer', $state));
-    if ($state['ExpectedIssuer'] !== $idp) {
-        $idpMetadata = $source->getIdPMetadata($idp);
+    if ($state['ExpectedIssuer'] !== $issuer) {
+        $idpMetadata = $source->getIdPMetadata($issuer);
         $idplist = $idpMetadata->getArrayize('IDPList', []);
         if (!in_array($state['ExpectedIssuer'], $idplist, true)) {
-            SimpleSAML\Logger::warning('The issuer of the response not match to the identity provider we sent the request to.');
+            SimpleSAML\Logger::warning(
+                'The issuer of the response not match to the identity provider we sent the request to.'
+            );
         }
     }
 } else {
@@ -124,10 +131,10 @@
     ];
 }
 
-SimpleSAML\Logger::debug('Received SAML2 Response from '.var_export($idp, true).'.');
+SimpleSAML\Logger::debug('Received SAML2 Response from ' . var_export($issuer, true) . '.');
 
-if (empty($idpMetadata)) {
-    $idpMetadata = $source->getIdPmetadata($idp);
+if (is_null($idpMetadata)) {
+    $idpMetadata = $source->getIdPmetadata($issuer);
 }
 
 try {
@@ -138,13 +145,13 @@
     \SimpleSAML\Auth\State::throwException($state, $e);
 }
 
-
 $authenticatingAuthority = null;
 $nameId = null;
 $sessionIndex = null;
 $expire = null;
 $attributes = [];
 $foundAuthnStatement = false;
+
 foreach ($assertions as $assertion) {
     // check for duplicate assertion (replay attack)
     $store = \SimpleSAML\Store::getInstance();
@@ -165,7 +172,6 @@
         $store->set('saml.AssertionReceived', $aID, true, $notOnOrAfter);
     }
 
-
     if ($authenticatingAuthority === null) {
         $authenticatingAuthority = $assertion->getAuthenticatingAuthority();
     }
@@ -186,6 +192,7 @@
         $foundAuthnStatement = true;
     }
 }
+$assertion = end($assertions);
 
 if (!$foundAuthnStatement) {
     $e = new \SimpleSAML\Error\Exception('No AuthnStatement found in assertion(s).');
@@ -206,7 +213,7 @@
     // we need to save the NameID and SessionIndex for logout
     $logoutState = [
         'saml:logout:Type'         => 'saml2',
-        'saml:logout:IdP'          => $idp,
+        'saml:logout:IdP'          => $issuer,
         'saml:logout:NameID'       => $nameId,
         'saml:logout:SessionIndex' => $sessionIndex,
     ];
@@ -233,7 +240,7 @@
 
 $state['LogoutState'] = $logoutState;
 $state['saml:AuthenticatingAuthority'] = $authenticatingAuthority;
-$state['saml:AuthenticatingAuthority'][] = $idp;
+$state['saml:AuthenticatingAuthority'][] = $issuer;
 $state['PersistentAuthData'][] = 'saml:AuthenticatingAuthority';
 $state['saml:AuthnInstant'] = $assertion->getAuthnInstant();
 $state['PersistentAuthData'][] = 'saml:AuthnInstant';
@@ -249,7 +256,7 @@
 // note some information about the authentication, in case we receive the same response again
 $state['saml:sp:prevAuth'] = [
     'id'     => $response->getId(),
-    'issuer' => $idp,
+    'issuer' => $issuer,
 ];
 if (isset($state['\SimpleSAML\Auth\Source.ReturnURL'])) {
     $state['saml:sp:prevAuth']['redirect'] = $state['\SimpleSAML\Auth\Source.ReturnURL'];
@@ -258,5 +265,5 @@
 }
 $state['PersistentAuthData'][] = 'saml:sp:prevAuth';
 
-$source->handleResponse($state, $idp, $attributes);
+$source->handleResponse($state, $issuer, $attributes);
 assert(false);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-logout.php b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-logout.php
index e181484123..61950a71e1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-logout.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/saml/www/sp/saml2-logout.php
@@ -12,11 +12,11 @@
 
 $sourceId = substr($_SERVER['PATH_INFO'], 1);
 
+/** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
 $source = \SimpleSAML\Auth\Source::getById($sourceId);
 if ($source === null) {
-    throw new \Exception('Could not find authentication source with id '.$sourceId);
-}
-if (!($source instanceof \SimpleSAML\Module\saml\Auth\Source\SP)) {
+    throw new \Exception('Could not find authentication source with id ' . $sourceId);
+} elseif (!($source instanceof \SimpleSAML\Module\saml\Auth\Source\SP)) {
     throw new \SimpleSAML\Error\Exception('Source type changed?');
 }
 
@@ -35,15 +35,18 @@
 $message = $binding->receive();
 
 $issuer = $message->getIssuer();
-if ($issuer === null) {
-    // Without an issuer we have no way to respond to the message.
-    throw new \SimpleSAML\Error\BadRequest('Received message on logout endpoint without issuer.');
-} elseif ($issuer instanceof \SAML2\XML\saml\Issuer) {
+if ($issuer instanceof \SAML2\XML\saml\Issuer) {
     $idpEntityId = $issuer->getValue();
 } else {
     $idpEntityId = $issuer;
 }
 
+if ($idpEntityId === null) {
+    // Without an issuer we have no way to respond to the message.
+    throw new \SimpleSAML\Error\BadRequest('Received message on logout endpoint without issuer.');
+}
+
+/** @var \SimpleSAML\Module\saml\Auth\Source\SP $source */
 $spEntityId = $source->getEntityId();
 
 $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
@@ -66,7 +69,7 @@
 
     if (!$message->isSuccess()) {
         \SimpleSAML\Logger::warning(
-            'Unsuccessful logout. Status was: '.\SimpleSAML\Module\saml\Message::getResponseError($message)
+            'Unsuccessful logout. Status was: ' . \SimpleSAML\Module\saml\Message::getResponseError($message)
         );
     }
 
@@ -74,14 +77,14 @@
     $state['saml:sp:LogoutStatus'] = $message->getStatus();
     \SimpleSAML\Auth\Source::completeLogout($state);
 } elseif ($message instanceof \SAML2\LogoutRequest) {
-    \SimpleSAML\Logger::debug('module/saml2/sp/logout: Request from '.$idpEntityId);
-    \SimpleSAML\Logger::stats('saml20-idp-SLO idpinit '.$spEntityId.' '.$idpEntityId);
+    \SimpleSAML\Logger::debug('module/saml2/sp/logout: Request from ' . $idpEntityId);
+    \SimpleSAML\Logger::stats('saml20-idp-SLO idpinit ' . $spEntityId . ' ' . $idpEntityId);
 
     if ($message->isNameIdEncrypted()) {
         try {
             $keys = \SimpleSAML\Module\saml\Message::getDecryptionKeys($idpMetadata, $spMetadata);
         } catch (\Exception $e) {
-            throw new \SimpleSAML\Error\Exception('Error decrypting NameID: '.$e->getMessage());
+            throw new \SimpleSAML\Error\Exception('Error decrypting NameID: ' . $e->getMessage());
         }
 
         $blacklist = \SimpleSAML\Module\saml\Message::getBlacklistedAlgorithms($idpMetadata, $spMetadata);
@@ -90,11 +93,11 @@
         foreach ($keys as $i => $key) {
             try {
                 $message->decryptNameId($key, $blacklist);
-                \SimpleSAML\Logger::debug('Decryption with key #'.$i.' succeeded.');
+                \SimpleSAML\Logger::debug('Decryption with key #' . $i . ' succeeded.');
                 $lastException = null;
                 break;
             } catch (\Exception $e) {
-                \SimpleSAML\Logger::debug('Decryption with key #'.$i.' failed with exception: '.$e->getMessage());
+                \SimpleSAML\Logger::debug('Decryption with key #' . $i . ' failed with exception: ' . $e->getMessage());
                 $lastException = $e;
             }
         }
@@ -119,9 +122,10 @@
     $lr->setInResponseTo($message->getId());
 
     if ($numLoggedOut < count($sessionIndexes)) {
-        \SimpleSAML\Logger::warning('Logged out of '.$numLoggedOut.' of '.count($sessionIndexes).' sessions.');
+        \SimpleSAML\Logger::warning('Logged out of ' . $numLoggedOut . ' of ' . count($sessionIndexes) . ' sessions.');
     }
 
+    /** @var array $dst */
     $dst = $idpMetadata->getEndpointPrioritizedByBinding(
         'SingleLogoutService',
         [
@@ -143,5 +147,5 @@
 
     $binding->send($lr);
 } else {
-    throw new \SimpleSAML\Error\BadRequest('Unknown message received on logout endpoint: '.get_class($message));
+    throw new \SimpleSAML\Error\BadRequest('Unknown message received on logout endpoint: ' . get_class($message));
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.php_cs.dist
new file mode 100644
index 0000000000..084410f1da
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.php_cs.dist
@@ -0,0 +1,18 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/config-templates',
+        __DIR__ . '/hooks',
+        __DIR__ . '/templates',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.travis.yml
new file mode 100644
index 0000000000..3c250287a7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/.travis.yml
@@ -0,0 +1,35 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/bin/check-syntax.sh
new file mode 100755
index 0000000000..75a810c218
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates hooks templates tests www -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/composer.json
new file mode 100644
index 0000000000..20073b1e75
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-sanitycheck",
+    "description": "Perform sanity checks on configuration",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "sanitycheck"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\sanitycheck\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "webmozart/assert": "~1.4"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-sanitycheck"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/dictionaries/strings.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/dictionaries/strings.translation.json
index a3940e0481..802fe912c7 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/dictionaries/strings.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/dictionaries/strings.translation.json
@@ -2,6 +2,7 @@
   "link_sanitycheck": {
     "es": "Comprobaciones básicas de la instalación",
     "no": "Sjekk din installasjon",
-    "nn": "Sjekk din installasjon"
+    "nn": "Sjekk din installasjon",
+    "ca": "Comprovació de la validesa de la vostra configuració de SimpleSAMLphp"
   }
 }
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_configpage.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_configpage.php
index a4db0492e7..68856b9305 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_configpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_configpage.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to add the sanitycheck link to the config page.
  *
  * @param \SimpleSAML\XHTML\Template $template The template that we should alter in this hook.
+ * @return void
  */
 function sanitycheck_hook_configpage(\SimpleSAML\XHTML\Template &$template)
 {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_cron.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_cron.php
index 15e0736ddb..0ab1a66046 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_cron.php
@@ -1,10 +1,11 @@
 <?php
+
 /**
  * Hook to run a cron job.
  *
  * @param array &$croninfo  Output
+ * @return void
  */
-
 function sanitycheck_hook_cron(&$croninfo)
 {
     assert(is_array($croninfo));
@@ -35,7 +36,7 @@ function sanitycheck_hook_cron(&$croninfo)
                 $croninfo['summary'][] = 'Sanitycheck error: '.$err;
             }
         }
-    } catch (Exception $e) {
+    } catch (\Exception $e) {
         $croninfo['summary'][] = 'Error executing sanity check: '.$e->getMessage();
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_frontpage.php
index 1e860e6e68..e1b1a126d9 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_frontpage.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to add the modinfo module to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
 function sanitycheck_hook_frontpage(&$links)
 {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_moduleinfo.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_moduleinfo.php
index 87d014e2ec..d0eb684e1f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_moduleinfo.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_moduleinfo.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * This hook lets the module describe itself.
  *
  * @param array &$moduleinfo  The links on the frontpage, split into sections.
+ * @return void
  */
 function sanitycheck_hook_moduleinfo(&$moduleinfo)
 {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_sanitycheck.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_sanitycheck.php
index 8aec6582bf..6288c1be69 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_sanitycheck.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/hooks/hook_sanitycheck.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to add the modinfo module to the frontpage.
  *
  * @param array &$hookinfo  hookinfo
+ * @return void
  */
 function sanitycheck_hook_sanitycheck(&$hookinfo)
 {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/psalm.xml
new file mode 100644
index 0000000000..ce1e5b4b8d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/psalm.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp sanitycheck module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="config-templates" />
+        <directory name="hooks" />
+        <directory name="templates" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/templates/check.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/templates/check.tpl.php
index ba9f69ada6..2dba59166b 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/templates/check.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/templates/check.tpl.php
@@ -11,11 +11,9 @@
     foreach ($this->data['errors'] as $err) {
         echo '<li>'.$err.'</li>';
     }
+    echo '</ul></div>';
 }
-?>
-    </ul>
-</div>
-<?php
+
 if (count($this->data['info']) > 0) {
     echo '<div style="border: 1px solid #ccc; background: #eee; margin: 1em; padding: .5em">';
     echo '<p><img class="float-r" src="/'.$this->data['baseurlpath'].
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/tests/bootstrap.php
new file mode 100644
index 0000000000..57fcb7dd39
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot.'/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot.'/vendor/simplesamlphp/simplesamlphp/modules/sanitycheck';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.php_cs.dist
new file mode 100644
index 0000000000..e7d314696c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.php_cs.dist
@@ -0,0 +1,15 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.travis.yml
new file mode 100644
index 0000000000..eeeefcda8e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/.travis.yml
@@ -0,0 +1,36 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+  
+matrix:
+  allow_failures:
+    - php: 7.3
+
+before_script:
+  - pecl install krb5
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then composer require --dev vimeo/psalm:1.1.9; fi
+
+script:
+  - bin/check-syntax.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/LICENSE
new file mode 100644
index 0000000000..0a041280bd
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/LICENSE
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/bin/check-syntax.sh b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/bin/check-syntax.sh
new file mode 100755
index 0000000000..6938306b36
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/bin/check-syntax.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+PHP='/usr/bin/env php'
+RETURN=0
+
+# check PHP files
+for FILE in `find config-templates hooks lib tests -name "*.php"`; do
+    $PHP -l $FILE > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Syntax check failed for ${FILE}"
+        RETURN=`expr ${RETURN} + 1`
+    fi
+done
+
+exit $RETURN
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/composer.json
new file mode 100644
index 0000000000..6585c7601a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/composer.json
@@ -0,0 +1,42 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-smartattributes",
+    "description": "The SmartAttributes module provides additional authentication processing filters to manipulate attributes.",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "smartattributes"],
+    "license": "LGPL-3.0-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\smartattributes\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+
+        "simplesamlphp/composer-module-installer": "~1.1"
+    },
+    "require-dev": {
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "phpunit/phpunit": "~5.7"
+    },
+    "support": {
+        "issues": "https://github.com/tvdijen/simplesamlphp-module-smartattributes/issues",
+        "source": "https://github.com/tvdijen/simplesamlphp-module-smartattributes"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartID.php b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartID.php
index 00ca468eae..0b9fd78b39 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartID.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartID.php
@@ -10,6 +10,8 @@ class SmartID extends \SimpleSAML\Auth\ProcessingFilter
      * IMPORTANT: If you use the (default) attributemaps (twitter2name, facebook2name,
      * etc., be sure to comment out the entries that map xxx_targetedID to
      * eduPersonTargetedID, or there will be no way to see its origin any more.
+     *
+     * @var array
      */
     private $candidates = [
         'eduPersonTargetedID',
@@ -24,29 +26,29 @@ class SmartID extends \SimpleSAML\Auth\ProcessingFilter
     ];
 
     /**
-     * The name of the generated ID attribute.
+     * @var string The name of the generated ID attribute.
      */
     private $id_attribute = 'smart_id';
 
     /**
      * Whether to append the AuthenticatingAuthority, separated by '!'
      * This only works when SSP is used as a gateway.
+     * @var bool
      */
     private $add_authority = true;
 
     /**
      * Whether to prepend the CandidateID, separated by ':'
+     * @var bool
      */
     private $add_candidate = true;
 
+
     /**
-     * Attributes which should be added/appended.
-     *
-     * Associative array of arrays.
+     * @param array $config
+     * @param mixed $reserved
+     * @throws \Exception
      */
-    private $attributes = [];
-
-
     public function __construct($config, $reserved)
     {
         parent::__construct($config, $reserved);
@@ -82,34 +84,43 @@ public function __construct($config, $reserved)
         }
     }
 
+
+    /**
+     * @param array $attributes
+     * @param array $request
+     * @return string
+     * @throws \SimpleSAML\Error\Exception
+     */
     private function addID($attributes, $request)
     {
         $state = $request['saml:sp:State'];
         foreach ($this->candidates as $idCandidate) {
             if (isset($attributes[$idCandidate][0])) {
                 if (($this->add_authority) && (isset($state['saml:AuthenticatingAuthority'][0]))) {
-                    return ($this->add_candidate ? $idCandidate.':' : '').$attributes[$idCandidate][0].'!'.
+                    return ($this->add_candidate ? $idCandidate . ':' : '') . $attributes[$idCandidate][0] . '!' .
                         $state['saml:AuthenticatingAuthority'][0];
                 } else {
-                    return ($this->add_candidate ? $idCandidate.':' : '').$attributes[$idCandidate][0];
+                    return ($this->add_candidate ? $idCandidate . ':' : '') . $attributes[$idCandidate][0];
                 }
             }
         }
         /*
          * At this stage no usable id_candidate has been detected.
          */
-        throw new \SimpleSAML\Error\Exception('This service needs at least one of the following
-            attributes to identity users: '.implode(', ', $this->candidates).'. Unfortunately not
-            one of them was detected. Please ask your institution administrator to release one of
-            them, or try using another identity provider.');
+        throw new \SimpleSAML\Error\Exception('This service needs at least one of the following ' .
+            'attributes to identity users: '.implode(', ', $this->candidates).'. Unfortunately not '.
+            'one of them was detected. Please ask your institution administrator to release one of '.
+            'them, or try using another identity provider.');
     }
 
+
     /**
      * Apply filter to add or replace attributes.
      *
      * Add or replace existing attributes with the configured values.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
@@ -118,7 +129,7 @@ public function process(&$request)
 
         $id = $this->addID($request['Attributes'], $request);
 
-        if (isset($id)) {
+        if (!empty($id)) {
             $request['Attributes'][$this->id_attribute] = [$id];
         }
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartName.php b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartName.php
index 19a69baa6f..e7251e38bd 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartName.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/lib/Auth/Process/SmartName.php
@@ -8,17 +8,12 @@
  * @author Andreas Åkre Solberg, UNINETT AS.
  * @package SimpleSAMLphp
  */
-
 class SmartName extends \SimpleSAML\Auth\ProcessingFilter
 {
     /**
-     * Attributes which should be added/appended.
-     *
-     * Assiciative array of arrays.
+     * @param array $attributes
+     * @return string|null
      */
-    private $attributes = [];
-
-
     private function getFullName($attributes)
     {
         if (isset($attributes['displayName'])) {
@@ -32,7 +27,7 @@ private function getFullName($attributes)
         }
 
         if (isset($attributes['sn']) && isset($attributes['givenName'])) {
-            return $attributes['givenName'][0].' '.$attributes['sn'][0];
+            return $attributes['givenName'][0] . ' ' . $attributes['sn'][0];
         }
 
         if (isset($attributes['cn'])) {
@@ -57,6 +52,11 @@ private function getFullName($attributes)
         return null;
     }
 
+
+    /**
+     * @param string $userid
+     * @return string|null
+     */
     private function getLocalUser($userid)
     {
         if (strpos($userid, '@') === false) {
@@ -69,12 +69,14 @@ private function getLocalUser($userid)
         return null;
     }
 
+
     /**
      * Apply filter to add or replace attributes.
      *
      * Add or replace existing attributes with the configured values.
      *
      * @param array &$request  The current request
+     * @return void
      */
     public function process(&$request)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/phpunit.xml
new file mode 100644
index 0000000000..c0985fdd80
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/psalm.xml
new file mode 100644
index 0000000000..7da2d51b2b
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/psalm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<psalm
+    name="SimpleSAMLphp smartattributes module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/tests/bootstrap.php
new file mode 100644
index 0000000000..7a5b54ed8d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/smartattributes/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/negotiate';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/default-disable b/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/default-disable
deleted file mode 100644
index fa0bd82e2d..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/default-disable
+++ /dev/null
@@ -1,3 +0,0 @@
-This file indicates that the default state of this module
-is disabled. To enable, create a file named enable in the
-same directory as this file.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/docs/sql.md b/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/docs/sql.md
deleted file mode 100644
index 3fb33818da..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/docs/sql.md
+++ /dev/null
@@ -1,100 +0,0 @@
-`sqlauth:SQL`
-=============
-
-This is a authentication module for authenticating an user against a SQL database.
-
-
-Options
--------
-
-`dsn`
-:   The DSN which should be used to connect to the database server.
-    Check the various database drivers in the [PHP documentation](http://php.net/manual/en/pdo.drivers.php) for a description of the various DSN formats.
-
-`username`
-:   The username which should be used when connecting to the database server.
-
-
-`password`
-:   The password which should be used when connecting to the database server.
-
-`query`
-:   The SQL query which should be used to retrieve the user.
-    The parameters :username and :password are available.
-    If the username/password is incorrect, the query should return no rows.
-    The name of the columns in resultset will be used as attribute names.
-    If the query returns multiple rows, they will be merged into the attributes.
-    Duplicate values and NULL values will be removed.
-
-
-Examples
---------
-
-Database layout used in some of the examples:
-
-    CREATE TABLE users (
-      uid VARCHAR(30) NOT NULL PRIMARY KEY,
-      password TEXT NOT NULL,
-      salt TEXT NOT NULL,
-      givenName TEXT NOT NULL,
-      email TEXT NOT NULL,
-      eduPersonPrincipalName TEXT NOT NULL
-    );
-    CREATE TABLE usergroups (
-      uid VARCHAR(30) NOT NULL REFERENCES users (uid) ON DELETE CASCADE ON UPDATE CASCADE,
-      groupname VARCHAR(30) NOT NULL,
-      UNIQUE(uid, groupname)
-    );
-
-Example query - SHA256 of salt + password, with the salt stored in an independent column, MySQL server:
-
-    SELECT uid, givenName, email, eduPersonPrincipalName
-    FROM users
-    WHERE uid = :username
-    AND PASSWORD = SHA2(
-        CONCAT(
-            (SELECT salt FROM users WHERE uid = :username),
-            :password
-        ),
-        256
-    )
-
-Example query - SHA256 of salt + password, with the salt stored in an independent column. Multiple groups, MySQL server:
-
-    SELECT users.uid, givenName, email, eduPersonPrincipalName, groupname AS groups
-    FROM users LEFT JOIN usergroups ON users.uid = usergroups.username
-    WHERE users.uid = :username
-    AND PASSWORD = SHA2(
-        CONCAT(
-            (SELECT salt FROM users WHERE uid = :username),
-            :password
-        ),
-        256
-    )
-
-Example query - SHA512 of salt + password, stored as salt (32 bytes) + sha256(salt + password) in password-field, PostgreSQL server:
-
-    SELECT uid, givenName, email, eduPersonPrincipalName
-    FROM users
-    WHERE username = :username
-    AND SUBSTRING(
-        password FROM LENGTH(password) - 31
-    ) = SHA2(
-        CONCAT(
-            SUBSTRING(password FROM 1 FOR LENGTH(password) - 32),
-            :password
-        ),
-        512
-    )
-
-Security considerations
------------------------
-
-Please never store passwords in plaintext in a database. You should always hash your passwords with a secure one-way
-function like the ones in the SHA2 family. Use randomly generated salts with a length at least equal to the hash of the
-password itself. Salts should be per-password, that meaning every time a password changes, the salt must change, and
-therefore salts must be stored in the database alongside the passwords they were used for. Application-wide salts can
-be used (by just concatenating them to the input of the hash function), but should never replace per-password salts,
-used instead as an additional security measure.
-
-One way hashing algorithms like MD5 or SHA1 are considered insecure and should therefore be avoided.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/lib/Auth/Source/SQL.php b/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/lib/Auth/Source/SQL.php
deleted file mode 100644
index b820a6a3e4..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/modules/sqlauth/lib/Auth/Source/SQL.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-
-namespace SimpleSAML\Module\sqlauth\Auth\Source;
-
-/**
- * Simple SQL authentication source
- *
- * This class is an example authentication source which authenticates an user
- * against a SQL database.
- *
- * @package SimpleSAMLphp
- */
-
-class SQL extends \SimpleSAML\Module\core\Auth\UserPassBase
-{
-    /**
-     * The DSN we should connect to.
-     */
-    private $dsn;
-
-    /**
-     * The username we should connect to the database with.
-     */
-    private $username;
-
-    /**
-     * The password we should connect to the database with.
-     */
-    private $password;
-
-    /**
-     * The options that we should connect to the database with.
-     */
-    private $options;
-
-    /**
-     * The query we should use to retrieve the attributes for the user.
-     *
-     * The username and password will be available as :username and :password.
-     */
-    private $query;
-
-    /**
-     * Constructor for this authentication source.
-     *
-     * @param array $info  Information about this authentication source.
-     * @param array $config  Configuration.
-     */
-    public function __construct($info, $config)
-    {
-        assert(is_array($info));
-        assert(is_array($config));
-
-        // Call the parent constructor first, as required by the interface
-        parent::__construct($info, $config);
-
-        // Make sure that all required parameters are present.
-        foreach (['dsn', 'username', 'password', 'query'] as $param) {
-            if (!array_key_exists($param, $config)) {
-                throw new \Exception('Missing required attribute \''.$param.
-                    '\' for authentication source '.$this->authId);
-            }
-
-            if (!is_string($config[$param])) {
-                throw new \Exception('Expected parameter \''.$param.
-                    '\' for authentication source '.$this->authId.
-                    ' to be a string. Instead it was: '.
-                    var_export($config[$param], true));
-            }
-        }
-
-        $this->dsn = $config['dsn'];
-        $this->username = $config['username'];
-        $this->password = $config['password'];
-        $this->query = $config['query'];
-        if (isset($config['options'])) {
-            $this->options = $config['options'];
-        }
-    }
-
-
-    /**
-     * Create a database connection.
-     *
-     * @return \PDO  The database connection.
-     */
-    private function connect()
-    {
-        try {
-            $db = new \PDO($this->dsn, $this->username, $this->password, $this->options);
-        } catch (\PDOException $e) {
-            throw new \Exception('sqlauth:'.$this->authId.': - Failed to connect to \''.
-                $this->dsn.'\': '.$e->getMessage());
-        }
-
-        $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
-
-        $driver = explode(':', $this->dsn, 2);
-        $driver = strtolower($driver[0]);
-
-        // Driver specific initialization
-        switch ($driver) {
-            case 'mysql':
-                // Use UTF-8
-                $db->exec("SET NAMES 'utf8mb4'");
-                break;
-            case 'pgsql':
-                // Use UTF-8
-                $db->exec("SET NAMES 'UTF8'");
-                break;
-        }
-
-        return $db;
-    }
-
-
-    /**
-     * Attempt to log in using the given username and password.
-     *
-     * On a successful login, this function should return the users attributes. On failure,
-     * it should throw an exception. If the error was caused by the user entering the wrong
-     * username or password, a \SimpleSAML\Error\Error('WRONGUSERPASS') should be thrown.
-     *
-     * Note that both the username and the password are UTF-8 encoded.
-     *
-     * @param string $username  The username the user wrote.
-     * @param string $password  The password the user wrote.
-     * @return array  Associative array with the users attributes.
-     */
-    protected function login($username, $password)
-    {
-        assert(is_string($username));
-        assert(is_string($password));
-
-        $db = $this->connect();
-
-        try {
-            $sth = $db->prepare($this->query);
-        } catch (\PDOException $e) {
-            throw new \Exception('sqlauth:'.$this->authId.
-                ': - Failed to prepare query: '.$e->getMessage());
-        }
-
-        try {
-            $sth->execute(['username' => $username, 'password' => $password]);
-        } catch (\PDOException $e) {
-            throw new \Exception('sqlauth:'.$this->authId.
-                ': - Failed to execute query: '.$e->getMessage());
-        }
-
-        try {
-            $data = $sth->fetchAll(\PDO::FETCH_ASSOC);
-        } catch (\PDOException $e) {
-            throw new \Exception('sqlauth:'.$this->authId.
-                ': - Failed to fetch result set: '.$e->getMessage());
-        }
-
-        \SimpleSAML\Logger::info('sqlauth:'.$this->authId.': Got '.count($data).
-            ' rows from database');
-
-        if (count($data) === 0) {
-            // No rows returned - invalid username/password
-            \SimpleSAML\Logger::error('sqlauth:'.$this->authId.
-                ': No rows in result set. Probably wrong username/password.');
-            throw new \SimpleSAML\Error\Error('WRONGUSERPASS');
-        }
-
-        /* Extract attributes. We allow the resultset to consist of multiple rows. Attributes
-         * which are present in more than one row will become multivalued. null values and
-         * duplicate values will be skipped. All values will be converted to strings.
-         */
-        $attributes = [];
-        foreach ($data as $row) {
-            foreach ($row as $name => $value) {
-                if ($value === null) {
-                    continue;
-                }
-
-                $value = (string) $value;
-
-                if (!array_key_exists($name, $attributes)) {
-                    $attributes[$name] = [];
-                }
-
-                if (in_array($value, $attributes[$name], true)) {
-                    // Value already exists in attribute
-                    continue;
-                }
-
-                $attributes[$name][] = $value;
-            }
-        }
-
-        \SimpleSAML\Logger::info('sqlauth:'.$this->authId.': Attributes: '.
-            implode(',', array_keys($attributes)));
-
-        return $attributes;
-    }
-}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/.php_cs.dist b/vendor/simplesamlphp/simplesamlphp/modules/statistics/.php_cs.dist
new file mode 100644
index 0000000000..33467ebed8
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/.php_cs.dist
@@ -0,0 +1,16 @@
+<?php
+$finder = PhpCsFixer\Finder::create()
+    ->in([
+        __DIR__ . '/lib',
+        __DIR__ . '/tests',
+        __DIR__ . '/www',
+    ])
+;
+return PhpCsFixer\Config::create()
+    ->setRules([
+        '@PSR2' => true,
+        '@PSR4' => true,
+        '@PSR5' => true,
+    ])
+    ->setFinder($finder)
+;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/.travis.yml b/vendor/simplesamlphp/simplesamlphp/modules/statistics/.travis.yml
new file mode 100644
index 0000000000..208a6d6c78
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/.travis.yml
@@ -0,0 +1,30 @@
+sudo: required
+
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - 7.3
+
+env:
+  - SIMPLESAMLPHP_VERSION=1.17.*
+
+before_script:
+  - composer require "simplesamlphp/simplesamlphp:${SIMPLESAMLPHP_VERSION}" --no-update
+  - composer update --no-interaction
+
+script:
+  - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-php.sh
+  - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then php vendor/phpunit/phpunit/phpunit; else php vendor/phpunit/phpunit/phpunit --no-coverage; fi
+  - if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]]; then vendor/bin/psalm; fi
+
+after_success:
+  # Codecov, need to edit bash uploader for incorrect TRAVIS_PYTHON_VERSION environment variable matching, at least until codecov/codecov-bash#133 is resolved
+  - curl -s https://codecov.io/bash > .codecov
+  - sed -i -e 's/TRAVIS_.*_VERSION/^TRAVIS_.*_VERSION=/' .codecov
+  - chmod +x .codecov
+  - if [[ $TRAVIS_PHP_VERSION == "5.6" ]]; then ./.codecov -X gcov; fi
+# - if [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then bash <(curl -s https://codecov.io/bash); fi
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/LICENSE b/vendor/simplesamlphp/simplesamlphp/modules/statistics/LICENSE
new file mode 100644
index 0000000000..a345e48d04
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/LICENSE
@@ -0,0 +1,459 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/loganalyzer.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/loganalyzer.php
index 85ae093f3e..830d0d74be 100755
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/loganalyzer.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/loganalyzer.php
@@ -5,7 +5,7 @@
 $baseDir = dirname(dirname(dirname(dirname(__FILE__))));
 
 // Add library autoloader.
-require_once($baseDir.'/lib/_autoload.php');
+require_once($baseDir . '/lib/_autoload.php');
 
 // Initialize the configuration.
 $configdir = \SimpleSAML\Utils\Config::getConfigDir();
@@ -44,8 +44,8 @@
             $dryrun = true;
             break;
         default:
-            echo 'Unknown option: '.$a."\n";
-            echo 'Please run `'.$progName.' --help` for usage information.'."\n";
+            echo 'Unknown option: ' . $a . "\n";
+            echo 'Please run `' . $progName . ' --help` for usage information.' . "\n";
             exit(1);
     }
 }
@@ -62,7 +62,7 @@
 
 foreach ($results as $slot => $val) {
     foreach ($val as $sp => $no) {
-        echo $sp." ".count($no)." - ";
+        echo $sp . " " . count($no) . " - ";
     }
     echo "\n";
 }
@@ -70,8 +70,8 @@
 
 /**
  * This function prints the help output.
+ * @return void
  */
-
 function printHelp()
 {
     global $progName;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/logcleaner.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/logcleaner.php
index b160cdab27..45afa1b09d 100755
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/logcleaner.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/bin/logcleaner.php
@@ -5,7 +5,7 @@
 $baseDir = dirname(dirname(dirname(dirname(__FILE__))));
 
 // Add library autoloader.
-require_once($baseDir.'/lib/_autoload.php');
+require_once($baseDir . '/lib/_autoload.php');
 
 // Initialize the configuration.
 $configdir = \SimpleSAML\Utils\Config::getConfigDir();
@@ -52,8 +52,8 @@
             $output = $v;
             break;
         default:
-            echo 'Unknown option: '.$a."\n";
-            echo 'Please run `'.$progName.' --help` for usage information.'."\n";
+            echo 'Unknown option: ' . $a . "\n";
+            echo 'Please run `' . $progName . ' --help` for usage information.' . "\n";
             exit(1);
     }
 }
@@ -62,7 +62,7 @@
 $cleaner->dumpConfig();
 $todelete = $cleaner->clean($debug);
 
-echo "Cleaning these trackIDs: ".join(', ', $todelete)."\n";
+echo "Cleaning these trackIDs: " . join(', ', $todelete) . "\n";
 
 if (!$dryrun) {
     $cleaner->store($todelete, $output);
@@ -70,8 +70,8 @@
 
 /**
  * This function prints the help output.
+ * @return void
  */
-
 function printHelp()
 {
     global $progName;
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/codecov.yml b/vendor/simplesamlphp/simplesamlphp/modules/statistics/codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/composer.json b/vendor/simplesamlphp/simplesamlphp/modules/statistics/composer.json
new file mode 100644
index 0000000000..10ddc9c7fa
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/composer.json
@@ -0,0 +1,43 @@
+{
+    "name": "simplesamlphp/simplesamlphp-module-statistics",
+    "description": "The SimpleSAMLphp statistics module",
+    "type": "simplesamlphp-module",
+    "keywords": ["simplesamlphp", "statistics"],
+    "license": "LGPL-2.1-or-later",
+    "authors": [
+        {
+            "name": "Andreas Åkre Solberg",
+            "email": "andreas.solberg@uninett.no"
+        }
+    ],
+    "config": {
+        "preferred-install": {
+            "simplesamlphp/simplesamlphp": "source",
+            "*": "dist"
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "SimpleSAML\\Module\\statistics\\": "lib/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "SimpleSAML\\Test\\Utils\\": "vendor/simplesamlphp/simplesamlphp/tests/Utils"
+        }
+    },
+    "require": {
+        "php": ">=5.6",
+        "simplesamlphp/composer-module-installer": "~1.1",
+        "webmozart/assert": "^1.4"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~5.7",
+        "simplesamlphp/simplesamlphp": "^1.17",
+        "simplesamlphp/simplesamlphp-test-framework": "^0.0.12"
+    },
+    "support": {
+        "issues": "https://github.com/simplesamlphp/simplesamlphp-module-statistics/issues",
+        "source": "https://github.com/simplesamlphp/simplesamlphp-module-statistics"
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/config-templates/module_statistics.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/config-templates/module_statistics.php
index 9e186dc290..ccc119548d 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/config-templates/module_statistics.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/config-templates/module_statistics.php
@@ -96,7 +96,7 @@
     'statrules' => [
         'sloratio' => [
             'name'         => 'SLO to SSO ratio',
-            'descr'        => 'Comparison of the number of Single Log-Out compared to Single Sign-On.'.
+            'descr'        => 'Comparison of the number of Single Log-Out compared to Single Sign-On.' .
                 ' Graph shows how many logouts where initiated for each Single Sign-On.',
             'type'         => 'calculated',
             'presenter'    => 'statistics:Ratio',
@@ -108,7 +108,7 @@
         ],
         'ssomulti' => [
             'name'         => 'Requests per session',
-            'descr'        => 'Number of SSO request pairs exchanged between IdP and SP within the same IdP session.'.
+            'descr'        => 'Number of SSO request pairs exchanged between IdP and SP within the same IdP session.' .
                 ' A high number indicates that the session at the SP is timing out faster than at the IdP.',
             'type'         => 'calculated',
             'presenter'    => 'statistics:Ratio',
@@ -150,7 +150,7 @@
         ],
         'consent' => [
             'name'         => 'Consent',
-            'descr'        => 'Consent statistics. Everytime a user logs in to a service an entry is logged for'.
+            'descr'        => 'Consent statistics. Everytime a user logs in to a service an entry is logged for' .
                 ' one of three states: consent was found, consent was not found or consent storage was not available.',
             'action'       => 'consent',
             'col'          => 6,
@@ -161,7 +161,7 @@
         ],
         'consentresponse' => [
             'name'         => 'Consent response',
-            'descr'        => 'Consent response statistics. Everytime a user accepts consent,'.
+            'descr'        => 'Consent response statistics. Everytime a user accepts consent,' .
                 ' it is logged whether the user selected to remember the consent to next time.',
             'action'       => 'consentResponse',
             'col'          => 6,
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/dictionaries/statistics.translation.json b/vendor/simplesamlphp/simplesamlphp/modules/statistics/dictionaries/statistics.translation.json
index 1f51b38387..7a4adb1eac 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/dictionaries/statistics.translation.json
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/dictionaries/statistics.translation.json
@@ -2,11 +2,13 @@
   "link_statistics": {
     "es": "Mostrar estadísticas",
     "no": "Vis statistikker",
-    "nn": "Vis statistikkar"
+    "nn": "Vis statistikkar",
+    "ca": "Mostra les estadístiques"
   },
   "link_statistics_metadata": {
     "es": "Mostrar metadatos de las estadísticas",
     "no": "Vis metadata om statistikker",
-    "nn": "Vis metadata om statistikkar"
+    "nn": "Vis metadata om statistikkar",
+    "ca": "Mostra les estadístiques de les metadades"
   }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_configpage.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_configpage.php
index d9c1f1df78..36853ed2d1 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_configpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_configpage.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to add the statistics module to the config page.
  *
  * @param \SimpleSAML\XHTML\Template &$template The template that we should alter in this hook.
+ * @return void
  */
 function statistics_hook_configpage(\SimpleSAML\XHTML\Template &$template)
 {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_cron.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_cron.php
index a3ee4952cc..8a22028ee0 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_cron.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_cron.php
@@ -4,8 +4,8 @@
  * Hook to run a cron job.
  *
  * @param array &$croninfo  Output
+ * @return void
  */
-
 function statistics_hook_cron(&$croninfo)
 {
     assert(is_array($croninfo));
@@ -35,7 +35,7 @@ function statistics_hook_cron(&$croninfo)
             $aggregator->store($results);
         }
     } catch (\Exception $e) {
-        $message = 'Loganalyzer threw exception: '.$e->getMessage();
+        $message = 'Loganalyzer threw exception: ' . $e->getMessage();
         \SimpleSAML\Logger::warning($message);
         $croninfo['summary'][] = $message;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_frontpage.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_frontpage.php
index 2dade3b2af..268f06746c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_frontpage.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_frontpage.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to add the modinfo module to the frontpage.
  *
  * @param array &$links  The links on the frontpage, split into sections.
+ * @return void
  */
 function statistics_hook_frontpage(&$links)
 {
@@ -19,4 +21,3 @@ function statistics_hook_frontpage(&$links)
         'shorttext' => ['en' => 'Statistics metadata', 'no' => 'Statistikk metadata'],
     ];
 }
-
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_sanitycheck.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_sanitycheck.php
index 879ee3ee78..8450ffa49a 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_sanitycheck.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/hooks/hook_sanitycheck.php
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * Hook to do sanity checks
  *
  * @param array &$hookinfo  hookinfo
+ * @return void
  */
 function statistics_hook_sanitycheck(&$hookinfo)
 {
@@ -13,7 +15,7 @@ function statistics_hook_sanitycheck(&$hookinfo)
     try {
         $statconfig = \SimpleSAML\Configuration::getConfig('module_statistics.php');
     } catch (Exception $e) {
-        $hookinfo['errors'][] = '[statistics] Could not get configuration: '.$e->getMessage();
+        $hookinfo['errors'][] = '[statistics] Could not get configuration: ' . $e->getMessage();
         return;
     }
 
@@ -21,19 +23,19 @@ function statistics_hook_sanitycheck(&$hookinfo)
     $inputfile = $statconfig->getValue('inputfile');
 
     if (file_exists($statdir)) {
-        $hookinfo['info'][] = '[statistics] Statistics dir ['.$statdir.'] exists';
+        $hookinfo['info'][] = '[statistics] Statistics dir [' . $statdir . '] exists';
         if (is_writable($statdir)) {
-            $hookinfo['info'][] = '[statistics] Statistics dir ['.$statdir.'] is writable';
+            $hookinfo['info'][] = '[statistics] Statistics dir [' . $statdir . '] is writable';
         } else {
-            $hookinfo['errors'][] = '[statistics] Statistics dir ['.$statdir.'] is not writable';
+            $hookinfo['errors'][] = '[statistics] Statistics dir [' . $statdir . '] is not writable';
         }
     } else {
-        $hookinfo['errors'][] = '[statistics] Statistics dir ['.$statdir.'] does not exists';
+        $hookinfo['errors'][] = '[statistics] Statistics dir [' . $statdir . '] does not exist';
     }
 
     if (file_exists($inputfile)) {
-        $hookinfo['info'][] = '[statistics] Input file ['.$inputfile.'] exists';
+        $hookinfo['info'][] = '[statistics] Input file [' . $inputfile . '] exists';
     } else {
-        $hookinfo['errors'][] = '[statistics] Input file ['.$inputfile.'] does not exists';
+        $hookinfo['errors'][] = '[statistics] Input file [' . $inputfile . '] does not exist';
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/AccessCheck.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/AccessCheck.php
index 750a5d0526..fb2fbe0cdc 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/AccessCheck.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/AccessCheck.php
@@ -2,20 +2,27 @@
 
 namespace SimpleSAML\Module\statistics;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Logger;
+use SimpleSAML\Utils\Auth;
+
 /**
  * Class implementing the access checker function for the statistics module.
  *
  * @package SimpleSAMLphp
  */
-
 class AccessCheck
 {
     /**
      * Check that the user has access to the statistics.
-     *
      * If the user doesn't have access, send the user to the login page.
+     *
+     * @param \SimpleSAML\Configuration $statconfig
+     * @return void
+     * @throws \Exception
+     * @throws \SimpleSAML\Error\Exception
      */
-    public static function checkAccess(\SimpleSAML\Configuration $statconfig)
+    public static function checkAccess(Configuration $statconfig)
     {
         $protected = $statconfig->getBoolean('protected', false);
         $authsource = $statconfig->getString('auth', null);
@@ -31,15 +38,15 @@ public static function checkAccess(\SimpleSAML\Configuration $statconfig)
             return;
         }
 
-        if (\SimpleSAML\Utils\Auth::isAdmin()) {
+        if (Auth::isAdmin()) {
             // User logged in as admin. OK.
-            \SimpleSAML\Logger::debug('Statistics auth - logged in as admin, access granted');
+            Logger::debug('Statistics auth - logged in as admin, access granted');
             return;
         }
 
         if (!isset($authsource)) {
             // If authsource is not defined, init admin login.
-            \SimpleSAML\Utils\Auth::requireAdmin();
+            Auth::requireAdmin();
         }
 
         // We are using an authsource for login.
@@ -48,7 +55,7 @@ public static function checkAccess(\SimpleSAML\Configuration $statconfig)
         $as->requireAuth();
 
         // User logged in with auth source.
-        \SimpleSAML\Logger::debug('Statistics auth - valid login with auth source ['.$authsource.']');
+        Logger::debug('Statistics auth - valid login with auth source [' . $authsource . ']');
 
         // Retrieving attributes
         $attributes = $as->getAttributes();
@@ -61,27 +68,27 @@ public static function checkAccess(\SimpleSAML\Configuration $statconfig)
 
             // Check if userid is allowed access..
             if (in_array($attributes[$useridattr][0], $allowedusers, true)) {
-                \SimpleSAML\Logger::debug(
-                    'Statistics auth - User granted access by user ID ['.$attributes[$useridattr][0].']'
+                Logger::debug(
+                    'Statistics auth - User granted access by user ID [' . $attributes[$useridattr][0] . ']'
                 );
                 return;
             }
-            \SimpleSAML\Logger::debug(
-                'Statistics auth - User denied access by user ID ['.$attributes[$useridattr][0].']'
+            Logger::debug(
+                'Statistics auth - User denied access by user ID [' . $attributes[$useridattr][0] . ']'
             );
         } else {
-            \SimpleSAML\Logger::debug('Statistics auth - no allowedUsers list.');
+            Logger::debug('Statistics auth - no allowedUsers list.');
         }
 
         if (!is_null($acl)) {
             $acl = new \SimpleSAML\Module\core\ACL($acl);
             if ($acl->allows($attributes)) {
-                \SimpleSAML\Logger::debug('Statistics auth - allowed access by ACL.');
+                Logger::debug('Statistics auth - allowed access by ACL.');
                 return;
             }
-            \SimpleSAML\Logger::debug('Statistics auth - denied access by ACL.');
+            Logger::debug('Statistics auth - denied access by ACL.');
         } else {
-            \SimpleSAML\Logger::debug('Statistics auth - no ACL configured.');
+            Logger::debug('Statistics auth - no ACL configured.');
         }
         throw new \SimpleSAML\Error\Exception('Access denied to the current user.');
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Aggregator.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Aggregator.php
index 966012d639..c69090d0bb 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Aggregator.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Aggregator.php
@@ -2,56 +2,89 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+use SimpleSAML\Configuration;
+
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class Aggregator
 {
+    /** @var \SimpleSAML\Configuration */
     private $statconfig;
+
+    /** @var string */
     private $statdir;
+
+    /** @var string */
     private $inputfile;
+
+    /** @var array */
     private $statrules;
+
+    /** @var int */
     private $offset;
-    private $metadata;
+
+    /** @var array|null */
+    private $metadata = null;
+
+    /** @var bool */
     private $fromcmdline;
+
+    /** @var int */
     private $starttime;
+
+    /** @var array */
     private $timeres;
 
+
     /**
      * Constructor
+     *
+     * @param bool $fromcmdline
      */
     public function __construct($fromcmdline = false)
     {
         $this->fromcmdline = $fromcmdline;
-        $this->statconfig = \SimpleSAML\Configuration::getConfig('module_statistics.php');
+        $this->statconfig = Configuration::getConfig('module_statistics.php');
 
         $this->statdir = $this->statconfig->getValue('statdir');
         $this->inputfile = $this->statconfig->getValue('inputfile');
         $this->statrules = $this->statconfig->getValue('statrules');
         $this->timeres = $this->statconfig->getValue('timeres');
         $this->offset = $this->statconfig->getValue('offset', 0);
-        $this->metadata = null;
 
         $this->starttime = time();
     }
 
+
+    /**
+     * @return void
+     */
     public function dumpConfig()
     {
-        echo 'Statistics directory   : '.$this->statdir."\n";
-        echo 'Input file             : '.$this->inputfile."\n";
-        echo 'Offset                 : '.$this->offset."\n";
+        echo 'Statistics directory   : ' . $this->statdir . "\n";
+        echo 'Input file             : ' . $this->inputfile . "\n";
+        echo 'Offset                 : ' . $this->offset . "\n";
     }
 
+
+    /**
+     * @return void
+     */
     public function debugInfo()
     {
-        echo 'Memory usage           : '.number_format(memory_get_usage() / 1048576, 2)." MB\n"; // 1024*1024=1048576
+        // 1024*1024=1048576
+        echo 'Memory usage           : ' . number_format(memory_get_usage() / 1048576, 2) . " MB\n";
     }
 
+
+    /**
+     * @return void
+     */
     public function loadMetadata()
     {
-        $filename = $this->statdir.'/.stat.metadata';
+        $filename = $this->statdir . '/.stat.metadata';
         $metadata = null;
         if (file_exists($filename)) {
             $metadata = unserialize(file_get_contents($filename));
@@ -59,37 +92,51 @@ public function loadMetadata()
         $this->metadata = $metadata;
     }
 
+
+    /**
+     * @return array|null
+     */
     public function getMetadata()
     {
         return $this->metadata;
     }
 
+
+    /**
+     * @return void
+     */
     public function saveMetadata()
     {
         $this->metadata['time'] = time() - $this->starttime;
         $this->metadata['memory'] = memory_get_usage();
         $this->metadata['lastrun'] = time();
 
-        $filename = $this->statdir.'/.stat.metadata';
+        $filename = $this->statdir . '/.stat.metadata';
         file_put_contents($filename, serialize($this->metadata), LOCK_EX);
     }
 
+
+    /**
+     * @param bool $debug
+     * @return array
+     * @throws \Exception
+     */
     public function aggregate($debug = false)
     {
         $this->loadMetadata();
 
         if (!is_dir($this->statdir)) {
-            throw new \Exception('Statistics module: output dir do not exists ['.$this->statdir.']');
+            throw new \Exception('Statistics module: output dir do not exists [' . $this->statdir . ']');
         }
 
         if (!file_exists($this->inputfile)) {
-            throw new \Exception('Statistics module: input file do not exists ['.$this->inputfile.']');
+            throw new \Exception('Statistics module: input file do not exists [' . $this->inputfile . ']');
         }
 
         $file = fopen($this->inputfile, 'r');
 
         if ($file === false) {
-            throw new \Exception('Statistics module: unable to open file ['.$this->inputfile.']');
+            throw new \Exception('Statistics module: unable to open file [' . $this->inputfile . ']');
         }
 
         $logparser = new LogParser(
@@ -134,15 +181,17 @@ public function aggregate($debug = false)
             $action = trim($content[5]);
 
             if ($this->fromcmdline && ($i % 10000) == 0) {
-                echo "Read line ".$i."\n";
+                echo "Read line " . $i . "\n";
             }
 
             if ($debug) {
                 echo "----------------------------------------\n";
-                echo 'Log line: '.$logline."\n";
-                echo 'Date parse ['.substr($logline, 0, $this->statconfig->getValue('datelength', 15)).
-                    '] to ['.date(DATE_RFC822, $epoch).']'."\n";
-                echo htmlentities(print_r($content, true));
+                echo 'Log line: ' . $logline . "\n";
+                echo 'Date parse [' . substr($logline, 0, $this->statconfig->getValue('datelength', 15)) .
+                    '] to [' . date(DATE_RFC822, $epoch) . ']' . "\n";
+                /** @var string $ret */
+                $ret = print_r($content, true);
+                echo htmlentities($ret);
                 if ($i >= 13) {
                     exit;
                 }
@@ -210,6 +259,12 @@ public function aggregate($debug = false)
         return $results;
     }
 
+
+    /**
+     * @param array $content
+     * @param mixed $colrule
+     * @return string
+     */
     private static function getDifCol($content, $colrule)
     {
         if (is_int($colrule)) {
@@ -225,6 +280,12 @@ private static function getDifCol($content, $colrule)
         }
     }
 
+
+    /**
+     * @param mixed $previous
+     * @param array $newdata
+     * @return array
+     */
     private function cummulateData($previous, $newdata)
     {
         $dataset = [];
@@ -244,6 +305,11 @@ private function cummulateData($previous, $newdata)
         return $dataset;
     }
 
+
+    /**
+     * @param array $results
+     * @return void
+     */
     public function store($results)
     {
         $datehandler = [
@@ -295,7 +361,7 @@ public function store($results)
                         }
                     }
 
-                    $filename = $this->statdir.'/'.$rulename.'-'.$tres.'-'.$fileno.'.stat';
+                    $filename = $this->statdir . '/' . $rulename . '-' . $tres . '-' . $fileno . '.stat';
                     if (file_exists($filename)) {
                         $previousData = unserialize(file_get_contents($filename));
                         $filledresult = $this->cummulateData($previousData, $filledresult);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandler.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandler.php
index ae9807df9e..032ff4ce7c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandler.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandler.php
@@ -2,25 +2,31 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class DateHandler
 {
+    /** @var int */
     protected $offset;
 
+
     /**
      * Constructor
      *
-     * @param array $offset Date offset
+     * @param int $offset Date offset
      */
     public function __construct($offset)
     {
         $this->offset = $offset;
     }
 
+
+    /**
+     * @param int $timestamp
+     * @return int
+     */
     protected function getDST($timestamp)
     {
         if (idate('I', $timestamp)) {
@@ -29,12 +35,24 @@ protected function getDST($timestamp)
         return 0;
     }
 
+
+    /**
+     * @param int $epoch
+     * @param int $slotsize
+     * @return float
+     */
     public function toSlot($epoch, $slotsize)
     {
         $dst = $this->getDST($epoch);
         return floor(($epoch + $this->offset + $dst) / $slotsize);
     }
 
+
+    /**
+     * @param int $slot
+     * @param int $slotsize
+     * @return int
+     */
     public function fromSlot($slot, $slotsize)
     {
         $temp = $slot * $slotsize - $this->offset;
@@ -42,16 +60,37 @@ public function fromSlot($slot, $slotsize)
         return $slot * $slotsize - $this->offset - $dst;
     }
 
+
+    /**
+     * @param int $epoch
+     * @param string $dateformat
+     * @return string
+     */
     public function prettyDateEpoch($epoch, $dateformat)
     {
         return date($dateformat, $epoch);
     }
 
+
+    /**
+     * @param int $slot
+     * @param int $slotsize
+     * @param string $dateformat
+     * @return string
+     */
     public function prettyDateSlot($slot, $slotsize, $dateformat)
     {
         return $this->prettyDateEpoch($this->fromSlot($slot, $slotsize), $dateformat);
     }
 
+
+    /**
+     * @param int $from
+     * @param int $to
+     * @param int $slotsize
+     * @param string $dateformat
+     * @return string
+     */
     public function prettyHeader($from, $to, $slotsize, $dateformat)
     {
         $text = $this->prettyDateSlot($from, $slotsize, $dateformat);
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandlerMonth.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandlerMonth.php
index 058795f57b..f0168cc43a 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandlerMonth.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/DateHandlerMonth.php
@@ -2,11 +2,10 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class DateHandlerMonth extends DateHandler
 {
     /**
@@ -19,6 +18,12 @@ public function __construct($offset)
         $this->offset = $offset;
     }
 
+
+    /**
+     * @param int $epoch
+     * @param int $slotsize
+     * @return int
+     */
     public function toSlot($epoch, $slotsize)
     {
         $dsttime = $this->getDST($epoch) + $epoch;
@@ -27,6 +32,12 @@ public function toSlot($epoch, $slotsize)
         return $slot;
     }
 
+
+    /**
+     * @param int $slot
+     * @param int $slotsize
+     * @return int
+     */
     public function fromSlot($slot, $slotsize)
     {
         $month = ($slot % 12);
@@ -34,10 +45,18 @@ public function fromSlot($slot, $slotsize)
         return mktime(0, 0, 0, $month + 1, 1, $year);
     }
 
+
+    /**
+     * @param int $from
+     * @param int $to
+     * @param int $slotsize
+     * @param string $dateformat
+     * @return string
+     */
     public function prettyHeader($from, $to, $slotsize, $dateformat)
     {
         $month = ($from % 12) + 1;
         $year = 2000 + intval(floor($from / 12));
-        return $year.'-'.$month;
+        return $year . '-' . $month;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Graph/GoogleCharts.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Graph/GoogleCharts.php
index 129639de50..15d5223f91 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Graph/GoogleCharts.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Graph/GoogleCharts.php
@@ -2,26 +2,22 @@
 
 namespace SimpleSAML\Module\statistics\Graph;
 
-/*
+/**
  * \SimpleSAML\Module\statistics\Graph\GoogleCharts will help you to create a Google Chart
  * using the Google Charts API.
  *
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class GoogleCharts
 {
-    /**
-     * @var integer
-     */
+    /** @var integer */
     private $x;
 
-    /**
-     * @var integer
-     */
+    /** @var integer */
     private $y;
 
+
     /**
      * Constructor.
      *
@@ -36,27 +32,41 @@ public function __construct($x = 800, $y = 350)
         $this->y = $y;
     }
 
-    private function encodeaxis($axis)
+
+    /**
+     * @param array $axis
+     * @return string
+     */
+    private function encodeaxis(array $axis)
     {
         return join('|', $axis);
     }
 
-    // t:10.0,58.0,95.0
-    private function encodedata($datasets)
+    /**
+     * t:10.0,58.0,95.0
+     * @param array $datasets
+     * @return string
+     */
+    private function encodedata(array $datasets)
     {
         $setstr = [];
         foreach ($datasets as $dataset) {
             $setstr[] = self::extEncode($dataset);
         }
-        return 'e:'.join(',', $setstr);
+        return 'e:' . join(',', $setstr);
     }
 
-    public static function extEncode($values) // $max = 4095, $min = 0
+
+    /**
+     * @param array $values
+     * @return string
+     */
+    public static function extEncode(array $values) // $max = 4095, $min = 0
     {
         $extended_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';
         $chardata = '';
         $delta = 4095;
-        $size = (strlen($extended_table));
+        $size = strlen($extended_table);
 
         foreach ($values as $k => $v) {
             if ($v >= 0 && $v <= 100) {
@@ -70,65 +80,74 @@ public static function extEncode($values) // $max = 4095, $min = 0
         return $chardata;
     }
 
+
     /**
      * Generate a Google Charts URL which points to a generated image.
      * More documentation on Google Charts here:
      *   http://code.google.com/apis/chart/
      *
-     * @param string $axis        Axis
-     * @param string $axpis       Axis positions
+     * @param array $axis        Axis
+     * @param array $axispos     Axis positions
      * @param array $datasets    Datasets values
-     * @param integer $max         Max value. Will be the topmost value on the Y-axis.
+     * @param array $maxes       Max value. Will be the topmost value on the Y-axis.
+     * @return string
      */
-    public function show($axis, $axispos, $datasets, $maxes)
+    public function show(array $axis, array $axispos, array $datasets, array $maxes)
     {
-        $labeld = '&chxt=x,y'.'&chxr=0,0,1|1,0,'.$maxes[0];
+        $labeld = '&chxt=x,y' . '&chxr=0,0,1|1,0,' . $maxes[0];
         if (count($datasets) > 1) {
             if (count($datasets) !== count($maxes)) {
                 throw new \Exception('Incorrect number of max calculations for graph plotting.');
             }
-            $labeld = '&chxt=x,y,r'.'&chxr=0,0,1|1,0,'.$maxes[0].'|2,0,'.$maxes[1];
+            $labeld = '&chxt=x,y,r' . '&chxr=0,0,1|1,0,' . $maxes[0] . '|2,0,' . $maxes[1];
         }
 
-        $url = 'https://chart.apis.google.com/chart?'.
+        $url = 'https://chart.apis.google.com/chart?' .
             // Dimension of graph. Default is 800x350
-            'chs='.$this->x.'x'.$this->y.
+            'chs=' . $this->x . 'x' . $this->y .
 
             // Dateset values
-            '&chd='.$this->encodedata($datasets).
+            '&chd=' . $this->encodedata($datasets) .
 
             // Fill area...
-            '&chco=ff5c00,cca600'.
-            '&chls=1,1,0|1,6,3'.
+            '&chco=ff5c00,cca600' .
+            '&chls=1,1,0|1,6,3' .
 
             // chart type is linechart
-            '&cht=lc'.
-            $labeld.
-            '&chxl=0:|'.$this->encodeaxis($axis).#.$'|1:||top'.
-            '&chxp=0,'.join(',', $axispos).
-            '&chg='.(2400 / (count($datasets[0]) - 1)).',-1,3,3'; // lines
+            '&cht=lc' .
+            $labeld .
+            '&chxl=0:|' . $this->encodeaxis($axis) . #.$'|1:||top' .
+            '&chxp=0,' . join(',', $axispos) .
+            '&chg=' . (2400 / (count($datasets[0]) - 1)) . ',-1,3,3'; // lines
 
         return $url;
     }
 
-    public function showPie($axis, $datasets)
+
+    /**
+     * @param array $axis
+     * @param array $datasets
+     * @return string
+     */
+    public function showPie(array $axis, array $datasets)
     {
-        $url = 'https://chart.apis.google.com/chart?'.
+        $url = 'https://chart.apis.google.com/chart?' .
 
         // Dimension of graph. Default is 800x350
-        'chs='.$this->x.'x'.$this->y.
+        'chs=' . $this->x . 'x' . $this->y .
 
         // Dateset values.
-        '&chd='.$this->encodedata([$datasets]).
+        '&chd=' . $this->encodedata([$datasets]) .
 
         // chart type is linechart
-        '&cht=p'.
+        '&cht=p' .
 
-        '&chl='.$this->encodeaxis($axis);
+        '&chl=' . $this->encodeaxis($axis);
 
         return $url;
     }
 
+
     /**
      * Takes a input value, and generates a value that suits better as a max
      * value on the Y-axis. In example 37.6 will not make a good max value, instead
@@ -145,7 +164,8 @@ public function showPie($axis, $datasets)
      *      }
      * </code>
      *
-     * @param integer $max    Input value.
+     * @param int $max    Input value.
+     * @return int
      */
     public static function roof($max)
     {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogCleaner.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogCleaner.php
index eafb501904..04ce2da407 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogCleaner.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogCleaner.php
@@ -2,25 +2,38 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+use SimpleSAML\Configuration;
+
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class LogCleaner
 {
+    /** @var \SimpleSAML\Configuration */
     private $statconfig;
+
+    /** @var string */
     private $statdir;
+
+    /** @var string */
     private $inputfile;
+
+    /** @var array */
     private $statrules;
+
+    /** @var int */
     private $offset;
 
+
     /**
      * Constructor
+     *
+     * @param string|null $inputfile
      */
     public function __construct($inputfile = null)
     {
-        $this->statconfig = \SimpleSAML\Configuration::getConfig('module_statistics.php');
+        $this->statconfig = Configuration::getConfig('module_statistics.php');
 
         $this->statdir = $this->statconfig->getValue('statdir');
         $this->inputfile = $this->statconfig->getValue('inputfile');
@@ -32,29 +45,31 @@ public function __construct($inputfile = null)
         }
     }
 
-    /*
+
+    /**
      * @return void
      */
     public function dumpConfig()
     {
-        echo 'Statistics directory   : '.$this->statdir."\n";
-        echo 'Input file             : '.$this->inputfile."\n";
-        echo 'Offset                 : '.$this->offset."\n";
+        echo 'Statistics directory   : ' . $this->statdir . "\n";
+        echo 'Input file             : ' . $this->inputfile . "\n";
+        echo 'Offset                 : ' . $this->offset . "\n";
     }
 
 
-    /*
+    /**
      * @param bool $debug
      * @return array
+     * @throws \Exception
      */
     public function clean($debug = false)
     {
         if (!is_dir($this->statdir)) {
-            throw new \Exception('Statistics module: output dir do not exists ['.$this->statdir.']');
+            throw new \Exception('Statistics module: output dir do not exists [' . $this->statdir . ']');
         }
 
         if (!file_exists($this->inputfile)) {
-            throw new \Exception('Statistics module: input file do not exists ['.$this->inputfile.']');
+            throw new \Exception('Statistics module: input file do not exists [' . $this->inputfile . ']');
         }
 
         $file = fopen($this->inputfile, 'r');
@@ -83,7 +98,7 @@ public function clean($debug = false)
             $content = $logparser->parseContent($logline);
 
             if (($i % 10000) == 0) {
-                echo "Read line ".$i."\n";
+                echo "Read line " . $i . "\n";
             }
 
             $trackid = $content[4];
@@ -95,10 +110,12 @@ public function clean($debug = false)
 
             if ($debug) {
                 echo "----------------------------------------\n";
-                echo 'Log line: '.$logline."\n";
-                echo 'Date parse ['.substr($logline, 0, $this->statconfig->getValue('datelength', 15)).
-                    '] to ['.date(DATE_RFC822, $epoch).']'."\n";
-                echo htmlentities(print_r($content, true));
+                echo 'Log line: ' . $logline . "\n";
+                echo 'Date parse [' . substr($logline, 0, $this->statconfig->getValue('datelength', 15)) .
+                    '] to [' . date(DATE_RFC822, $epoch) . ']' . "\n";
+                /** @var string $ret */
+                $ret = print_r($content, true);
+                echo htmlentities($ret);
                 if ($i >= 13) {
                     exit;
                 }
@@ -125,21 +142,22 @@ public function clean($debug = false)
     }
 
 
-    /*
+    /**
      * @param array $todelete
      * @param string $outputfile
      * @return void
+     * @throws \Exceeption
      */
-    public function store($todelete, $outputfile)
+    public function store(array $todelete, $outputfile)
     {
-        echo "Preparing to delete [".count($todelete)."] trackids\n";
+        echo "Preparing to delete [" . count($todelete) . "] trackids\n";
 
         if (!is_dir($this->statdir)) {
-            throw new \Exception('Statistics module: output dir do not exists ['.$this->statdir.']');
+            throw new \Exception('Statistics module: output dir do not exists [' . $this->statdir . ']');
         }
 
         if (!file_exists($this->inputfile)) {
-            throw new \Exception('Statistics module: input file do not exists ['.$this->inputfile.']');
+            throw new \Exception('Statistics module: input file do not exists [' . $this->inputfile . ']');
         }
 
         $file = fopen($this->inputfile, 'r');
@@ -171,7 +189,7 @@ public function store($todelete, $outputfile)
             $content = $logparser->parseContent($logline);
 
             if (($i % 10000) == 0) {
-                echo "Read line ".$i."\n";
+                echo "Read line " . $i . "\n";
             }
 
             $trackid = $content[4];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogParser.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogParser.php
index 0516b7f249..aeb4fa646c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogParser.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/LogParser.php
@@ -2,28 +2,22 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class LogParser
 {
-    /**
-     * @var integer
-     */
+    /** @var integer */
     private $datestart;
 
-    /**
-     * @var integer
-     */
+    /** @var integer */
     private $datelength;
 
-    /**
-     * @var integer
-     */
+    /** @var integer */
     private $offset;
 
+
     /**
      * Constructor
      *
@@ -47,9 +41,8 @@ public function __construct($datestart, $datelength, $offset)
     public function parseEpoch($line)
     {
         $epoch = strtotime(substr($line, 0, $this->datelength));
-        if ($epoch > time() + 2678400) {
-            // 60 * 60 * 24 * 31 = 2678400
-            /*
+        if ($epoch > time() + 2678400) { // 60 * 60 * 24 * 31 = 2678400
+            /**
              * More than a month in the future - probably caused by
              * the log files missing the year.
              * We will therefore subtrackt one year.
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/RatioDataset.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/RatioDataset.php
index 5449a3fd17..810dfcd536 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/RatioDataset.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/RatioDataset.php
@@ -2,13 +2,32 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+use SimpleSAML\Configuration;
+
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class RatioDataset extends StatDataset
 {
+    /**
+     * Constructor
+     *
+     * @param \SimpleSAML\Configuration $statconfig
+     * @param \SimpleSAML\Configuration $ruleconfig
+     * @param string $ruleid
+     * @param string $timeres
+     * @param int $fileslot
+     */
+    public function __construct(Configuration $statconfig, Configuration $ruleconfig, $ruleid, $timeres, $fileslot)
+    {
+        parent::__construct($statconfig, $ruleconfig, $ruleid, $timeres, $fileslot);
+    }
+
+
+    /**
+     * @return void
+     */
     public function aggregateSummary()
     {
         /**
@@ -42,7 +61,13 @@ public function aggregateSummary()
         $this->summary = array_reverse($this->summary, true);
     }
 
-    private function ag($k, $a)
+
+    /**
+     * @param string $k
+     * @param array $a
+     * @return int
+     */
+    private function ag($k, array $a)
     {
         if (array_key_exists($k, $a)) {
             return $a[$k];
@@ -50,6 +75,12 @@ private function ag($k, $a)
         return 0;
     }
 
+
+    /**
+     * @param int $v1
+     * @param int $v2
+     * @return int|float
+     */
     private function divide($v1, $v2)
     {
         if ($v2 == 0) {
@@ -58,7 +89,13 @@ private function divide($v1, $v2)
         return ($v1 / $v2);
     }
 
-    public function combine($result1, $result2)
+
+    /**
+     * @param array $result1
+     * @param array $result2
+     * @return array
+     */
+    public function combine(array $result1, array $result2)
     {
         $combined = [];
 
@@ -74,8 +111,12 @@ public function combine($result1, $result2)
         return $combined;
     }
 
+
+    /**
+     * @return array
+     */
     public function getPieData()
     {
-        return null;
+        return [];
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Ruleset.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Ruleset.php
index 935bad407d..d392fdacf2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Ruleset.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Ruleset.php
@@ -2,27 +2,42 @@
 
 namespace SimpleSAML\Module\statistics;
 
-/*
+use SimpleSAML\Configuration;
+
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class Ruleset
 {
+    /** \SimpleSAML\Configuration */
     private $statconfig;
+
+    /** @var array */
     private $availrulenames;
+
+    /** @var array */
     private $availrules;
+
+    /** @var array */
     private $available;
 
+
     /**
      * Constructor
+     *
+     * @param \SimpleSAML\Configuration $statconfig
      */
-    public function __construct($statconfig)
+    public function __construct(Configuration $statconfig)
     {
         $this->statconfig = $statconfig;
         $this->init();
     }
 
+
+    /**
+     * @return void
+     */
     private function init()
     {
         $statdir = $this->statconfig->getValue('statdir');
@@ -33,7 +48,7 @@ private function init()
          * Walk through file lists, and get available [rule][fileslot]...
          */
         if (!is_dir($statdir)) {
-            throw new \Exception('Statisics output directory ['.$statdir.'] does not exists.');
+            throw new \Exception('Statisics output directory [' . $statdir . '] does not exist.');
         }
         $filelist = scandir($statdir);
         $this->available = [];
@@ -47,10 +62,10 @@ private function init()
             }
         }
         if (empty($this->available)) {
-            throw new \Exception('No aggregated statistics files found in ['.$statdir.']');
+            throw new \Exception('No aggregated statistics files found in [' . $statdir . ']');
         }
 
-        /*
+        /**
          * Create array with information about available rules..
          */
         $this->availrules = array_keys($statrules);
@@ -61,18 +76,30 @@ private function init()
         $this->availrulenames = $available_rules;
     }
 
+
+    /**
+     * @return array
+     */
     public function availableRules()
     {
         return $this->availrules;
     }
 
+
+    /**
+     * @return array
+     */
     public function availableRulesNames()
     {
         return $this->availrulenames;
     }
 
+
     /**
      * Resolve which rule is selected. Taking user preference and checks if it exists.
+     *
+     * @param string|null $preferRule
+     * @return string|null
      */
     private function resolveSelectedRule($preferRule = null)
     {
@@ -85,7 +112,12 @@ private function resolveSelectedRule($preferRule = null)
         return $rule;
     }
 
-    public function getRule($preferRule)
+
+    /**
+     * @param string|null $preferRule
+     * @return \SimpleSAML\Module\statistics\Statistics\Rulesets\BaseRule
+     */
+    public function getRule($preferRule = null)
     {
         $rule = $this->resolveSelectedRule($preferRule);
         $statrulesConfig = $this->statconfig->getConfigItem('statrules');
@@ -95,7 +127,11 @@ public function getRule($preferRule)
             $statruleConfig->getValue('presenter', 'statistics:BaseRule'),
             'Statistics\Rulesets'
         );
+
+        /** @psalm-suppress InvalidStringClass */
         $statrule = new $presenterClass($this->statconfig, $statruleConfig, $rule, $this->available);
+
+        /** @var \SimpleSAML\Module\statistics\Statistics\Rulesets\BaseRule $statrule */
         return $statrule;
     }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatDataset.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatDataset.php
index 6868d02377..1351aa3a3b 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatDataset.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatDataset.php
@@ -2,37 +2,65 @@
 
 namespace SimpleSAML\Module\statistics;
 
+use SimpleSAML\Configuration;
+use SimpleSAML\Module;
+use SimpleSAML\Utils\Arrays;
+use SimpleSAML\XHTML\Template;
+
 /**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class StatDataset
 {
+    /** @var \SimpleSAML\Configuration */
     protected $statconfig;
+
+    /** @var \SimpleSAML\Configuration */
     protected $ruleconfig;
+
+    /** @var \SimpleSAML\Configuration */
     protected $timeresconfig;
+
+    /** @var string */
     protected $ruleid;
 
+    /** @var int */
     protected $fileslot;
+
+    /** @var string */
     protected $timeres;
 
+    /** @var string */
     protected $delimiter;
+
+    /** @var array */
     protected $results;
+
+    /** @var array */
     protected $summary;
+
+    /** @var int */
     protected $max;
 
+    /** @var \SimpleSAML\Module\statistics\DateHandler */
     protected $datehandlerFile;
+
+    /** @var \SimpleSAML\Module\statistics\DateHandler */
     protected $datehandlerTick;
 
 
     /**
      * Constructor
+     *
+     * @param \SimpleSAML\Configuration $statconfig
+     * @param \SimpleSAML\Configuration $ruleconfig
+     * @param string $ruleid
+     * @param string $timeres
+     * @param int $fileslot
      */
-    public function __construct($statconfig, $ruleconfig, $ruleid, $timeres, $fileslot)
+    public function __construct(Configuration $statconfig, Configuration $ruleconfig, $ruleid, $timeres, $fileslot)
     {
-        assert($statconfig instanceof \SimpleSAML\Configuration);
-        assert($ruleconfig instanceof \SimpleSAML\Configuration);
         $this->statconfig = $statconfig;
         $this->ruleconfig = $ruleconfig;
 
@@ -45,6 +73,8 @@ public function __construct($statconfig, $ruleconfig, $ruleid, $timeres, $filesl
 
         $this->delimiter = '_';
         $this->max = 0;
+        $this->results = [];
+        $this->summary = [];
 
         $this->datehandlerTick = new DateHandler($this->statconfig->getValue('offset', 0));
         if ($this->timeresconfig->getValue('customDateHandler', 'default') === 'month') {
@@ -56,16 +86,29 @@ public function __construct($statconfig, $ruleconfig, $ruleid, $timeres, $filesl
         $this->loadData();
     }
 
+
+    /**
+     * @return int
+     */
     public function getFileSlot()
     {
         return $this->fileslot;
     }
 
+
+    /**
+     * @return string
+     */
     public function getTimeRes()
     {
         return $this->timeres;
     }
 
+
+    /**
+     * @param string $delimiter
+     * @return void
+     */
     public function setDelimiter($delimiter = '_')
     {
         if (empty($delimiter)) {
@@ -74,6 +117,10 @@ public function setDelimiter($delimiter = '_')
         $this->delimiter = $delimiter;
     }
 
+
+    /**
+     * @return string|null
+     */
     public function getDelimiter()
     {
         if ($this->delimiter === '_') {
@@ -82,6 +129,10 @@ public function getDelimiter()
         return $this->delimiter;
     }
 
+
+    /**
+     * @return void
+     */
     public function calculateMax()
     {
         $maxvalue = 0;
@@ -94,6 +145,10 @@ public function calculateMax()
         $this->max = Graph\GoogleCharts::roof($maxvalue);
     }
 
+
+    /**
+     * @return array
+     */
     public function getDebugData()
     {
         $debugdata = [];
@@ -110,6 +165,10 @@ public function getDebugData()
         return $debugdata;
     }
 
+
+    /**
+     * @return void
+     */
     public function aggregateSummary()
     {
         // aggregate summary table from dataset. To be used in the table view
@@ -127,6 +186,10 @@ public function aggregateSummary()
         $this->summary = array_reverse($this->summary, true);
     }
 
+
+    /**
+     * @return array
+     */
     public function getTopDelimiters()
     {
         // create a list of delimiter keys that has the highest total summary in this period
@@ -144,6 +207,10 @@ public function getTopDelimiters()
         return $topdelimiters;
     }
 
+
+    /**
+     * @return array
+     */
     public function availDelimiters()
     {
         $availDelimiters = [];
@@ -153,6 +220,10 @@ public function availDelimiters()
         return array_keys($availDelimiters);
     }
 
+
+    /**
+     * @return array
+     */
     public function getPieData()
     {
         $piedata = [];
@@ -167,21 +238,37 @@ public function getPieData()
         return $piedata;
     }
 
+
+    /**
+     * @return int
+     */
     public function getMax()
     {
         return $this->max;
     }
 
+
+    /**
+     * @return array
+     */
     public function getSummary()
     {
         return $this->summary;
     }
 
+
+    /**
+     * @return array
+     */
     public function getResults()
     {
         return $this->results;
     }
 
+
+    /**
+     * @return array
+     */
     public function getAxis()
     {
         $slotsize = $this->timeresconfig->getValue('slot');
@@ -195,11 +282,14 @@ public function getAxis()
         $i = 0;
 
         foreach ($this->results as $slot => $res) {
+            $slot = intval($slot);
+
             // check if there should be an axis here...
             if ($slot % $axislabelint == 0) {
                 $axis[] = $this->datehandlerTick->prettyDateSlot($slot, $slotsize, $dateformat_intra);
                 $axispos[] = (($i) / ($xentries - 1));
             }
+
             $lastslot = $slot;
             $i++;
         }
@@ -209,8 +299,10 @@ public function getAxis()
         return ['axis' => $axis, 'axispos' => $axispos];
     }
 
-    /*
+
+    /**
      * Walk through dataset to get percent values from max into dataset[].
+     * @return array
      */
     public function getPercentValues()
     {
@@ -232,22 +324,27 @@ public function getPercentValues()
         return $dataset;
     }
 
+
+    /**
+     * @return array
+     * @throws \Exception
+     */
     public function getDelimiterPresentation()
     {
-        $config = \SimpleSAML\Configuration::getInstance();
-        $t = new \SimpleSAML\XHTML\Template($config, 'statistics:statistics.tpl.php');
+        $config = Configuration::getInstance();
+        $t = new Template($config, 'statistics:statistics.tpl.php');
 
         $availdelimiters = $this->availDelimiters();
 
         // create a delimiter presentation filter for this rule...
         if ($this->ruleconfig->hasValue('fieldPresentation')) {
             $fieldpresConfig = $this->ruleconfig->getConfigItem('fieldPresentation');
-            $classname = \SimpleSAML\Module::resolveClass(
+            $classname = Module::resolveClass(
                 $fieldpresConfig->getValue('class'),
                 'Statistics\FieldPresentation'
             );
             if (!class_exists($classname)) {
-                throw new \Exception('Could not find field presentation plugin ['.$classname.']: No class found');
+                throw new \Exception('Could not find field presentation plugin [' . $classname . ']: No class found');
             }
             $presentationHandler = new $classname($availdelimiters, $fieldpresConfig->getValue('config'), $t);
 
@@ -257,6 +354,10 @@ public function getDelimiterPresentation()
         return [];
     }
 
+
+    /**
+     * @return array
+     */
     public function getDelimiterPresentationPie()
     {
         $topdelimiters = $this->getTopDelimiters();
@@ -274,24 +375,28 @@ public function getDelimiterPresentationPie()
         return $pieaxis;
     }
 
+
+    /**
+     * @return void
+     */
     public function loadData()
     {
         $statdir = $this->statconfig->getValue('statdir');
         $resarray = [];
-        $rules = \SimpleSAML\Utils\Arrays::arrayize($this->ruleid);
+        $rules = Arrays::arrayize($this->ruleid);
         foreach ($rules as $rule) {
             // Get file and extract results.
-            $resultFileName = $statdir.'/'.$rule.'-'.$this->timeres.'-'.$this->fileslot.'.stat';
+            $resultFileName = $statdir . '/' . $rule . '-' . $this->timeres . '-' . $this->fileslot . '.stat';
             if (!file_exists($resultFileName)) {
-                throw new \Exception('Aggregated statitics file ['.$resultFileName.'] not found.');
+                throw new \Exception('Aggregated statitics file [' . $resultFileName . '] not found.');
             }
             if (!is_readable($resultFileName)) {
-                throw new \Exception('Could not read statitics file ['.$resultFileName.']. Bad file permissions?');
+                throw new \Exception('Could not read statitics file [' . $resultFileName . ']. Bad file permissions?');
             }
             $resultfile = file_get_contents($resultFileName);
             $newres = unserialize($resultfile);
             if (empty($newres)) {
-                throw new \Exception('Aggregated statistics in file ['.$resultFileName.'] was empty.');
+                throw new \Exception('Aggregated statistics in file [' . $resultFileName . '] was empty.');
             }
             $resarray[] = $newres;
         }
@@ -305,4 +410,13 @@ public function loadData()
         }
         $this->results = $combined;
     }
+
+
+    /**
+     * @return array
+     */
+    public function combine(array $combined, array $resarray)
+    {
+        return array_merge($combined, $resarray);
+    }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Base.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Base.php
index bb2568f1d6..cb102787d2 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Base.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Base.php
@@ -4,17 +4,36 @@
 
 class Base
 {
+    /** @var array */
     protected $fields;
+
+    /** @var \SimpleSAML\XHTML\Template */
     protected $template;
+
+    /** @var \SimpleSAML\Locale\Translate */
+    protected $translator;
+
+    /** @var string */
     protected $config;
 
-    public function __construct($fields, $config, $template)
+
+    /**
+     * @param array $fields
+     * @param string $config
+     * @param \SimpleSAML\XHTML\Template $template
+     */
+    public function __construct(array $fields, $config, $template)
     {
+        $this->config = $config;
         $this->fields = $fields;
         $this->template = $template;
-        $this->config = $config;
+        $this->translator = $template->getTranslator();
     }
 
+
+    /**
+     * @return array
+     */
     public function getPresentation()
     {
         return ['_' => 'Total'];
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Entity.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Entity.php
index 624d215b79..e8841c6eef 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Entity.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/FieldPresentation/Entity.php
@@ -2,18 +2,23 @@
 
 namespace SimpleSAML\Module\statistics\Statistics\FieldPresentation;
 
+use SimpleSAML\Metadata\MetaDataStorageHandler;
+
 class Entity extends Base
 {
+    /**
+     * @return array
+     */
     public function getPresentation()
     {
-        $mh = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
+        $mh = MetaDataStorageHandler::getMetadataHandler();
         $metadata = $mh->getList($this->config);
 
         $translation = ['_' => 'All services'];
         foreach ($this->fields as $field) {
             if (array_key_exists($field, $metadata)) {
                 if (array_key_exists('name', $metadata[$field])) {
-                    $translation[$field] = $this->template->t($metadata[$field]['name']);
+                    $translation[$field] = $this->translator->t($metadata[$field]['name']);
                 }
             }
         }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/BaseRule.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/BaseRule.php
index 875557bc8d..e6eeb77983 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/BaseRule.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/BaseRule.php
@@ -2,40 +2,62 @@
 
 namespace SimpleSAML\Module\statistics\Statistics\Rulesets;
 
-/*
+use SimpleSAML\Configuration;
+use SimpleSAML\Module\statistics\DateHandler;
+use SimpleSAML\Module\statistics\DateHandlerMonth;
+use SimpleSAML\Module\statistics\StatDataset;
+
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class BaseRule
 {
+    /** @var \SimpleSAML\Configuration */
     protected $statconfig;
+
+    /** @var \SimpleSAML\Configuration */
     protected $ruleconfig;
-    protected $ruleid;
-    protected $available;
+
+    /** @var string */
+    protected $ruleid = '';
+
+    /** @var array */
+    protected $available = [];
+
 
     /**
      * Constructor
+     *
+     * @param \SimpleSAML\Configuration $statconfig
+     * @param \SimpleSAML\Configuration $ruleconfig
+     * @param string $ruleid
+     * @param array $available
      */
-    public function __construct($statconfig, $ruleconfig, $ruleid, $available)
+    public function __construct(Configuration $statconfig, Configuration $ruleconfig, $ruleid, array $available)
     {
-        assert($statconfig instanceof \SimpleSAML\Configuration);
-        assert($ruleconfig instanceof \SimpleSAML\Configuration);
         $this->statconfig = $statconfig;
         $this->ruleconfig = $ruleconfig;
         $this->ruleid = $ruleid;
 
-        $this->available = null;
         if (array_key_exists($ruleid, $available)) {
             $this->available = $available[$ruleid];
         }
     }
 
+
+    /**
+     * @return string
+     */
     public function getRuleID()
     {
         return $this->ruleid;
     }
 
+
+    /**
+     * @return array
+     */
     public function availableTimeRes()
     {
         $timeresConfigs = $this->statconfig->getValue('timeres');
@@ -48,15 +70,20 @@ public function availableTimeRes()
         return $available_times;
     }
 
+
+    /**
+     * @param string $timeres
+     * @return array
+     */
     public function availableFileSlots($timeres)
     {
         $timeresConfigs = $this->statconfig->getValue('timeres');
         $timeresConfig = $timeresConfigs[$timeres];
 
         if (isset($timeresConfig['customDateHandler']) && $timeresConfig['customDateHandler'] == 'month') {
-            $datehandler = new \SimpleSAML\Module\statistics\DateHandlerMonth(0);
+            $datehandler = new DateHandlerMonth(0);
         } else {
-            $datehandler = new \SimpleSAML\Module\statistics\DateHandler($this->statconfig->getValue('offset', 0));
+            $datehandler = new DateHandler($this->statconfig->getValue('offset', 0));
         }
 
         /*
@@ -74,6 +101,11 @@ public function availableFileSlots($timeres)
         return $available_times;
     }
 
+
+    /**
+     * @param string $preferTimeRes
+     * @return string
+     */
     protected function resolveTimeRes($preferTimeRes)
     {
         $timeresavailable = array_keys($this->available);
@@ -86,6 +118,12 @@ protected function resolveTimeRes($preferTimeRes)
         return $timeres;
     }
 
+
+    /**
+     * @param string $timeres
+     * @param string $preferTime
+     * @return int
+     */
     protected function resolveFileSlot($timeres, $preferTime)
     {
         // Get which time (fileslot) to use.. First get a default, which is the most recent one.
@@ -97,6 +135,12 @@ protected function resolveFileSlot($timeres, $preferTime)
         return $fileslot;
     }
 
+
+    /**
+     * @param string $timeres
+     * @param string $preferTime
+     * @return array
+     */
     public function getTimeNavigation($timeres, $preferTime)
     {
         $fileslot = $this->resolveFileSlot($timeres, $preferTime);
@@ -118,11 +162,17 @@ public function getTimeNavigation($timeres, $preferTime)
         return ['prev' => $available_times_prev, 'next' => $available_times_next];
     }
 
+
+    /**
+     * @param string $preferTimeRes
+     * @param string $preferTime
+     * @return \SimpleSAML\Module\statistics\StatDataset
+     */
     public function getDataSet($preferTimeRes, $preferTime)
     {
         $timeres = $this->resolveTimeRes($preferTimeRes);
         $fileslot = $this->resolveFileSlot($timeres, $preferTime);
-        $dataset = new \SimpleSAML\Module\statistics\StatDataset(
+        $dataset = new StatDataset(
             $this->statconfig,
             $this->ruleconfig,
             $this->ruleid,
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/Ratio.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/Ratio.php
index 1f76f6b470..492064331f 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/Ratio.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/Statistics/Rulesets/Ratio.php
@@ -2,24 +2,32 @@
 
 namespace SimpleSAML\Module\statistics\Statistics\Rulesets;
 
-/*
+use SimpleSAML\Configuration;
+use SimpleSAML\Module\statistics\RatioDataset;
+
+/**
  * @author Andreas Åkre Solberg <andreas.solberg@uninett.no>
  * @package SimpleSAMLphp
  */
-
 class Ratio extends BaseRule
 {
+    /** @var \SimpleSAML\Module\statistics\Statistics\Rulesets\BaseRule $refrule1 */
     protected $refrule1;
+
+    /** @var \SimpleSAML\Module\statistics\Statistics\Rulesets\BaseRule $refrule2 */
     protected $refrule2;
 
+
     /**
      * Constructor
+     *
+     * @param \SimpleSAML\Configuration $statconfig
+     * @param \SimpleSAML\Configuration $ruleconfig
+     * @param string $ruleid
+     * @param array $available
      */
-    public function __construct($statconfig, $ruleconfig, $ruleid, $available)
+    public function __construct(Configuration $statconfig, Configuration $ruleconfig, $ruleid, array $available)
     {
-        assert($statconfig instanceof \SimpleSAML\Configuration);
-        assert($ruleconfig instanceof \SimpleSAML\Configuration);
-
         parent::__construct($statconfig, $ruleconfig, $ruleid, $available);
 
         $refNames = $this->ruleconfig->getArray('ref');
@@ -33,31 +41,63 @@ public function __construct($statconfig, $ruleconfig, $ruleid, $available)
         $this->refrule2 = new BaseRule($this->statconfig, $statruleConfig2, $refNames[1], $available);
     }
 
+
+    /**
+     * @return array
+     */
     public function availableTimeRes()
     {
         return $this->refrule1->availableTimeRes();
     }
 
+
+    /**
+     * @param string $timeres
+     * @return array
+     */
     public function availableFileSlots($timeres)
     {
         return $this->refrule1->availableFileSlots($timeres);
     }
 
+
+    /**
+     * @param string $preferTimeRes
+     * @return string
+     */
     protected function resolveTimeRes($preferTimeRes)
     {
         return $this->refrule1->resolveTimeRes($preferTimeRes);
     }
 
+
+    /**
+     * @param string $timeres
+     * @param string $preferTime
+     * @return int
+     */
     protected function resolveFileSlot($timeres, $preferTime)
     {
         return $this->refrule1->resolveFileSlot($timeres, $preferTime);
     }
 
+
+    /**
+     * @param string $timeres
+     * @param string $preferTime
+     * @return array
+     */
     public function getTimeNavigation($timeres, $preferTime)
     {
         return $this->refrule1->getTimeNavigation($timeres, $preferTime);
     }
 
+
+    /**
+     * @param string $preferTimeRes
+     * @param string $preferTime
+     * @return \SimpleSAML\Module\statistics\RatioDataset
+     */
     public function getDataSet($preferTimeRes, $preferTime)
     {
         $timeres = $this->resolveTimeRes($preferTimeRes);
@@ -65,7 +105,7 @@ public function getDataSet($preferTimeRes, $preferTime)
 
         $refNames = $this->ruleconfig->getArray('ref');
 
-        $dataset = new \SimpleSAML\Module\statistics\RatioDataset(
+        $dataset = new RatioDataset(
             $this->statconfig,
             $this->ruleconfig,
             $refNames,
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatisticsController.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatisticsController.php
new file mode 100644
index 0000000000..3de1fd0e18
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/lib/StatisticsController.php
@@ -0,0 +1,244 @@
+<?php
+
+namespace SimpleSAML\Module\statistics;
+
+use SimpleSAML\Configuration;
+use SimpleSAML\HTTP\RunnableResponse;
+use SimpleSAML\Locale\Translate;
+use SimpleSAML\Module;
+use SimpleSAML\Session;
+use SimpleSAML\Utils\HTTP;
+use SimpleSAML\XHTML\Template;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Controller class for the statistics module.
+ *
+ * This class serves the statistics views available in the module.
+ *
+ * @package SimpleSAML\Module\admin
+ */
+class StatisticsController
+{
+    /** @var \SimpleSAML\Configuration */
+    protected $config;
+
+    /** @var \SimpleSAML\Configuration */
+    protected $moduleConfig;
+
+    /** @var \SimpleSAML\Session */
+    protected $session;
+
+
+    /**
+     * StatisticsController constructor.
+     *
+     * @param \SimpleSAML\Configuration $config The configuration to use.
+     * @param \SimpleSAML\Session $session The current user session.
+     */
+    public function __construct(Configuration $config, Session $session)
+    {
+        $this->config = $config;
+        $this->moduleConfig = Configuration::getConfig('module_statistics.php');
+        $this->session = $session;
+    }
+
+
+    /**
+     * Display statistics metadata.
+     *
+     * @param Request $request The current request.
+     *
+     * @return \SimpleSAML\XHTML\Template
+     */
+    public function metadata(Request $request)
+    {
+        AccessCheck::checkAccess($this->moduleConfig);
+
+        $aggr = new Aggregator();
+        $aggr->loadMetadata();
+        $metadata = $aggr->getMetadata();
+
+        if ($metadata !== null) {
+            if (in_array('lastrun', $metadata, true)) {
+                $metadata['lastrun'] = date('l jS \of F Y H:i:s', $metadata['lastrun']);
+            }
+            if (in_array('notBefore', $metadata, true)) {
+                $metadata['notBefore'] = date('l jS \of F Y H:i:s', $metadata['notBefore']);
+            }
+            if (in_array('memory', $metadata, true)) {
+                $metadata['memory'] = number_format($metadata['memory'] / (1024 * 1024), 2);
+            }
+        }
+
+        $t = new Template($this->config, 'statistics:statmeta.tpl.php');
+        $t->data = [
+            'metadata' => $metadata,
+        ];
+
+        return $t;
+    }
+
+
+    /**
+     * Display the main admin page.
+     *
+     * @return \SimpleSAML\XHTML\Template
+     */
+    public function main(Request $request)
+    {
+        AccessCheck::checkAccess($this->moduleConfig);
+
+        /**
+         * Check input parameters
+         */
+        $preferRule = $request->query->get('rule');
+        $preferRule2 = $request->query->get('rule2');
+        if ($preferRule2 === '_') {
+            $preferRule2 = null;
+        }
+
+        $preferTime = $request->query->get('time');
+        $preferTimeRes = $request->query->get('res');
+        $delimiter = $request->query->get('delimiler');
+
+        /**
+         * Create statistics data.
+         */
+        $ruleset = new Ruleset($this->moduleConfig);
+        $statrule = $ruleset->getRule($preferRule);
+        $rule = $statrule->getRuleID();
+
+        /**
+         * Prepare template.
+         */
+        $t = new Template($this->config, 'statistics:statistics.tpl.php');
+        $t->data = [
+            'delimiter' => $delimiter,
+            'pageid' => 'statistics',
+            'header' => 'stat',
+            'available_rules' => $ruleset->availableRulesNames(),
+            'selected_rule' => $rule,
+            'selected_rule2' => $preferRule2,
+        ];
+
+        try {
+            $dataset = $statrule->getDataset($preferTimeRes, $preferTime);
+            $dataset->setDelimiter($delimiter);
+            $dataset->aggregateSummary();
+            $dataset->calculateMax();
+        } catch (\Exception $e) {
+            $t->data['error'] = "No data available";
+            return $t;
+        }
+
+        $delimiter = $dataset->getDelimiter();
+        $timeres = $dataset->getTimeRes();
+        $fileslot = $dataset->getFileslot();
+        $timeNavigation = $statrule->getTimeNavigation($timeres, $preferTime);
+        $piedata = $dataset->getPieData();
+        $datasets = [$dataset->getPercentValues()];
+        $axis = $dataset->getAxis();
+        $maxes = [$dataset->getMax()];
+
+        $t->data['selected_rule'] = $rule;
+        $t->data['selected_time'] = $fileslot;
+        $t->data['selected_timeres'] = $timeres;
+        $t->data['post_d'] = $this->getBaseURL($t, 'post', 'd');
+        if (isset($preferRule2)) {
+            $statrule = $ruleset->getRule($preferRule2);
+            try {
+                $dataset2 = $statrule->getDataset($preferTimeRes, $preferTime);
+                $dataset2->aggregateSummary();
+                $dataset2->calculateMax();
+                $datasets[] = $dataset2->getPercentValues();
+                $maxes[] = $dataset2->getMax();
+
+                if ($request->query->get('format') === 'csv') {
+                    header('Content-type: text/csv');
+                    header('Content-Disposition: attachment; filename="simplesamlphp-data.csv"');
+                    $data = $dataset->getDebugData();
+                    foreach ($data as $de) {
+                        if (isset($de[1])) {
+                            echo '"' . $de[0] . '",' . $de[1] . "\n";
+                        }
+                    }
+                    exit;
+                } else {
+                    $t->data['error'] = 'Export format not supported';
+                    return $t;
+                }
+            } catch (\Exception $e) {
+                $t->data['error'] = "No data available to compare";
+                return $t;
+            }
+        }
+
+        $dimx = $this->moduleConfig->getValue('dimension.x', 800);
+        $dimy = $this->moduleConfig->getValue('dimension.y', 350);
+        $grapher = new Graph\GoogleCharts($dimx, $dimy);
+        $t->data['imgurl'] = $grapher->show($axis['axis'], $axis['axispos'], $datasets, $maxes);
+
+        if (!empty($piedata)) {
+            $t->data['pieimgurl'] = $grapher->showPie($dataset->getDelimiterPresentationPie(), $piedata);
+        }
+
+        $t->data['available_rules'] = $ruleset->availableRulesNames();
+        $t->data['available_times'] = $statrule->availableFileSlots($timeres);
+        $t->data['available_timeres'] = $statrule->availableTimeRes();
+        $t->data['available_times_prev'] = $timeNavigation['prev'];
+        $t->data['available_times_next'] = $timeNavigation['next'];
+        $t->data['current_rule'] = $t->data['available_rules'][$rule];
+        $t->data['selected_rule2'] = $preferRule2;
+        $t->data['selected_delimiter'] = $delimiter;
+        $t->data['debugdata'] = $dataset->getDebugData();
+        $t->data['results'] = $dataset->getResults();
+        $t->data['summaryDataset'] = $dataset->getSummary();
+        $t->data['topdelimiters'] = $dataset->getTopDelimiters();
+        $t->data['post_rule'] = $this->getBaseURL($t, 'post', 'rule');
+        $t->data['post_rule2'] = $this->getBaseURL($t, 'post', 'rule2');
+        $t->data['post_res'] = $this->getBaseURL($t, 'post', 'res');
+        $t->data['post_time'] = $this->getBaseURL($t, 'post', 'time');
+        $t->data['get_times_prev'] = $this->getBaseURL($t, 'get', 'time', $t->data['available_times_prev']);
+        $t->data['get_times_next'] = $this->getBaseURL($t, 'get', 'time', $t->data['available_times_next']);
+        $t->data['availdelimiters'] = $dataset->availDelimiters();
+        $t->data['delimiterPresentation'] = $dataset->getDelimiterPresentation();
+
+        return $t;
+    }
+
+
+    /**
+     * @param \SimpleSAML\XHTML\Template $t
+     * @param string $type
+     * @param string|null $key
+     * @param string|null $value
+     * @return string|array
+     */
+    private function getBaseURL(Template $t, $type = 'get', $key = null, $value = null)
+    {
+        $vars = [
+            'rule' => $t->data['selected_rule'],
+            'time' => $t->data['selected_time'],
+            'res' => $t->data['selected_timeres'],
+        ];
+        if (isset($t->data['selected_delimiter'])) {
+            $vars['d'] = $t->data['selected_delimiter'];
+        }
+        if (!empty($t->data['selected_rule2']) && $t->data['selected_rule2'] !== '_') {
+            $vars['rule2'] = $t->data['selected_rule2'];
+        }
+        if (isset($key)) {
+            if (isset($vars[$key])) {
+                unset($vars[$key]);
+            }
+            if (isset($value)) {
+                $vars[$key] = $value;
+            }
+        }
+        if ($type === 'get') {
+            return Module::getModuleURL("statistics/showstats.php") . '?' . http_build_query($vars, '', '&');
+        }
+        return $vars;
+    }
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/modules/statistics/phpunit.xml
new file mode 100644
index 0000000000..0540658da5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/phpunit.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>./vendor/simplesamlphp/simplesamlphp-test-framework/tests/</directory>
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./lib</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" title="PHP Coveralls" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/psalm.xml b/vendor/simplesamlphp/simplesamlphp/modules/statistics/psalm.xml
new file mode 100644
index 0000000000..1dba560190
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/psalm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<psalm
+    name="The SimpleSAMLphp statistics module"
+    useDocblockTypes="true"
+    totallyTyped="false"
+>
+    <projectFiles>
+        <directory name="lib" />
+        <directory name="www" />
+    </projectFiles>
+
+    <issueHandlers>
+        <LessSpecificReturnType errorLevel="info" />
+
+        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedMethod errorLevel="info" />
+
+        <MissingClosureReturnType errorLevel="info" />
+        <MissingReturnType errorLevel="info" />
+        <MissingPropertyType errorLevel="info" />
+        <InvalidDocblock errorLevel="info" />
+        <MisplacedRequiredParam errorLevel="info" />
+
+        <PropertyNotSetInConstructor errorLevel="info" />
+        <MissingConstructor errorLevel="info" />
+        <MissingClosureParamType errorLevel="info" />
+        <MissingParamType errorLevel="info" />
+        <UnusedClass errorLevel="info" />
+        <PossiblyUnusedMethod errorLevel="info" />
+    </issueHandlers>
+</psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/routes.yaml b/vendor/simplesamlphp/simplesamlphp/modules/statistics/routes.yaml
new file mode 100644
index 0000000000..e0fa51ae9e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/routes.yaml
@@ -0,0 +1,6 @@
+statistics-main:
+    path:       /
+    defaults:   { _controller: 'SimpleSAML\Module\statistics\StatisticsController::main' }
+statistics-metadata:
+    path:       /metadata
+    defaults:   { _controller: 'SimpleSAML\Module\statistics\StatisticsController::metadata' }
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.tpl.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.tpl.php
index 7abe9bb7e1..3a3e6cdd50 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.tpl.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.tpl.php
@@ -1,17 +1,22 @@
 <?php
 $this->data['header'] = 'SimpleSAMLphp Statistics';
 
-$this->data['jquery'] = ['core' => true, 'ui' => true, 'css' => true];
-
 $this->data['head'] = '<link rel="stylesheet" type="text/css" href="'.
     SimpleSAML\Module::getModuleURL("statistics/assets/css/statistics.css").'" />'."\n";
-$this->data['head'] .= '<script type="text/javascript" src="'.
-    SimpleSAML\Module::getModuleURL("statistics/assets/js/statistics.js").'"></script>'."\n";
+$this->data['head'] .= '<link rel="stylesheet" media="screen" href="'.
+    SimpleSAML\Module::getModuleURL("statistics/assets/css/uitheme1.12.1/jquery-ui.min.css").'" />'."\n";
 
 $this->includeAtTemplateBase('includes/header.php');
 
-echo '<h1>'.$this->data['available.rules'][$this->data['selected.rule']]['name'].'</h1>';
-echo '<p>'.$this->data['available.rules'][$this->data['selected.rule']]['descr'].'</p>';
+$this->data['htmlinject']['htmlContentPost'][] = '<script src="'.
+    SimpleSAML\Module::getModuleURL("statistics/assets/js/jquery-1.12.4.min.js").'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script src="'.
+    SimpleSAML\Module::getModuleURL("statistics/assets/js/jquery-ui-1.12.1.min.js").'"></script>'."\n";
+$this->data['htmlinject']['htmlContentPost'][] = '<script type="text/javascript" src="'.
+    SimpleSAML\Module::getModuleURL("statistics/assets/js/statistics.js").'"></script>'."\n";
+
+echo '<h1>'.$this->data['available_rules'][$this->data['selected_rule']]['name'].'</h1>';
+echo '<p>'.$this->data['available_rules'][$this->data['selected_rule']]['descr'].'</p>';
 
 // Report settings
 echo '<table class="selecttime">';
@@ -27,7 +32,7 @@
 }
 
 if (!empty($this->data['available_rules'])) {
-    echo '<select onchange="submit();" name="rule">';
+    echo '<select name="rule">';
     foreach ($this->data['available_rules'] as $key => $rule) {
         if ($key === $this->data['selected_rule']) {
             echo '<option selected="selected" value="'.$key.'">'.$rule['name'].'</option>';
@@ -48,7 +53,7 @@
 }
 
 if (!empty($this->data['availdelimiters'])) {
-    echo '<select onchange="submit();" name="d">';
+    echo '<select name="d">';
     foreach ($this->data['availdelimiters'] as $key => $delim) {
         $delimName = $delim;
         if (array_key_exists($delim, $this->data['delimiterPresentation'])) {
@@ -92,7 +97,7 @@
 }
 
 if (!empty($this->data['available_timeres'])) {
-    echo '<select onchange="submit();" name="res">';
+    echo '<select name="res">';
     foreach ($this->data['available_timeres'] as $key => $timeresname) {
         if ($key == $this->data['selected_timeres']) {
             echo '<option selected="selected" value="'.$key.'">'.$timeresname.'</option>';
@@ -112,7 +117,7 @@
 }
 
 if (!empty($this->data['available_times'])) {
-    echo '<select onchange="submit();" name="time">';
+    echo '<select name="time">';
     foreach ($this->data['available_times'] as $key => $timedescr) {
         if ($key == $this->data['selected_time']) {
             echo '<option selected="selected" value="'.$key.'">'.$timedescr.'</option>';
@@ -151,7 +156,7 @@
         echo '<input type="hidden" name="'.$k.'" value="'.htmlspecialchars($v).'" />'."\n";
     }
 
-    echo '<select onchange="submit();" name="rule2">';
+    echo '<select name="rule2">';
     echo '	<option value="_">None</option>';
     foreach ($this->data['available_rules'] as $key => $rule) {
         if ($key === $this->data['selected_rule2']) {
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.twig b/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.twig
index bcd02a049d..975d0f9616 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statistics.twig
@@ -2,14 +2,13 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-    <link href="{{ baseurlpath }}assets/css/statistics.css" rel="stylesheet" />
-    <link rel="stylesheet" media="screen" type="text/css" href="/resources/uitheme1.8/jquery-ui.css" />
+    <link href="/{{ baseurlpath }}module.php/statistics/assets/css/statistics.css" rel="stylesheet">
+    <link rel="stylesheet" media="screen" href="/{{ baseurlpath }}module.php/statistics/assets/css/uitheme1.12.1/jquery-ui.min.css">
 {% endblock %}
 
 {% block postload %}
-<script type="text/javascript" src="/resources/jquery-1.8.js"></script>
-<script type="text/javascript" src="/resources/jquery-ui-1.8.js"></script>
-<script type="text/javascript" src="{{ baseurlpath }}assets/js/statistics.js"></script>
+<script src="/{{ baseurlpath }}module.php/statistics/assets/js/jquery-ui-1.12.1.min.js"></script>
+<script src="/{{ baseurlpath }}module.php/statistics/assets/js/statistics.js"></script>
 {% endblock %}
 
 {% block content %}
@@ -26,7 +25,7 @@
                     {% for key, value in post_rule %}
                     <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
                     {% endfor %}
-                    <select onchange="submit();" name="rule">
+                    <select name="rule">
                     {% for key, rule in available_rules %}
                         {% if key == selected_rule %}
                         <option selected="selected" value="{{ key }}">{{ rule.name }}</option>
@@ -43,7 +42,7 @@
                     <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
                     {% endfor %}
                     {% if availdelimiters %}
-                    <select onchange="submit();" name="d">
+                    <select name="d">
                     {% for key, delim in availdelimiters %}
                         {% set delimName = delim %}
 
@@ -82,7 +81,7 @@
                     <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
                     {% endfor %}
                     {% if available_timeres %}
-                    <select onchange="submit();" name="res">
+                    <select name="res">
                     {% for key, timeresname in available_timeres %}
                         {% if key == selected_timeres %}
                         <option selected="selected" value="{{ key }}">{{ timeresname }}</option>
@@ -100,7 +99,7 @@
                     <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
                     {% endfor %}
                     {% if available_times %}
-                    <select onchange="submit();" name=time>
+                    <select name="time">
                     {% for key, timedescr in available_times %}
                         {% if key == selected_time %}
                         <option selected="selected" value="{{ key }}">{{ timedescr }}</option>
@@ -132,7 +131,7 @@
             <img src="{{ imgurl }}" alt="Graph" />
             <form action="#">
                 <p class="p_right">Compare with total from this dataset
-                <select onchange="submit();" name="rule2">
+                <select name="rule2">
                     <option value="_">None</option>
                     {% for key, rule in available_rules %}
                     {% if key == selected_rule2 %}
@@ -208,7 +207,7 @@
                     <td>{{ dd[0] }}</td>
                     <td class="datacontent">{{ dd[1] }}</td>
                     {% for key, value in topdelimiters %}
-                    {% if results[slot] is defined %}
+                    {% if results[slot] is defined and value == '_' %}
                     <td class="datacontent">{{ results[slot][value] }}</td>
                     {% else %}
                     <td class="datacontent">&nbsp;</td>
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statmeta.twig b/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statmeta.twig
index 09808e837a..100a8c886c 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statmeta.twig
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/templates/statmeta.twig
@@ -2,18 +2,19 @@
 {% extends "base.twig" %}
 
 {% block preload %}
-    <link href="{{ baseurlpath }}assets/css/statistics.css" rel="stylesheet" />
+    <link href="/{{ baseurlpath }}modules.php/statistics/assets/css/statistics.css" rel="stylesheet">
 {% endblock %}
 
 {% block content %}
+    <h2>{{ pagetitle }}</h2>
     <table id="statmeta">
     {% if metadata is defined %}
         {% if metadata.lastrun is defined %}
-            <tr><td>Aggregator last run at</td><td>{{ metadata.lastrun }}</td></tr>
+            <tr><td>Aggregator last run at</td><td>{{ metadata.lastrun|date }}</td></tr>
         {% endif %}
 
         {% if metadata.notBefore is defined %}
-            <tr><td>Aggregated data until</td><td>{{ metadata.notBefore }}</td></tr>
+            <tr><td>Aggregated data until</td><td>{{ metadata.notBefore|date }}</td></tr>
         {% endif %}
 
         {% if metadata.memory is defined %}
@@ -35,5 +36,5 @@
         <tr><td>No metadata found</td></tr>
     {% endif %}
     </table>
-    <p>[ <a href="{{ baseurlpath }}showstats.php">Show statistics</a> ]</p>
+    <p>[ <a href="/{{ baseurlpath }}module.php/statistics/showstats.php">Show statistics</a> ]</p>
 {% endblock %}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/tests/bootstrap.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/tests/bootstrap.php
new file mode 100644
index 0000000000..60565036ec
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
+
+// Symlink module into ssp vendor lib so that templates and urls can resolve correctly
+$linkPath = $projectRoot . '/vendor/simplesamlphp/simplesamlphp/modules/statistics';
+if (file_exists($linkPath) === false) {
+    echo "Linking '$linkPath' to '$projectRoot'\n";
+    symlink($projectRoot, $linkPath);
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 0000000000..1f851db2c9
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_55_fbf9ee_1x400.png
@@ -0,0 +1,5 @@
+�PNG
+
+���
IHDR�����������A����bKGD������	X�����	pHYs���H���H�F�k>����IDATH���!
+A���bl����A1{�V�Y0i��x��x�v����D�K_��O��9��a�Ք��}��^�JaȌ�0b�vBA�$,�Q���"_44���=�Sqc�yE��I�W
+<kA����i�0��<a$S��y.���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000000..a82e07c128
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_65_ffffff_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR����������G#7v���bKGD�݊����	pHYs���H���H�F�k>���IDAT(�ch`��p���h��4�i���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 0000000000..f323d2943e
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_dadada_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������������D���bKGD���1����	pHYs���H���H�F�k>���HIDAT8�cx��a�"��[�n{1�qc��po"��?3}`xR���1�s?��^^bxu��u)�뉣h���W�%R�|���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000000..8adf417e90
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_75_e6e6e6_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������������D���bKGD���1����	pHYs���H���H�F�k>���HIDAT8�cx��0�F�ѳgύ��ax1��e&ë8��!obަ2��fx�����#3�ǵ��>��QD��@�$�.5o���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000000..3f88c6b520
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_glass_95_fef1ec_1x400.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR�����������A����bKGD������	X�����	pHYs���H���H�F�k>����IDATH��ϱ
a�����\!V��J#X����ЋD}�
.f�>���>��P�կx���x����q��жuɚq���f+��6���[��\�‡����כW�T4r���6:]V:�,
(�Ŵ�8�yG-(d��	H���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 0000000000..d022fb79b5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png
@@ -0,0 +1,3 @@
+�PNG
+
+���
IHDR������d����2������bKGD���1����	pHYs���H���H�F�k>���ZIDAT�cx|��Nhã����2<hc�_�p/��n,�
�[_n�g���p=����w2\je�X�pa��&�s��b8��p���"�����Y{���%tEXtdate:create�2019-05-26T16:42:24+00:00R������%tEXtdate:modify�2019-05-26T16:42:24+00:00#�oP����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000000..e723e17cb5
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_222222_256x240.png
@@ -0,0 +1,32 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD�"�b����	pHYs���H���H�F�k>��'IDATx��{he�}�?g����{��1)�����]K&qq�U�4kbiK�R(H��B��P(I�vJ�_��ӮIV�@nB�5i�N��iG�jq�&
~A#Q����rX'����9�:�ܫ{�3�E{�=�y�o~3g~��Mp�&����1Xxh8<�#dlЅ�Mx1�&��$�5~��V��	��c�$��ױ���,����	��ƹ�i���N:�Z
��ߊY���>�"�B���H!�������-C�u�8t�}����8�!�B��	*�OF�.[�aͲ��l��B&���1h�>��M]hN���4MAb���̐!(�hE�1�5jձcO�<6�e7��,e���S(��f�o�16+3�y
+JR|{�^3�^����{�88������~'����pxh8<4���
�g����������2��n6e̘�����{�����Q�����pӀ��P�A��iۺߖ�f�S����(�D��'�L�6=����T:s���f�q��羀l��.c�I
+���ǧ�=�i���M�>��ڠLN{U��&������&��{u��o�����.�.��4~#����pxh8<4���
�g��Û��p���^i����/�0���TW�c����Q��� �@)��y��u}`L��Uc���%T��������ȥ
+�A��R��@�?��P�-`����BKl�
b����Z}�������Ш��͢uJ��%U�]�K2��e
ts�Y���@,e�e���豅r��jcܭs��M�n�0
A���mP��y
�D�K(5�,�lN�&b�D�m�rwYDV����t�e$��謷�
�L���[��C��0O��	P��&��0����+��;�
�g���3@������pxh8<4����Y��`��O����F�Z<��h�\J!c��`����j
�;TK�Vr�0��ʹqc�cGz�䟾c�[ ̕P5�t�h�)���ti���З߭ty��׎�����&��M/Е����S���u����@��݅���n���b�9��`y�9�󉡔�Ya�SX�0e���q�J`nB���g����b�����3���4P�- k�**�@HC�z(}�򯂬�U����cj2��=��Ob�����3�
����R��05���1U�\8SMi�U��}���΀�l�Hl�N�
���J��q+%e��7s���"�<։�ּ�z����M�L�T��ƾP��1f�1i��Ѹ��Vp������pxh8<4�z�A��+ o`�I_�R�����~�~��f��սh`�Ic�K�h����Q�p��xx`=�j�`]|S�B�(������(��v���F3�4v�؁6��T��4
���5����:���*��-D#�n6��a��J<U���~�y(�1��(,�|t�z�}��d��j��0u]PT��-D}@�����
+�n�+[�Ύ� A�B�T���(V� K������BT<𑹗[F{�m��=��-�ڤ����$��.��JR�U
j��:X��e�n�e���bՅ��"C	��e2�@�Ј�݂�	�Ѱ���xxh8<4���
��1@kX6I��<��M*�Љ�Ѣ�+�b���04(�.�M3Z�<]&i�UuY�a��^2�w�ͻ�ɨn�U�@�n����E�4
���O�Us�.J���}��dw�Ed�p��� ��me^f���mF
gg������T��G4�Ѱ����m��������N��է��N�c�����������5�L�xi���D��9�|��%ܔ�h�P=�áb����o�p�VBG�X ,�#E��+�\�^��o�ʼdM��ɳ]�d����.�@ 䮚���D���e��FU6'g6��)��52p|��f��X�_a�"z��x���� �w�.c�t�
+��
�g���3@ñ�`"�i��K�9���s
D07�
+ӕS��E�oC�Y�Z�l'N��~_Sƞ��y���a��xK�������z�-&|(�ϜC�K������Xg�d����5Ig��8k8YTL=�,/
+]s��w-~��t�����e��	^�~�&6vh�}�Զ�:g���?m�bG!����1�:O8����]�%��2�����v
+�E�@�5"�6	Y�rXcRb��ݎ���E%���`�#�D��r¤��Z�:�ϛ!�x�R���h�!��}v�۴��ϳ����x�y}FrA1#�*�u�T�?>��!�x#�~��G���k���@3K@�:>P�R�����M�A|��e]K�g�F.B�����t�l��OY d��!(v�V�X��%m�#���I[RR�`2�T��	��H��w�Y�u=���b�YPEc�U%�&@��Ĺ�]��}�q���o7*�G�L�
��e�QX�5�U����-����³��8| ���_�ݟ��5\�5�p�VH^��\
�Fآ��a��a��5�l1�4[��#�b�o�P�1�E��is��wMJ'5�T���06�B|I�,b�����`�ՈP���X�k��B�$�[��-E�OHt�|�3�D�(i��d9�N6@x/ؠm�(�#�wj�P�t��/Z���ob�q%[:���3^�~a��5���5�����|E닃�^�E��$�L�-���_s,
+߫��㕔Ņ�&��
+�_�,�������#F�}����&���.��<4���
�g���O��rdh9�����M7L(5꓂.���?M(�����stզ��-?�:��[ڧC�r�]�'��YB�2�l�C|
l�eXS��pG��0KcI��~�u�L0/��y�Lt�r�I�?�R�%�����-�w�Ƿ�h���$L��J��V���Ϳ�Ӣ,�����g�
x�_7��l��4�*��u�M+�@�x�<}���q>��<�#��`�i�
+:=��*��ۿ�{��)��_��8hs���������p�CWғ�K�`B]H��"}���_P�N���t�Q�l��1Y�Q�h+����&?��x�5:�	֘aY�ҭ���=\��En��������.�Yʸ��J���E%uTj5�����F�'������b;[��v�ט4�u��6]�lkw�3�÷���,: ��%&��
�[|��|��|Yi�q`:�����qXc�2+u|~/�wrz�[j-�I>#���,�9�Q:�#,2�����5@�@%��S@@6ÅJ�{��6��{��)h���W�~q]����t��<�+|�'�0O�a����6���3�U��HW������l;�����'�Z9�Z\�o��O�嵁���e�e�Ƣ[o��da�����rEm&�ʧ�������3m���6��=�g�^S��x
+Hj���mi�(v��ۈ�{.�h�_���%�8��nF�7y{�����O���FS5�:�����/��ա���W�P�H+b�����Gx��/9��I�Yy�.����M�t��T�eە,�ѿ�-�R����e�d��
+��;�Ә:�9k��T�5��m����������E�G��|\Wu����ǣ��@^L���E���
��4���
�g���y��;
+J'U��䐎N׷�<�p2m���ӫ��.Z������Z5<� V
+,��p�3��w�=~�3j��ǿě�#����ʭ�|�S��f�yk��=C�n1]�C�'I_O��*,�J՞�D\\I���}�E�\�$�M�(�E��\�߮�?ƫw
+�����NJ��E�b�6��t�z�:<��u��d��k��vs!��PfM��7dT����3	��*S,�AZl+N����l�R�&{�I��T�G�O�*�M~�;������XFS��j����^�Q���N�n3�Z���0Ne�R�]�3�8��<�$@�˜c.�t�=�.{e��'�TI�s��u����>-?B��p���?���X�J	$�x�QJ�}�!#��Ո2�Ht!VɽV�\'���Y�3�6����6Yu��JOAa�[5e���]p9=7����t���_�y��?�OS���<V��q.��Ի���;�8�~��YE����KSȀ��Xjq@M��
���/�p�X��۴�[�S��c7�'S6	�E� ������_Ձ'�_��)^3�b�h���+Z	��"rLz�ZA��#��[��'�?�Z7{mZl�Ӭ�Q�De+^��o�*D��g��r؈;/�."��HF�Ƴ5��)F	���2�c.�W�~�`����VEl����6�R����8ظ�ky�k�.����`��Fp7pps"�"��KR{(us�[�%6
u�s�ͻ���,BD�����/�ȷ�_Pt?�Y�Vy�.s���Y�3����3������\�V*#��y�f2j��g����A��Ѣ�
+�g�-�5����Fh�-1�9�v��<�s	�����m�� =/�_f�WX�M�&�לi�†RvٗQt��_���"������Q<�(�1[��_~��b"T z3��sxh8��������p�`Z�/�NΧ���F��{�"p�i`��
+�gsO��s�.�G}��t<��9�ug����g�R`���&��X�t�岇�}�	������7����2J�X�e\��	08j=�XJ�Ql�l����x�6z(\5Q��I��=�l
+8�7Ɏ���E�a4�O�;�-��M�1Iy�vV�y^�b�EN��sQ���Cw[
�2	��V�Ǽ�	o�yw�7J����K'�Tu�l�>_�i���T��<͛<�iM
+�p������7�YMW���=�ӡl(����u�+���^j��>3��2N�묳}��j�H��Q
RT�Ȣ�� ���n�fݮ�~�+��c�iQ��<
����Ma=��|�*����
+�$@'��Ԍ��ǕqUO;�5~@��eI�2��9�w��"��O�~��s��s��k{‰��$�m��>����v�z��^2���v�ow�`a������4c��M C�����b�>����q:��o�=�-�p`_2�ng:6K��XV,����2�Ǿ��6���
�g���3@�� ��ś�s�a����R��WWB
+g-N�;F[��Ւa�A��V�L�F�<-m
+VbMC����7���K)�X����P�y�
�s�~��=�����<�ܒ�{�x!�=����Ãq�R��l�]���/���� 0�l)'�}�#�^tX��孋�t�8FC�Y�$)�PUBE�(~��Ҟ��V�2^��*SL�H�l��S��'IA[�������Z���x-V�"ȥ�J�+���\�|�5u�W��nLJ�k��ܟ���(0�0����JyꞄ���a���f��g����6���
�g���3@Ñg���[�}��Z����Q�k?ҳ=��z�I$Т�:�9FW��m�x��:\(�W���+��e���F�9��,��*�!Gh�D��L��8�[v��o�����)�A�a�K�5�S/�)^c����(��W�H�N�W8T�r=op��p]MC�O?���*��
+D΢O��b/�hs�0�ڜb�9�1C�9-����o�ۿ���ԗ��u���Q��Fc���|W�%@�HB�2�9�������/Dx�D`�U:�Ƈ�gi����"`�%��ᄽ
+������t
�E`t���6�2k�)P�E�ѿO,��?�k��_�yh(/����=@��u
�g���3@������v@]��<����]���~��WD�`��.��f���~�o��ʈ�N�VA��߈�ե�M�����
�^��y��M�Q|��ߛ^-{o�~��>��w���Ѓ
+��(��g��X���ץ�i��&�X
+u��D�U���͕l� ��ғޥ�ߞ���k�������PH�H�C��J�~��S�@O�� �׋�ѓy7���
�k {��25���of����ϫ�o���{���'!�'���Z%��q�*)�g���C\���#��\���'��0���P_���WL��7��&AlJ���\��� Z��p��,���Y�x��j�c�����O�(6z��I�V�� u�:ג���T��D��O��9�ׄ�Q<��*y
=���2��~����/?J,����WJ�Q�W�>����W��u�?��#G��/����4�"�K���{㧏�',I��ҟ综E;���|R�ݠ��~��W�7i8�6����pxh8<4���
��r�<}8� kG�o;��u�C��P��v�)��A�<$��ց;��{l��� ����� ��#`��F���C�!f�	Ӆ/`7��(��0R!9�9�z���@%!/m�]���Ad��hv�G�����3@������pxh8<4{����P/ 3@�}��	B&�^�16�{.
�����ߠa�Q�o
���2l���mt���!\%@�X���?5��ճa��~
��ʠM65wk��a�)T���F��_�
+2�$�x�5�_9!�VxRd�1!}����'�`�$����Uԇ��r�?�	�Q
+�`7`�.���k����_V����zԄ��p�]]�GO���LXCk�3����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000000..1f5f49756c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_2e83ff_256x240.png
@@ -0,0 +1,18 @@
+�PNG
+
+���
IHDR�����������IJ���PLTE.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.��.����o���YtRNS�3P���/"Uq@f`2�
!<BHK Z#'1S,�4���j���8E���|��������)��Q$�
+��b�J��mߜGc?o�h�@^����bKGD��H���	pHYs���H���H�F�k>��dIDATx��]c۶�H�阒]�K���d��%٫뺮��lm���w]����|�p��X�m�-��}<�w�(1$��	;�F�@��%��?����B,Lh{�t���#���T@�/?j�9	m��N� #���+`��`����I�
+��_�-s�ʹU0�M��[��
+s�4`x��š�#��
�D<�~؀�K��.4�]`��PDDDDDDĈq������Ek@����A�~�*���	!Y���X�`hv3\LX��Ot�J2b���ؓl�QI<��� �6�-X�lֈ�6�H��|=j�`E�iq����Cv:�q���C?�?���x�,��r*t�ݻ}|;�kP�4���d�Y����f����K��~[	>�X:+�i����ĆQV9\����e�'���A�tOS�:7��2����YsxM�ہ��B���&���z�>n�C��@��r@��*�a�ӝ���%��MFDDDDDD�T�ߖ���H,���E����RU��n
ب<��V-
@�/Nm�թ���������Hw����*�+��#��$o�e�{�% �7\X��ǀ���2��~0��&n��sbA,�D��
�A�V�I��|�
�Og���鴋�	�7�y	7Jf�����:_�w^��H	v{/O�9���<����Y�`+�� HRٰ����[��?��
+������=���c""""""F�˽�sG�<*k9c��E�8薽�������zfm��r�1�N�������nq�w��&=O�\}K`
+#���2��~��L�|?�m>�\�f��͹�:}�4ᦋ���{�)�n[��
+�̰E
+KY��D�ۇ-��	�+�Kl=�Ӄ��L`љ�|�%��n�	a�	���N�#��5�	(4���?�����EDDDD\o�W�Ffq;��\E��_������,���W!%�zE!F�¶.�(USHQ0d�w)T���8#p,�x�B��K���� �*�x��X��E�e������
+K솎%mK��X~s�FE���~������tdc��a��I���1��Af4��dH��c�G�S�B`��0�wev`����"�{��	�.�GDDDD�,d�O�6�k"qk��Me�fS_����U��KŌ&g~>n� �H�})��L���F%8(�)r���!�[4统qQk�0�m[Le���_�7���0�@>1 X0A��Z����Vc�E�V ���Lt�k�3�EJ��44�Zﮊ�N`rt�>`�˥�	�	�
A��HBLH�@��c���Uq=�j������cM����2�s����J���CL�iR �NQ���������0=���Yi�-�|4�V��]��]��B^�ޞ���_H������$�<�$�	
+a����=��d@�	(Z�Ap_�}�~s���:�N�{DC>����m�^��ƒ����S�&�, ;�N����&�B} ��<_A��B]H�u���N(B�0��{h���1�IK����Ds��j����'��M���8�.�ӫ1�h3�df}mq���	��n�U{��L�o��z\=?@	((���e�|=ơ麄�C�i����1r<|�OO�;�
`��H��p�Qy�zԈu�����Z���V���Ʋ�!�)��5m�C���2��Ly�g�;���֑�R���jW�a@��@V�L�&W���ru=Z
+�̥��=U���5}���������7�;b(�����nP&�s��k�4�����8�ͥ��0���1�U�W�v�k�18dq���T��ՌE]qH8�������G�F�����K�����'��r����Or���r�̧��6"fp��T�^3c��"�����n��Mم-�/��W=�tJ,��X�)���{�P
Rm|K����>mX�8v�5h��<������_{ꘀ�Y�F�|&_G;&�>^�����W⁃�&�K���(��81�EB@F&��;"L���'wfw��E-6��o&/̫'X�e,>~�ee��|���A����=)	d��Q�`}P[���K��N��˂����/�~)����O[d�O=�3E�l5'Y�$?��7�m���Tzզ.�\��.��` WE�����"""""v�)��V���<���K�ZX.Ex�~Ч)���ߚ�����W_}�5|��s��/!?����'poդ���tC3����@�Q�)��t��`���b!,dY9�6A2����������/튮���n�t�TK>����#]�L;zq�J���r���²[��\-t�ҽ�5
@�ͷϟ��n�T@��+;��c���Qh�C*���T�ڙ��A<Sku�µb�E�
/��$�Z���.e�j������_ʤrWaB6d���(��S�s[�|���竕
+/5R���(�4X������76����`3|���P��p�'�H~<R?M�2�)�  ��g��Vp��B�n�=�|W�ͬ\��V0_�81Oׄ�Kz||lP_��ω���lxX;ǀ�Ju�<��Ng[��]=�(�#]������p�P�a���i�������s�f��
+V�z��]ౚ������z>�Vr�?�f��?������
�Q�1�T`��} H�k���,{�VZˋT��ϛ�?I̯u�QK�LM�e͆��~��q������y�m0�9�S�;���j�����5 ���i��Q��]7k0�U�ޭ���G�kX����3#���lY��_Цx����j޶9��`�#
+M	[z��KuO_z˿Dܭ��*��kOJ�(7��n��\�e�
I�T�ƨ�l�/�U������߶uw�.�~���;#�r���.�����8
�o# 5L��h>1�i�����p��V�M�?�/u7��0� X@��L��+M�+�����{��Fkt�{�ŧ89�0`���. ĀC�R+\��/��t�R����;
�TӲ���]�aL���|�efđ��	�>�ۣ��G�|�P`P��8C1K՛�A�̍<�2��ۂ��K�r�l@L
+L��������8�@�E>`n�����PNԍ,��p�����E��Ɔ����Z�FlÎ;�����F���7��Ȯ;��
+��s�wSz)g7�{r�s��S��gȋ��(߄~�AWytX��$�NV����R�_��<6�p.�O�8�O[�OdDk>_��O�O�}����JS���d��mV�?�W(_��m� ��j���~=H IԁF>T/��{*]IGJ@i����qam�NF|Q�5���0+���E�S8�:�v�`p~v���j:B�����p96�o��ys%��������
�|@H�����]��+�@��t]W�k}}�����7��Fʮr����A�����B���\m�-�_�2PY8�������x�ՎN�.h�~���@+7��z5������t�_/������/�?���0�S>��)���z�i0n�/�B����`{D��W���#`����B��o���[,�g��FVЁ�pP߾���C]Bz�� ��,X�����X�fԃ����A�:H��� k�7��d�Z9��oc}o�]�0�vd�:R]�0�ve���]刈����j����у����|
	�?�+(��OǍ�+	�#��ys���ߍ�n�p���Fru<��.HȺotM��3h���}��߆P}�������˗��v�����P�}mǀ���?���W��Z@���������}���������@��@���FD�������l����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
new file mode 100644
index 0000000000..618f5b0ca7
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_454545_256x240.png
@@ -0,0 +1,30 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD�E�;�-���	pHYs���H���H�F�k>��mIDATx��{leG}�?g�K��$����U�!�>T��؈�J��i6A"�V��R%;��"���*UP)�
+�/���z�RJ�F��QP��z��BQH�VU������5sμ�9��^�3ߕ��{~����7s�7��<���.��`���� c���Ab/�@�[�V�D��0��3AX9�0�N��_�B���&���>~�>�
c�;ab�D�ߎE����Q�z��'k���M�ayԉ��6�!�:u:�:@RŤ�B�yDD���'�L��-�f�]S��q!��f�
+S�Q�&�S��7MC��r==3dJ��{��f�Z���S0�Ms��:0K٦g�ʿ��&H�U�=�mc�4�i?UĔG��U4�hc��Qb�]�!��hL���W/�
����@������pxh8�~�|�A��Qf?�ێ��1f¸����=u����Q�GJH��p����PϠI�w״m췥���ԧ>2���"�WÓP&{��n����T:s���f�q���H@���.c�I������~�S�s+�^|B�n�29�dH�������]��v�-ˌ-m�e�h�>�����q&ت��g�9x�#c�n��~!����pxh8��4^�/�
����o�#�Z@��S���^��4� KZKP�d�9���C@F[�����,��a+�����]8��v��K�qHl�w9ק�84�KB��ץ|��&��#��[�\C�����`��R��!�����:�F
+z��C���6��)A���T1wU.I�җ!4��ig�3w��������E:��q7����n�0uA���mP��y
�T�K(5ͬ�lNæb�T���rw�DV�]��t�e4���7�
�L���[��C��0��P��&��0����+��+�
����@������pxh8��4����Y��`��O����E�Z<��h�\J!��䞋��j
�;TK�Vr�0��ͬq�cˇ��u���a����p����E{B�w"�K��5���n-��c"w�v�T�6
T�hzီ|6�ŝ���Ι��N{	t��]��K��^m1(�6��m�3��'�R�f���`Ô�� �_�>��j�,�*�-E)�e��{�U�,��
\u���oV��:
`o��m�Ke�t��_W��O��dW3���Z
Քrv|�~^�g��`j�yc���p�*���f���b�]�M5��9��.��L��N��q+%����ۯ�0�vc�c�J��E�M5���kk�#I�<���x_��	�I#0D�w��4xh8��4^�/�
��^c���
+����d�r��DM{w�Q�t�e�{��^�`��b�r./��M:0գ��*����z���`]|S�B�(�e)�h͎/V����ܮ�"aO!�o�
,�u�^���Љ�^�=�z��t`�WeCC�MQϱo���0q��%���U�o?�<��@6��HG/����������uAQ-_�u||����ִ*2l��ٍ�uG�@� j
!�B���r�����	q�L!*)�h������.�V�{3����-��!�w�$dP�*�����/P[�t1���l3�hl�y�p������0b��g�L�} �3���$�%\/��.)TwQ�"uK7d�+�2�!��@������pxh8��4�'��aY$m��f�6�lB'�.D��
��Р��x7S�x��tI��eW�e}���d0�R�W��^ݢ��0](U�݋T�x����|��T�|����@v�^Df׹Lb��(�2��H��0n8;���_�Q�O��}D���&3{��Y��W�w��5*��e˗?�̖�G�
+�:H iZӖ)/MP���(:�!�/�|B��[i����:�Gf
�L�`�~��:z$aa���^����ʭ|P�- kbݞ<ەL&�xJ�AABȼ�Hvᑢ�[�yS��ə�w�NJuy��%pw�0�_a"z��x���� �3i�1|���=����@����%�JW����A���m�\����
��l��X�m9+�(��)������S��� or��ro*E`�Z��1��&=�ޗ�g�!�Rt<<�A.-V���+�l�|����suK��,&�ȇ��%����y�q�s��(A�K�*�q^�~����anb�1`�6��G�P�a�&.�	�)b���muL��I���fnE! k̠Ò��c��m���c�ȱD�-B֥֙�D`:G��e�tQ	��7�0���0��������YQ�Ӕ،?�mb�/�e׸L{8�<�
q�{��X4��$s���D@����s�9�����e8��\c(���Y���"�r���7��q6�u-	|��B����R���i�x!��9^P�HD�����g�t7K���|��2��"�.�t���V����w�E�u>�b�������f����a?q�h'y'r�y����#\��&��
+o+��Ԫ������|�Y��%��_Hp���"����k��1��*ɫ���U[��&x�9�xA��s�mf�e��<�_����7�;y�6m���i
�
+:�[��)�EB���7�̰����8f��CH��`⾿�h�)�����}�(�%m���'��&���
;��(�ݚ!�{:^����R��@���N���Kү"�*�<�V�敡�=��o�h~q���+`6I��i�I<#�����Z=^IE\`�0]1����%�D��A��^�a0f��,���c %[�Gxh8��4^�/������rdh9�����M7L)-�ӂ-���?K(����stբ�h-?�:��[ڧC�r�]�G�(�YB�3�|�C|
l�eXW��_�x�V8Ɗ�b����bQ����7�����V�4J�]������l!��=�
D?��'a`^����a�q��8���:-��O��YP��x�ۀ���֝��X�5Q�"�Gִ����W}���
+���I>ȓ<�c��b�YV
+6=��*��ۿ�-\��įi|��BH���J_F�Wx�CWғ�_��K�`B]J��"}�`�_R��β��&nDsp����t%G-�^���V�����yIc�b�9.hM�u����K��ĭ��6T���6��5Ko(�
+%Hz߲�:.��n�z�ōO�>���c��lpVZM_gڰ�C�v��eG{�����<_d�����0՗e���N�%N�y�ƍ����Ȅp��~�Ú�/���k�������n��������|��(G������#.�s��9�J�ۇ��l���[��6�ɻ�&�.X���{�����SDf�†�<����y?O�~��ƅDP���*~b���gco��s{;�����'�Z9�Z��.��O�孁���e��U�~?�Ӆ1N�3��ڶD�(��1Gx�x�k�S�H�I~ی?O��������k���,��i�(���ׁۈ�{.�h�_���5�؋�nF�7��0Q���O����S5�:�'����/��ա���J�r����
�.���KN�wu�e��r>n��-�U�$U`I�v%�����.A�U����e�d��
+��;�Ә:�+�a&�XĎ �y������������������G�с���	��"��4��pxh8��4^���	@d6�((�Ԕ{�C::[�>�H,
+�ɴNVN����hr.�~N������Z��`�3�᝼���K��Q�|$�%�t��!�Vn%�=�*�7����f��g(�m!fy���"�k�I6Y�/�eZ�ٳ���+���z�g�6W8ɦbQ%�y�{9����Ï�*ŕ�#��7��b-t��X�͕8y��nO�{]�!ټ�*���\� �(��p�2.�H�ٙ�d�.�^Z�(N���&�l�2�&k�	�U&ף���#~�.���7������6���58A7����}P:��BlkU�[�8�)�j�w0�$��W� ��!s\�������QF�n(qRK��:'�X���@����=$��x����|�5:��@��]���2�S�i�.�&��
+��$`
+8�t�����S =�&[#�߫��U3���Wҳq��^H{���➇�Z���4������"��A��H��#����U��0�+̱�1�Ɏ�;����O9���"�D�E
�C+n�U:�|a��ɔ�M|�?H������W1�$~=�k��U�џ���V������V�����l{���7�	�����^�;<�,�t[������T"��3SU9l��˾�H���x^�&�a�@���)�E��&�<<B4�(b����p������Ƶ\˫\�u��f�����7r����������^��Ci�[��.��h���_�^��mD�"DD�_3��e�������e��X�	�,�B@�fU���/�?���g���B�R���C�&��2���P�8��@3ZtS��<����v7�^#�另�;c'�Nȹ����6�g[�J!Az^ ?�<̯�oɛ�_s[Kg{(e�}�E�~J��,�m<<�����U���g
+"&B%��7�~�{��/�
G�l��4^�����j�����Ԓt���cA��0\(�����ܓ�Ԡ�Q�8��YN�Bݝ�?[���R��$�k���\�{�u���׾~�Q���q�)�8���z:G�G��UK�:�
07��6�-��
+WMY<�����
��2�Ѱ��$5�&v�}%��8�)#9&)/��K^2�+��B̳�i���\Ҥ����V�}�LD���1/i��n�]2č��>��I?U�7x���G�4�c�*�i��
+�5)�ñ>�wH�����f5[q���O�.���d&J_�~W\`G{�
|-���e/���Чk��d� E�����(���N�i�v=����C`�̲�Z���+���%m
+)s�!ī�6Fei�N��%���O*㪞v,s��@��%����4���tS/<E�%��0wr��k{ʉ2b�6ɻ��*���;�����zs�]�۝,�B��!,ų�uM�zȐ"��={����O���E����۴��w80���ۙ��%�\PL����
+��H�[/�
����@������G����9��A�Pi�G
+ѫ+!��'��^��u'þ��:�Z�@�LxZ�:�Ɩ����oQA_�RR�`��E��,���~�]M�y_��xD�$��&J�B�k�Q�@����3����=�A_��هA`��RN�#�"��tX��孋�0Z죡�Ԭa�t����R��Mi�C-�k��r�a�fH4@�C��ܓ���-��`$�~����Ul�$^�Ufr)�0�*-C�n9W-��@M�1��a���@7�g!�7
+?̣|�l�R��/ᭁytX5��L݇��p�����@������pxh8�`:{�1����J��5��#;���ǾD"�-��s�ct�Ln3�<D��B���d1w]���=4H�α�'�!���r�+t��d����eG���{h	@�.���k�q���v�e�5V�h.0�©|U������
+��C��u����k��G���O��C��Y�	�"@�E�"mNzP�S,��1����rzk�M}������y�.�{+j{���xL��wE^DPk�$�3�cA�Y�~Y���
+�/�C�H�F�����<m�47Ṟ�Q�3��Wa�o�~o�)�C�d݇��E�ƀl7�(̢b��s��ڸ���<<�Fx�~?@��m
����@������v@]��<����=���~��WD�`��.��f���~�o��ʈ�n�VA{_��ե�M�����
�^��y��M�Q|��ߟ^-{�~��>������Ѓ
+��(��g��X���7��i��&�X
+5WJ"�*V���J6s{��I��w�oO_��5~���YX�w(�R��!��m���)^�'��D������ɸ�����5�=�@��+���~���j��yQ`O�`�$�D��<B�F0C<�^%�@��?t�k3�}�@����{�^��y��U��|���pS�nĦ�t���e��=���$�v��>`����H_�B���T#%].Xx��D�ѫ�OR��2�E���\K"��R\T|��:m�O���
+�x��*y
=���2��~����/?J,����+%q�	�W�ޛ���3������?ܕ�?�������
�^���e������	+R����oҎ�5س�~�o����Bo
l8��4^�/�
����@�!��/ON�G�����ۮ2t]��С8�cݮ5�z=7���������ˮ���g���@�/�aE[��y#�3�#z��7L�.|��
+��(cR�c�S��m�Q�$�6�ץ{D���a�{T�_j8��4^�/�
����@ñ`�/����_g�"d���`�ɾ����0�
���{�����
�����C�j����_9��jD�Ջa�~?�	dc�[�����0�*a���������,�&
0��&�+���O�B4!��1��~��Ix����>�8�c��&�G)�j���I������=@�5@�v�&J?��Q��l�Ç@��Q�����?��^�������%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
new file mode 100644
index 0000000000..ee5e33f272
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_888888_256x240.png
@@ -0,0 +1,35 @@
+�PNG
+
+���
IHDR����������E�r@���bKGD��I�( ���	pHYs���H���H�F�k>��tIDATx��{le�}�?g�
k�u��J�>D�C�^�Q���M��H��*MU��
h�(*$H���R�*j�	�D�]����)Ż(M6��F�6!6�-
�xI���i�-�� HN�8��s�uι���g������f����7��3����ƣ��7�x^�/�2&�v&v^�DL�	l6I�-��o?��cn��D Iy�e�#d0+�0�3��~������0�g'L�V���[��R�C:B�~(��)$q�vXu�B@��E@`H�NG���`TA�%=]�qAw��J)��u)�9�:e9d`V��0�A{�=��BS*�ڦ�S��gFA��-(D���R˷@�"����g'�U�,eSwʿ���j���*�)l[����.HLyϰ��9�����j�a�I6��MR~��~�nG�ٕ�3�
����@������pxh8��4~=@>���(��mE��3a\`~��=u����Q�����[�f3W��A���i��oK}3wէ�gV�����,j���n2��*ߕ���m��M��]
y=��xn"�co�.�L"��7]��EC�:dHz�E@W�.�f+^�eƦ6vռE4��O���`��̴�.�)l�:��7����){�_Я��~"����pxh8��4^�/�
����/�#�\@��S��^�T�0sZs1�J�1�Pr��h�w�V��E�g���S��T��Q5�[	\B���O
+`+�˾>}����\�6��/0��k�g���1[
�Kh��l�Xʿ��_�Z�^IA���^�N�4v���OW=%i^�<��9��t�f �2����С��B�Hg�6����!u�\ҭZ�&蒶�
+�2����s	���U�]��i�T����� ��]�Uaq;]�A
�:�rG-3�<F�n��*�ݴ�T�ݯ	4<;���������@������pxh8��4^�ysh�,ux��$\j��"Z-�mo��SJ��9���{�
+���e˹[
�\�fָ�ұ��y�2LT��0�K@�9Լ��Ţ=���?Х��B���=c"��v�T�6
Tokza���9T����s&�6��ո���v�� }3�':��[�5�)�,�xU!��҃@}�����U� �kc��
+ꈡ����Y,]��`&߬('�u*�^�v	��O�wu�?}2�&�C����Ȗr�}ݾ^g�[`��y�c*�9s�"���f_��b��
+uuT?�M���f�
+
+e���ۏ�0e�vb�c�J��E�M%�6���Po��l�M`n�~Esչd�j|���z��)miOq/{�ک��Jq���A�G������pxh8��4^���a��+ ����ʥ�5�݃F�����+��Y�&{�˾����I�
�z��\e�X�����oJ}Hȯ�iW��)~�n��m߮ɞh�����l*7TP3k���XJ7R"�����"NX�U�}ٔއA���/(qW�\���v6�$2�
��-���˶Ezd��j��0u]PT{�[�:>>�L�DkZ�Y���ֺ�14�ZC�WU���b�d�12zB���Y�$i".�~A�i=�����Œ��۪>���E��AI�b�\Ϋ�������
+c6��O�SB\��ɅJ#"�RE�Ȱ_'��I.��aluI��������	��YX^�/�
����@����=h��$i3��7[��d:Qu!Ztw�Ul�~F��Ż�b�k�K"$-c��.�3���@��,�y�;i�-�JӉR�޽H���!���ɷjN��;��L�dw�Ed�p��� fO�,�j�T�q��������+
+򩸹�h[@Vef��6KV����x��\�b���|���l}_��$U+�W!��?o[�����y�B(�p3
��r_�5P�2ݚ�la�˱*�x��GXG$�`�W~9?�r+���y�-k��d����.�@ <]�����#<R�y0/��99����T�����^w�
����.�?0�ꠁ{�]0j"<�v�g��Qxh8��4^���$�S�L��@�����oԆ�5	�l\q+�VN�!��߆���j��L�b-����=UK<��׳�6��R���?S�j����b�s�'�\
+>U��\Z,��W�����4Ig��9��L�1�sa��R���O�^�.�P����(�>�K��\�c�6m^�um
��Ql��g�"�y[ө�D�/����[V�*3谨��X�m�@[�q�X#r,a��5�	kLK"0���񢐻(����q��A�O�VP��U
j�(�iJ��l�Wq����l�i�����x�S�� T!s��XD@����s�9�k����y8��\a���Y���"�r������v֗u-	��v!���H��
���
�4�<��@��(B$"Pd�V�Z��5Ɯ��	�ߦ�����s0k��B�5h$��=�dpϪ�_�@0+�������4@"h�O�t���c�ky5�v��z�K����\��1@ޒZ��]��B�_.܋ؿ�!���I��Xd��WpW0�Z%y9�s9�jaK���0��h�sN��,�lU�����X!����h�f!�2.)��0����� 6�B|Iq/�Ӽ��0�jD��F[,�5�
!m`�-�������$�J~1w�WQ�J�D#"YO��
�6hV�Q��5C��t��/���7	�8�-*�"����_E�U�y0�x�+Cxg�h|����+`6H��i�A|]�����Z=^JE\`20
+�~]���f 5X��`?S�0��Q^��?J�1�%[�Gxh8��4^�/�{��S�"��rؘ���ɛn�RZԧ[v�-�P����O��I'�Z~t�t����O�N�z����q����g����آ�4��X�����ԃ,s�e���q�9
,2�)�^���Ķ/�����(��rS?�=<��B|W{|�&~�OO�������
+�t�q���uZt�E��A��)n��7
�;O&-��+��D쏬iEcG����F�	?�c|�Ǹ��54�:�,lz��O�l	�7s��'~C���%B�f�2:`��ě਒�T��T��bjn�
+F�E���,�,p�n��F4'өkLWr�"�P[oa��o��s��k�qNkҭ����\��n��������.�Y�xS�V(A�����q��t+/ԫ-�u�p0w�-z��4��ƴaY�=zt���n��g~��2�7Y,,耄��L
d�=|�|�|Y�p�z��?2�\���f�˼���\~'f�{�[j,�	>#���(�9�a:��,��وK� �x�R��.  ��B%�f6����n�ϻV����/Σ������� %O��+|���!��I��6���3�e��HW����O�� vXIK�O�rZ�8���g�g8=C��2�9Ǫ[�P��B'���rAmK"zʻ�!����
+���m���6�뱾�3����y5����ܓ��"�[�<
�J��sϏ��U9Z^��8_�fD!Zq��_\���- ��-`<uQS,�y�����b�]z@h`�*�*GZ������>���)����D�g��鲔��i�qIb.JXT���bj�k�$��M��1^�K6�<��˿�9��C_��fr��E���M~���8]�T�xX��u5�_<���t_0PA���𶀆�@������p4O�"�qGA餦������v�GbQ���p�rz���E��3��3�U
�6����+��$�q?�W
+1���X�K<�8�
���[����sC!��}E~5C~=C�n1[x�LO
+��g�U�X���=�����̪�y�hs��l(&U�'/qg��v�|�^�8Sx(��o(�B�x�e�\�ӑ�����ľ�U��s���:�҅ͅ2k
+W�!�B�Ԝ�i�
V���EO�f�X6�g�A5�kOد2���jS���6ۼ�[J���S��j����Q��:(����Z���0Ne
+�Z�]L2�$����4@��8�B,���,�Nj(�t'�8.��JC�L�K�U���i��5�#�Xx�#|�U:��@��m��??d,^q5�L!��]�Mr��I4�pZ��;��>�g@��M�F�K�)(�}�f��U�.�{���]��~5��5������>�"����$c�����+�ן�?��Q���c�#
+�mK-6�)࿁���_�Y�n��G+��:�|a������"�~ϯ��ٯb�q�~=�+���,j�?�M��y
+9"�y��D���ʍn��g����6-z<�,+tK�����xW"�����'l��˾�H��[yJ�&�a�@�~/�9�"�a�%�$iѣ���6.S����8ظ�+y�+�*�o�jo�mp-���k��1	�u����%�=�����-�"�
+���4wq�-��Ր�E���K
+�|�Uf�G��
+-���Ua]X�r���x.�\���˅h�:"����LF�dF���5p���f�覊�)n�Yͣ�n��Fh�
1{�'��\���<ϫlik)$H�䇙�5��%y��kni�b
��/���O����E���OjZ�<�,�b�������P	���p�+�@��<[��/�
���#/��Z�wp6�$�5�D��E�����
+���|6w�^>7��{ԇ�Nĭ��Pw���f�>��k�7�/��c͗=��cM��ﴯ߁A�E`�q��:N*��N��Q����b�UG�`��ʟ�Ƴ���Cᨉ"��5�w5�.��&�v;����.ܱ��7e$�$��y�K�YE<[�y�8����M
+n�m%�U�4@��[��&����EC�(�.�/���b���C��>Z�1�_P�O�^�;�������!�N��wc��l�^���]`C1�L�����8GO{�
<��fpY�8���:�X�! ��W�Z���Vc��ʺ��b���+����_ݖ�fp9U�4��u
+*��QD�I�3cv�1e\�ݎe�(ֲ$��ؿ��.�]��z�)�/�>�>.|mO9Q��HN
�P��{����;�=�YJ���7'�[��ɂ-����b<
+Xӌ���2��@}�޺Pw�������aŨ�M�	lqG{R�\p��Dx�s��T3�X�ؓ�����@������pxh8���ѱx��e l TZ�B��H�a�e�c��t*ZHF��b52�iiS�[:�DH�S
+�))%��_rp�S���eUӮ@��*I�3�*�C�
+3��=���&�&5�CB���`����Ê�,o]���~����]3�t�������ح�jXe�x����0CTA3œy �5�{�t����!k@Q�V+Vr��
+3�e!�̰Bː�ۓ��O�A����԰‰	#	���U4V��D�ч�D����*Oݕ���<:�Xl��Bxh8�L`������pxh8��4y0���؃���J��k5��#;��ǮD"�-�鞺#t�Ln3ã|��Áysɩ�q�v��A2t�>�}�<���Jw�Z,ӱ:�-�*���%��A$�-�lp�I�d���5�S/���BGs�iN�z,v�~�79P�r5�q��p]MM�O?�m���~"g�ǀ�����9VhAmn`��0G�)�����ԧ_ԇ��U������W�1}�3�y
A�����p��;d��U���>X����J��x��<mV5'Ṟ�a�0�Wa��s��w��A2�����<w�F}b@�`fQ���=�{Ɂ�h�����s<���5P�ŏ�.�_�px[@������pxh82��P�~���G�Mt��M���-�v@]���ܠ�.߰�	�����~��K�9�4}��6��. ��/n�:��&"O�'�"�'G�SH��;U�k�A��'��U峕_������4]|]̅�+%�w~�tUFD�w_���/}�����e��7��%~�B*E�����K�����e�U�پ^̀����Y��`]�����2���Y���O�ޯF��g��E���OB�O���Z5��v�*)���*�C��63ه
��(��/�w0��zP_���WL��
+7��AlJ���(�� ��p��
,���Y����j�c�����w�(6z��I�V�?+�_�Ԓ�༔���D��O+��9�7��Q���*y
=���2��|���/?J,����+%q�{�^�?�@�r_O�ץ������^��c�A�o����.�J��㻏�,K��ҟ��E;��7|B`�N�]�a�+�/i8�5����pxh8��4^�/�
�hr?<}4� [��o���u�#�bP�u���\���������l�{l��V��{h��102p�1#=�СG�y�����/��(�b0V!9�9�z��&@%!m�]���A��ju�G�����@������pxh8��4�W�&��P? @�y��)B���	6��S�Y�&�ϰak�����ͽ�Y�6��pakݞ�}���(|�!,���W/�	���/��A�lj�֮�x�)T��I#}ˏ�Y�L`2eM�)���
+w�B4!��1����FIx���>�8�c��&�G)�j���I������}@�5��V�&J?��	Y�����!�\=jb��<�����h�jo���%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000000..7e8ebc180a
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/images/ui-icons_cd0a0a_256x240.png
@@ -0,0 +1,198 @@
+�PNG
+
+���
IHDR�����������IJ���PLTE�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+�
+
+4�v����YtRNS�3P���/"Uq@f`2�
!<BHK Z#'1S,�4���j���8E���|��������)��Q$�
+��b�J��mߜGc?o�h�@^����bKGD��H���	pHYs���H���H�F�k>��dIDATx��]c۶�H�阒]�K���d��%٫뺮��lm���w]����|�p��X�m�-��}<�w�(1$��	;�F�@��%��?����B,Lh{�t���#���T@�/?j�9	m��N� #���+`��`����I�
+��_�-s�ʹU0�M��[��
+s�4`x��š�#��
�D<�~؀�K��.4�]`��PDDDDDDĈq������Ek@����A�~�*���	!Y���X�`hv3\LX��Ot�J2b���ؓl�QI<��� �6�-X�lֈ�6�H��|=j�`E�iq����Cv:�q���C?�?���x�,��r*t�ݻ}|;�kP�4���d�Y����f����K��~[	>�X:+�i����ĆQV9\����e�'���A�tOS�:7��2����YsxM�ہ��B���&���z�>n�C��@��r@��*�a�ӝ���%��MFDDDDDD�T�ߖ���H,���E����RU��n
ب<��V-
@�/Nm�թ���������Hw����*�+��#��$o�e�{�% �7\X��ǀ���2��~0��&n��sbA,�D��
�A�V�I��|�
�Og���鴋�	�7�y	7Jf�����:_�w^��H	v{/O�9���<����Y�`+�� HRٰ����[��?��
+������=���c""""""F�˽�sG�<*k9c��E�8薽�������zfm��r�1�N�������nq�w��&=O�\}K`
+#���2��~��L�|?�m>�\�f��͹�:}�4ᦋ���{�)�n[��
+�̰E
+KY��D�ۇ-��	�+�Kl=�Ӄ��L`љ�|�%��n�	a�	���N�#��5�	(4���?�����EDDDD\o�W�Ffq;��\E��_������,���W!%�zE!F�¶.�(USHQ0d�w)T���8#p,�x�B��K���� �*�x��X��E�e������
+K솎%mK��X~s�FE���~������tdc��a��I���1��Af4��dH��c�G�S�B`��0�wev`����"�{��	�.�GDDDD�,d�O�6�k"qk��Me�fS_����U��KŌ&g~>n� �H�})��L���F%8(�)r���!�[4统qQk�0�m[Le���_�7���0�@>1 X0A��Z����Vc�E�V ���Lt�k�3�EJ��44�Zﮊ�N`rt�>`�˥�	�	�
A��HBLH�@��c���Uq=�j������cM����2�s����J���CL�iR �NQ���������0=���Yi�-�|4�V��]��]��B^�ޞ���_H������$�<�$�	
+a����=��d@�	(Z�Ap_�}�~s���:�N�{DC>����m�^��ƒ����S�&�, ;�N����&�B} ��<_A��B]H�u���N(B�0��{h���1�IK����Ds��j����'��M���8�.�ӫ1�h3�df}mq���	��n�U{��L�o��z\=?@	((���e�|=ơ麄�C�i����1r<|�OO�;�
`��H��p�Qy�zԈu�����Z���V���Ʋ�!�)��5m�C���2��Ly�g�;���֑�R���jW�a@��@V�L�&W���ru=Z
+�̥��=U���5}���������7�;b(�����nP&�s��k�4�����8�ͥ��0���1�U�W�v�k�18dq���T��ՌE]qH8�������G�F�����K�����'��r����Or���r�̧��6"fp��T�^3c��"�����n��Mم-�/��W=�tJ,��X�)���{�P
Rm|K����>mX�8v�5h��<������_{ꘀ�Y�F�|&_G;&�>^�����W⁃�&�K���(��81�EB@F&��;"L���'wfw��E-6��o&/̫'X�e,>~�ee��|���A����=)	d��Q�`}P[���K��N��˂����/�~)����O[d�O=�3E�l5'Y�$?��7�m���Tzզ.�\��.��` WE�����"""""v�)��V���<���K�ZX.Ex�~Ч)���ߚ�����W_}�5|��s��/!?����'poդ���tC3����@�Q�)��t��`���b!,dY9�6A2����������/튮���n�t�TK>����#]�L;zq�J���r���²[��\-t�ҽ�5
@�ͷϟ��n�T@��+;��c���Qh�C*���T�ڙ��A<Sku�µb�E�
/��$�Z���.e�j������_ʤrWaB6d���(��S�s[�|���竕
+/5R���(�4X������76����`3|���P��p�'�H~<R?M�2�)�  ��g��Vp��B�n�=�|W�ͬ\��V0_�81Oׄ�Kz||lP_��ω���lxX;ǀ�Ju�<��Ng[��]=�(�#]������p�P�a���i�������s�f��
+V�z��]ౚ������z>�Vr�?�f��?������
�Q�1�T`��} H�k���,{�VZˋT��ϛ�?I̯u�QK�LM�e͆��~��q������y�m0�9�S�;���j�����5 ���i��Q��]7k0�U�ޭ���G�kX����3#���lY��_Цx����j޶9��`�#
+M	[z��KuO_z˿Dܭ��*��kOJ�(7��n��\�e�
I�T�ƨ�l�/�U������߶uw�.�~���;#�r���.�����8
�o# 5L��h>1�i�����p��V�M�?�/u7��0� X@��L��+M�+�����{��Fkt�{�ŧ89�0`���. ĀC�R+\��/��t�R����;
�TӲ���]�aL���|�efđ��	�>�ۣ��G�|�P`P��8C1K՛�A�̍<�2��ۂ��K�r�l@L
+L��������8�@�E>`n�����PNԍ,��p�����E��Ɔ����Z�FlÎ;�����F���7��Ȯ;��
+��s�wSz)g7�{r�s��S��gȋ��(߄~�AWytX��$�NV����R�_��<6�p.�O�8�O[�OdDk>_��O�O�}����JS���d��mV�?�W(_��m� ��j���~=H IԁF>T/��{*]IGJ@i����qam�NF|Q�5���0+���E�S8�:�v�`p~v���j:B�����p96�o��ys%��������
�|@H�����]��+�@��t]W�k}}�����7��Fʮr����A�����B���\m�-�_�2PY8�������x�ՎN�.h�~���@+7��z5������t�_/������/�?���0�S>��)���z�i0n�/�B����`{D��W���#`����B��o���[,�g��FVЁ�pP߾���C]Bz�� ��,X�����X�fԃ����A�:H��� k�7��d�Z9��oc}o�]�0�vd�:R]�0�ve���]刈����j����у����|
	�?�+(��OǍ�+	�#��ys���ߍ�n�p���Fru<��.HȺotM��3h���}��߆P}�������˗��v�����P�}mǀ���?���W��Z@���������}���������@��@���FD�������l����%tEXtdate:create�2016-07-13T10:21:59+00:00�����%tEXtdate:modify�2016-07-13T09:26:54+00:00�͠���tEXtSoftware�Adobe ImageReadyq�e<����IEND�B`�
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/jquery-ui.min.css b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/jquery-ui.min.css
new file mode 100644
index 0000000000..b3fe46344d
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/css/uitheme1.12.1/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.12.1 - 2019-05-26
+* http://jqueryui.com
+* Includes: core.css, tabs.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=smoothness&cornerRadiusShadow=8px&offsetLeftShadow=-8px&offsetTopShadow=-8px&thicknessShadow=8px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=aaaaaa&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cd0a0a&fcError=cd0a0a&borderColorError=cd0a0a&bgImgOpacityError=95&bgTextureError=glass&bgColorError=fef1ec&iconColorHighlight=2e83ff&fcHighlight=363636&borderColorHighlight=fcefa1&bgImgOpacityHighlight=55&bgTextureHighlight=glass&bgColorHighlight=fbf9ee&iconColorActive=454545&fcActive=212121&borderColorActive=aaaaaa&bgImgOpacityActive=65&bgTextureActive=glass&bgColorActive=ffffff&iconColorHover=454545&fcHover=212121&borderColorHover=999999&bgImgOpacityHover=75&bgTextureHover=glass&bgColorHover=dadada&iconColorDefault=888888&fcDefault=555555&borderColorDefault=d3d3d3&bgImgOpacityDefault=75&bgTextureDefault=glass&bgColorDefault=e6e6e6&iconColorContent=222222&fcContent=222222&borderColorContent=aaaaaa&bgImgOpacityContent=75&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=222222&fcHeader=222222&borderColorHeader=aaaaaa&bgImgOpacityHeader=75&bgTextureHeader=highlight_soft&bgColorHeader=cccccc&cornerRadius=4px&fsDefault=1.1em&fwDefault=normal&ffDefault=Verdana%2CArial%2Csans-serif
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa}
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-1.12.4.min.js b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-1.12.4.min.js
new file mode 100644
index 0000000000..e836475870
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-1.12.4.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-ui-1.12.1.min.js b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-ui-1.12.1.min.js
new file mode 100644
index 0000000000..25398a1674
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/jquery-ui-1.12.1.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
+}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
+this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
+}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
+},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
+},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
+},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
+this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/statistics.js b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/statistics.js
index 54a72551d9..ddddc25b74 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/statistics.js
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/assets/js/statistics.js
@@ -1,8 +1,16 @@
 $(document).ready(function () {
+    // Render tabs
     $("#tabdiv").tabs();
     $('ul.tabset_tabs li').click(
         function () {
             $("html, body").animate({ scrollTop: 0 }, "slow");
         }
-    )
+    );
+
+    // Add listeners to dropdowns
+    $('select').change(
+         function() {
+            $(this).parents("form").submit();
+        }
+    );
 });
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/showstats.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/showstats.php
index 7011126ea5..37dc45a5cf 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/showstats.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/showstats.php
@@ -1,182 +1,15 @@
 <?php
 
-$config = \SimpleSAML\Configuration::getInstance();
-$statconfig = \SimpleSAML\Configuration::getConfig('module_statistics.php');
-$session = \SimpleSAML\Session::getSessionFromRequest();
-$t = new \SimpleSAML\XHTML\Template($config, 'statistics:statistics.tpl.php');
+namespace SimpleSAML\Module\statistics;
 
-\SimpleSAML\Module\statistics\AccessCheck::checkAccess($statconfig);
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use Symfony\Component\HttpFoundation\Request;
 
-/*
- * Check input parameters
- */
-$preferRule = null;
-$preferRule2 = null;
-$preferTime = null;
-$preferTimeRes = null;
-$delimiter = null;
-
-if (array_key_exists('rule', $_REQUEST)) {
-    $preferRule = $_REQUEST['rule'];
-}
-if (array_key_exists('rule2', $_REQUEST)) {
-    $preferRule2 = $_REQUEST['rule2'];
-}
-if (array_key_exists('time', $_REQUEST)) {
-    $preferTime = $_REQUEST['time'];
-}
-if (array_key_exists('res', $_REQUEST)) {
-    $preferTimeRes = $_REQUEST['res'];
-}
-if (array_key_exists('d', $_REQUEST)) {
-    $delimiter = $_REQUEST['d'];
-    $t->data['request_d'] = $delimiter;
-}
-
-if ($preferRule2 === '_') {
-    $preferRule2 = null;
-}
-
-/*
- * Create statistics data.
- */
-$ruleset = new \SimpleSAML\Module\statistics\Ruleset($statconfig);
-$statrule = $ruleset->getRule($preferRule);
-$rule = $statrule->getRuleID();
-
-$t->data['pageid'] = 'statistics';
-$t->data['header'] = 'stat';
-$t->data['available_rules'] = $ruleset->availableRulesNames();
-$t->data['selected_rule'] = $rule;
-$t->data['selected_rule2'] = $preferRule2;
-
-try {
-    $dataset = $statrule->getDataset($preferTimeRes, $preferTime);
-    $dataset->setDelimiter($delimiter);
-    $dataset->aggregateSummary();
-    $dataset->calculateMax();
-
-    if (array_key_exists('output', $_REQUEST) && $_REQUEST['output'] === 'csv') {
-        header('Content-type: text/csv');
-        header('Content-Disposition: attachment; filename="simplesamlphp-data.csv"');
-        $data = $dataset->getDebugData();
-        foreach ($data as $de) {
-            if (isset($de[1])) {
-                echo '"'.$de[0].'",'.$de[1]."\n";
-            }
-        }
-        exit;
-    }
-} catch (\Exception $e) {
-    $t->data['error'] = "No data available";
-    $t->show();
-    exit;
-}
-
-$delimiter = $dataset->getDelimiter();
-
-$timeres = $dataset->getTimeRes();
-$fileslot = $dataset->getFileslot();
-
-$timeNavigation = $statrule->getTimeNavigation($timeres, $preferTime);
-
-$piedata = $dataset->getPieData();
-
-$datasets = [];
-$datasets[] = $dataset->getPercentValues();
-
-$axis = $dataset->getAxis();
-
-$maxes = [];
-
-$maxes[] = $dataset->getMax();
-
-$t->data['selected_time'] = $fileslot;
-$t->data['selected_timeres'] = $timeres;
-$t->data['post_d'] = getBaseURL($t, 'post', 'd');
-
-if (isset($preferRule2)) {
-    $statrule = $ruleset->getRule($preferRule2);
-    try {
-        $dataset2 = $statrule->getDataset($preferTimeRes, $preferTime);
-        $dataset2->aggregateSummary();
-        $dataset2->calculateMax();
-
-        $datasets[] = $dataset2->getPercentValues();
-        $maxes[] = $dataset2->getMax();
-    } catch (\Exception $e) {
-        $t->data['error'] = "No data available to compare";
-        $t->show();
-        exit;
-    }
-}
-
-$dimx = $statconfig->getValue('dimension.x', 800);
-$dimy = $statconfig->getValue('dimension.y', 350);
-$grapher = new \SimpleSAML\Module\statistics\Graph\GoogleCharts($dimx, $dimy);
-
-$t->data['imgurl'] = $grapher->show($axis['axis'], $axis['axispos'], $datasets, $maxes);
-if (isset($piedata)) {
-    $t->data['pieimgurl'] = $grapher->showPie($dataset->getDelimiterPresentationPie(), $piedata);
-}
-
-$t->data['available_rules'] = $ruleset->availableRulesNames();
-$t->data['available_times'] = $statrule->availableFileSlots($timeres);
-$t->data['available_timeres'] = $statrule->availableTimeRes();
-$t->data['available_times_prev'] = $timeNavigation['prev'];
-$t->data['available_times_next'] = $timeNavigation['next'];
-
-$t->data['current_rule'] = $t->data['available_rules'][$rule];
-
-$t->data['selected_rule'] = $rule;
-$t->data['selected_rule2'] = $preferRule2;
-$t->data['selected_delimiter'] = $delimiter;
-
-$t->data['debugdata'] = $dataset->getDebugData();
-$t->data['results'] = $dataset->getResults();
-$t->data['summaryDataset'] = $dataset->getSummary();
-$t->data['topdelimiters'] = $dataset->getTopDelimiters();
-
-$t->data['post_rule'] = getBaseURL($t, 'post', 'rule');
-$t->data['post_rule2'] = getBaseURL($t, 'post', 'rule2');
-$t->data['post_res'] = getBaseURL($t, 'post', 'res');
-$t->data['post_time'] = getBaseURL($t, 'post', 'time');
-$t->data['get_times_prev'] = getBaseURL($t, 'get', 'time', $t->data['available_times_prev']);
-$t->data['get_times_next'] = getBaseURL($t, 'get', 'time', $t->data['available_times_next']);
-
-$t->data['availdelimiters'] = $dataset->availDelimiters();
-$t->data['delimiterPresentation'] = $dataset->getDelimiterPresentation();
-
-$t->data['jquery'] = ['core' => false, 'ui' => true, 'css' => true];
+$config = Configuration::getInstance();
+$session = Session::getSessionFromRequest();
+$request = Request::createFromGlobals();
 
+$controller = new StatisticsController($config, $session);
+$t = $controller->main($request);
 $t->show();
-
-function getBaseURL($t, $type = 'get', $key = null, $value = null)
-{
-    $vars = [
-        'rule' => $t->data['selected_rule'],
-        'time' => $t->data['selected_time'],
-        'res' => $t->data['selected_timeres'],
-    ];
-    if (isset($t->data['selected_delimiter'])) {
-        $vars['d'] = $t->data['selected_delimiter'];
-    }
-    if (!empty($t->data['selected_rule2']) && $t->data['selected_rule2'] !== '_') {
-        $vars['rule2'] = $t->data['selected_rule2'];
-    }
-
-    if (isset($key)) {
-        if (isset($vars[$key])) {
-            unset($vars[$key]);
-        }
-        if (isset($value)) {
-            $vars[$key] = $value;
-        }
-    }
-
-    if ($type === 'get') {
-        return \SimpleSAML\Module::getModuleURL("statistics/showstats.php").'?'.http_build_query($vars, '', '&amp;');
-    }
-
-    return $vars;
-}
diff --git a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/statmeta.php b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/statmeta.php
index dd252bb26e..336ac615bd 100644
--- a/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/statmeta.php
+++ b/vendor/simplesamlphp/simplesamlphp/modules/statistics/www/statmeta.php
@@ -1,27 +1,15 @@
 <?php
 
-$config = \SimpleSAML\Configuration::getInstance();
-$statconfig = \SimpleSAML\Configuration::getConfig('module_statistics.php');
+namespace SimpleSAML\Module\statistics;
 
-\SimpleSAML\Module\statistics\AccessCheck::checkAccess($statconfig);
+use SimpleSAML\Configuration;
+use SimpleSAML\Session;
+use Symfony\Component\HttpFoundation\Request;
 
-$aggr = new \SimpleSAML\Module\statistics\Aggregator();
-$aggr->loadMetadata();
-$metadata = $aggr->getMetadata();
-
-$t = new \SimpleSAML\XHTML\Template($config, 'statistics:statmeta.tpl.php');
-
-if ($metadata !== null) {
-    if (in_array('lastrun', $metadata, true)) {
-        $metadata['lastrun'] = date('l jS \of F Y H:i:s', $metadata['lastrun']);
-    }
-    if (in_array('notBefore', $metadata, true)) {
-        $metadata['notBefore'] = date('l jS \of F Y H:i:s', $metadata['notBefore']);
-    }
-    if (in_array('memory', $metadata, true)) {
-        $metadata['memory'] = number_format($metadata['memory'] / (1024 * 1024), 2);
-    }
-    $t->data['metadata'] = $metadata;
-}
+$config = Configuration::getInstance();
+$session = Session::getSessionFromRequest();
+$request = Request::createFromGlobals();
 
+$controller = new StatisticsController($config, $session);
+$t = $controller->metadata($request);
 $t->show();
diff --git a/vendor/simplesamlphp/simplesamlphp/package-lock.json b/vendor/simplesamlphp/simplesamlphp/package-lock.json
index 019235f246..d44fb54511 100644
--- a/vendor/simplesamlphp/simplesamlphp/package-lock.json
+++ b/vendor/simplesamlphp/simplesamlphp/package-lock.json
@@ -3,27 +3,545 @@
   "requires": true,
   "lockfileVersion": 1,
   "dependencies": {
-    "anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/core": {
+      "version": "7.7.5",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz",
+      "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==",
       "dev": true,
       "requires": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.7.4",
+        "@babel/helpers": "^7.7.4",
+        "@babel/parser": "^7.7.5",
+        "@babel/template": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "json5": "^2.1.0",
+        "lodash": "^4.17.13",
+        "resolve": "^1.3.2",
+        "semver": "^5.4.1",
+        "source-map": "^0.5.0"
       },
       "dependencies": {
-        "normalize-path": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "json5": {
           "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+          "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/generator": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz",
+      "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4",
+        "jsesc": "^2.5.1",
+        "lodash": "^4.17.13",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
+      "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.7.4",
+        "@babel/template": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
+      "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
+      "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz",
+      "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.7.5",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz",
+      "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==",
+      "dev": true
+    },
+    "@babel/template": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz",
+      "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
+      "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.7.4",
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/helper-split-export-declaration": "^7.7.4",
+        "@babel/parser": "^7.7.4",
+        "@babel/types": "^7.7.4",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0",
+        "lodash": "^4.17.13"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "dev": true,
           "requires": {
-            "remove-trailing-separator": "^1.0.1"
+            "ms": "^2.1.1"
           }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        }
+      }
+    },
+    "@babel/types": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
+      "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.13",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+      "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.3",
+        "run-parallel": "^1.1.9"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+      "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+      "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.3",
+        "fastq": "^1.6.0"
+      }
+    },
+    "@npmcli/move-file": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz",
+      "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^1.0.4"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
+      "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
+      "dev": true
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+      "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+      "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+      "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+      "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+      "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+      "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+      "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+      "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+      "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/helper-wasm-section": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-opt": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "@webassemblyjs/wast-printer": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+      "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+      "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+      "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+      "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-code-frame": "1.9.0",
+        "@webassemblyjs/helper-fsm": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+      "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "dev": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "dev": true
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "acorn": {
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+      "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
+      "dev": true
+    },
+    "aggregate-error": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+      "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+      "dev": true,
+      "requires": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      },
+      "dependencies": {
+        "indent-string": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+          "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+          "dev": true
         }
       }
     },
+    "ajv": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+      "dev": true
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "ansicolors": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz",
+      "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8="
+    },
+    "anymatch": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+      "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "dev": true,
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
     "arr-diff": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -42,826 +560,790 @@
       "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
       "dev": true
     },
-    "array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
       "dev": true
     },
-    "assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+    "array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
       "dev": true
     },
-    "async-each": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
-      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
       "dev": true
     },
-    "atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-      "dev": true
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
     },
-    "babel-core": {
-      "version": "6.26.3",
-      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
-      "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "^6.26.0",
-        "babel-generator": "^6.26.0",
-        "babel-helpers": "^6.24.1",
-        "babel-messages": "^6.23.0",
-        "babel-register": "^6.26.0",
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "convert-source-map": "^1.5.1",
-        "debug": "^2.6.9",
-        "json5": "^0.5.1",
-        "lodash": "^4.17.4",
-        "minimatch": "^3.0.4",
-        "path-is-absolute": "^1.0.1",
-        "private": "^0.1.8",
-        "slash": "^1.0.0",
-        "source-map": "^0.5.7"
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
           "dev": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+        }
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.1.1",
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
           "dev": true
         },
-        "babel-code-frame": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
-          "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "esutils": "^2.0.2",
-            "js-tokens": "^3.0.2"
-          }
-        },
-        "babel-generator": {
-          "version": "6.26.1",
-          "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
-          "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
-          "dev": true,
-          "requires": {
-            "babel-messages": "^6.23.0",
-            "babel-runtime": "^6.26.0",
-            "babel-types": "^6.26.0",
-            "detect-indent": "^4.0.0",
-            "jsesc": "^1.3.0",
-            "lodash": "^4.17.4",
-            "source-map": "^0.5.7",
-            "trim-right": "^1.0.1"
-          }
-        },
-        "babel-helpers": {
-          "version": "6.24.1",
-          "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
-          "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
-          "dev": true,
-          "requires": {
-            "babel-runtime": "^6.22.0",
-            "babel-template": "^6.24.1"
-          }
-        },
-        "babel-messages": {
-          "version": "6.23.0",
-          "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
-          "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
-          "dev": true,
-          "requires": {
-            "babel-runtime": "^6.22.0"
-          }
-        },
-        "babel-register": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
-          "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
-          "dev": true,
-          "requires": {
-            "babel-core": "^6.26.0",
-            "babel-runtime": "^6.26.0",
-            "core-js": "^2.5.0",
-            "home-or-tmp": "^2.0.0",
-            "lodash": "^4.17.4",
-            "mkdirp": "^0.5.1",
-            "source-map-support": "^0.4.15"
-          }
-        },
-        "babel-runtime": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-          "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
           "dev": true,
           "requires": {
-            "core-js": "^2.4.0",
-            "regenerator-runtime": "^0.11.0"
+            "inherits": "2.0.1"
           }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+      "requires": {
+        "lodash": "^4.17.14"
+      }
+    },
+    "async-each": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+      "dev": true,
+      "optional": true
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+      "dev": true
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
+      "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==",
+      "dev": true
+    },
+    "babel-loader": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
+      "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^2.1.0",
+        "loader-utils": "^1.4.0",
+        "mkdirp": "^0.5.3",
+        "pify": "^4.0.1",
+        "schema-utils": "^2.6.5"
+      },
+      "dependencies": {
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+          "dev": true
         },
-        "babel-template": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
-          "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+        "loader-utils": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
           "dev": true,
           "requires": {
-            "babel-runtime": "^6.26.0",
-            "babel-traverse": "^6.26.0",
-            "babel-types": "^6.26.0",
-            "babylon": "^6.18.0",
-            "lodash": "^4.17.4"
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
           }
-        },
-        "babel-traverse": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
-          "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+        }
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "babel-code-frame": "^6.26.0",
-            "babel-messages": "^6.23.0",
-            "babel-runtime": "^6.26.0",
-            "babel-types": "^6.26.0",
-            "babylon": "^6.18.0",
-            "debug": "^2.6.8",
-            "globals": "^9.18.0",
-            "invariant": "^2.2.2",
-            "lodash": "^4.17.4"
+            "is-descriptor": "^1.0.0"
           }
         },
-        "babel-types": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
-          "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "babel-runtime": "^6.26.0",
-            "esutils": "^2.0.2",
-            "lodash": "^4.17.4",
-            "to-fast-properties": "^1.0.3"
+            "kind-of": "^6.0.0"
           }
         },
-        "babylon": {
-          "version": "6.18.0",
-          "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
-          "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
-          "dev": true
-        },
-        "balanced-match": {
+        "is-data-descriptor": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-          "dev": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
+            "kind-of": "^6.0.0"
           }
         },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-          "dev": true
-        },
-        "convert-source-map": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
-          "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+      "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+      "dev": true,
+      "optional": true
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "bluebird": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
+      "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "safe-buffer": "~5.1.1"
+            "is-extendable": "^0.1.0"
           }
-        },
-        "core-js": {
-          "version": "2.5.7",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
-          "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "dev": true,
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "dev": true,
+      "requires": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
           "dev": true
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "detect-indent": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
-          "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+        }
+      }
+    },
+    "browserify-sign": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
+      "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^5.1.1",
+        "browserify-rsa": "^4.0.1",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.2",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.5",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
           "dev": true,
           "requires": {
-            "repeating": "^2.0.0"
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
           }
         },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-          "dev": true
-        },
-        "esutils": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-          "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-          "dev": true
-        },
-        "globals": {
-          "version": "9.18.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
-          "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
           "dev": true
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "home-or-tmp": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
-          "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
-          "dev": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.1"
-          }
-        },
-        "invariant": {
-          "version": "2.2.4",
-          "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-          "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-          "dev": true,
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        },
-        "is-finite": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
-          "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+        }
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+      "dev": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "buffer": {
+      "version": "4.9.2",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+      "dev": true
+    },
+    "cacache": {
+      "version": "12.0.4",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+      "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "chownr": "^1.1.1",
+        "figgy-pudding": "^3.5.1",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.1.15",
+        "infer-owner": "^1.0.3",
+        "lru-cache": "^5.1.1",
+        "mississippi": "^3.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.3",
+        "ssri": "^6.0.1",
+        "unique-filename": "^1.1.1",
+        "y18n": "^4.0.0"
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+          "dev": true
+        }
+      }
+    },
+    "cardinal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz",
+      "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=",
+      "requires": {
+        "ansicolors": "~0.2.1",
+        "redeyed": "~1.0.0"
+      }
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "dependencies": {
+        "supports-color": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
           "dev": true,
           "requires": {
-            "number-is-nan": "^1.0.0"
+            "has-flag": "^3.0.0"
           }
-        },
-        "js-tokens": {
+        }
+      }
+    },
+    "chokidar": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
+      "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "anymatch": "~3.1.1",
+        "braces": "~3.0.2",
+        "fsevents": "~2.1.2",
+        "glob-parent": "~5.1.0",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.4.0"
+      },
+      "dependencies": {
+        "braces": {
           "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
-          "dev": true
-        },
-        "jsesc": {
-          "version": "1.3.0",
-          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
-          "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
-          "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-          "dev": true
-        },
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
+            "fill-range": "^7.0.1"
           }
         },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "brace-expansion": "^1.1.7"
+            "to-regex-range": "^5.0.1"
           }
         },
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+        "glob-parent": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+          "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "minimist": "0.0.8"
+            "is-glob": "^4.0.1"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-          "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-          "dev": true
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-          "dev": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-          "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-          "dev": true
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-          "dev": true
-        },
-        "private": {
-          "version": "0.1.8",
-          "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-          "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
-          "dev": true
-        },
-        "regenerator-runtime": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-          "dev": true
-        },
-        "repeating": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
-          "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
           "dev": true,
-          "requires": {
-            "is-finite": "^1.0.0"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-          "dev": true
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
+          "optional": true
         },
-        "source-map-support": {
-          "version": "0.4.18",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
-          "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "source-map": "^0.5.6"
+            "is-number": "^7.0.0"
           }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+        }
+      }
+    },
+    "chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "ansi-regex": "^2.0.0"
+            "is-descriptor": "^0.1.0"
           }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        },
-        "to-fast-properties": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
-          "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
-          "dev": true
-        },
-        "trim-right": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
-          "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
-          "dev": true
         }
       }
     },
-    "babel-loader": {
-      "version": "7.1.5",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz",
-      "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
+    "clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "dev": true
+    },
+    "clipboard": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
+      "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
+      "requires": {
+        "good-listener": "^1.2.2",
+        "select": "^1.1.2",
+        "tiny-emitter": "^2.0.0"
+      }
+    },
+    "cliui": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
       "dev": true,
       "requires": {
-        "find-cache-dir": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "mkdirp": "^0.5.1"
+        "string-width": "^3.1.0",
+        "strip-ansi": "^5.2.0",
+        "wrap-ansi": "^5.1.0"
       },
       "dependencies": {
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "commondir": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-          "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-          "dev": true
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "find-cache-dir": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
-          "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
-          "dev": true,
-          "requires": {
-            "commondir": "^1.0.1",
-            "make-dir": "^1.0.0",
-            "pkg-dir": "^2.0.0"
-          }
-        },
-        "find-up": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-          "dev": true,
-          "requires": {
-            "locate-path": "^2.0.0"
-          }
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
           "dev": true
         },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
           }
         },
-        "locate-path": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "dev": true,
           "requires": {
-            "p-locate": "^2.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "make-dir": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
-          "dev": true,
-          "requires": {
-            "pify": "^3.0.0"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-          "dev": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "p-limit": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-          "dev": true,
-          "requires": {
-            "p-try": "^1.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-          "dev": true,
-          "requires": {
-            "p-limit": "^1.1.0"
-          }
-        },
-        "p-try": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-          "dev": true
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        },
-        "pkg-dir": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
-          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
-          "dev": true,
-          "requires": {
-            "find-up": "^2.1.0"
+            "ansi-regex": "^4.1.0"
           }
         }
       }
     },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+    "clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
       "dev": true,
       "requires": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
       }
     },
-    "binary-extensions": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
-      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
       "dev": true
     },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
       "dev": true,
       "requires": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
       }
     },
-    "cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
       "dev": true,
       "requires": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
+        "color-name": "1.1.3"
       }
     },
-    "chokidar": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
-      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-      "dev": true,
-      "requires": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "fsevents": "^1.2.7",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
-      }
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
     },
-    "class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
       "dev": true,
       "requires": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
+        "delayed-stream": "~1.0.0"
       }
     },
-    "clipboard": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz",
-      "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==",
-      "requires": {
-        "good-listener": "^1.2.2",
-        "select": "^1.1.2",
-        "tiny-emitter": "^2.0.0"
-      },
-      "dependencies": {
-        "delegate": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
-          "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
-        },
-        "good-listener": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
-          "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-          "requires": {
-            "delegate": "^3.1.2"
-          }
-        },
-        "select": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
-          "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
-        },
-        "tiny-emitter": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
-          "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow=="
-        }
-      }
+    "commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
     },
-    "collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-      "dev": true,
-      "requires": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
-      }
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
     },
     "component-emitter": {
       "version": "1.3.0",
@@ -875,6 +1357,59 @@
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+      "dev": true
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+      "dev": true
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
+      }
+    },
     "copy-descriptor": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -882,813 +1417,883 @@
       "dev": true
     },
     "copy-webpack-plugin": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
-      "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz",
+      "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==",
       "dev": true,
       "requires": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
-        "globby": "^7.1.1",
-        "is-glob": "^4.0.0",
-        "loader-utils": "^1.1.0",
-        "minimatch": "^3.0.4",
-        "p-limit": "^1.0.0",
-        "serialize-javascript": "^1.4.0"
+        "cacache": "^15.0.4",
+        "fast-glob": "^3.2.4",
+        "find-cache-dir": "^3.3.1",
+        "glob-parent": "^5.1.1",
+        "globby": "^11.0.1",
+        "loader-utils": "^2.0.0",
+        "normalize-path": "^3.0.0",
+        "p-limit": "^3.0.1",
+        "schema-utils": "^2.7.0",
+        "serialize-javascript": "^4.0.0",
+        "webpack-sources": "^1.4.3"
       },
       "dependencies": {
-        "aproba": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-          "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-          "dev": true
-        },
-        "array-union": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-          "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-          "dev": true,
-          "requires": {
-            "array-uniq": "^1.0.1"
+        "cacache": {
+          "version": "15.0.5",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz",
+          "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==",
+          "dev": true,
+          "requires": {
+            "@npmcli/move-file": "^1.0.1",
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "glob": "^7.1.4",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^6.0.0",
+            "minipass": "^3.1.1",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^1.0.3",
+            "p-map": "^4.0.0",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^3.0.2",
+            "ssri": "^8.0.0",
+            "tar": "^6.0.2",
+            "unique-filename": "^1.1.1"
           }
         },
-        "array-uniq": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-          "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
-          "dev": true
-        },
-        "arrify": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-          "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+        "chownr": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
           "dev": true
         },
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
           "dev": true
         },
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "bluebird": {
-          "version": "3.5.3",
-          "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
-          "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
-          "dev": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+        "find-cache-dir": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+          "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
           "dev": true,
           "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
+            "commondir": "^1.0.1",
+            "make-dir": "^3.0.2",
+            "pkg-dir": "^4.1.0"
           }
         },
-        "buffer-from": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-          "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-          "dev": true
-        },
-        "cacache": {
-          "version": "10.0.4",
-          "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
-          "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
           "dev": true,
           "requires": {
-            "bluebird": "^3.5.1",
-            "chownr": "^1.0.1",
-            "glob": "^7.1.2",
-            "graceful-fs": "^4.1.11",
-            "lru-cache": "^4.1.1",
-            "mississippi": "^2.0.0",
-            "mkdirp": "^0.5.1",
-            "move-concurrently": "^1.0.1",
-            "promise-inflight": "^1.0.1",
-            "rimraf": "^2.6.2",
-            "ssri": "^5.2.4",
-            "unique-filename": "^1.1.0",
-            "y18n": "^4.0.0"
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
           }
         },
-        "chownr": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
-          "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
-          "dev": true
-        },
-        "commondir": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-          "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-          "dev": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-          "dev": true
-        },
-        "concat-stream": {
-          "version": "1.6.2",
-          "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-          "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+        "glob-parent": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+          "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
           "dev": true,
           "requires": {
-            "buffer-from": "^1.0.0",
-            "inherits": "^2.0.3",
-            "readable-stream": "^2.2.2",
-            "typedarray": "^0.0.6"
+            "is-glob": "^4.0.1"
           }
         },
-        "copy-concurrently": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-          "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+        "json5": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+          "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
           "dev": true,
           "requires": {
-            "aproba": "^1.1.1",
-            "fs-write-stream-atomic": "^1.0.8",
-            "iferr": "^0.1.5",
-            "mkdirp": "^0.5.1",
-            "rimraf": "^2.5.4",
-            "run-queue": "^1.0.0"
+            "minimist": "^1.2.5"
           }
         },
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-          "dev": true
-        },
-        "cyclist": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
-          "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
-          "dev": true
-        },
-        "dir-glob": {
+        "loader-utils": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
-          "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
-          "dev": true,
-          "requires": {
-            "arrify": "^1.0.1",
-            "path-type": "^3.0.0"
-          }
-        },
-        "duplexify": {
-          "version": "3.6.1",
-          "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
-          "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
           "dev": true,
           "requires": {
-            "end-of-stream": "^1.0.0",
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.0.0",
-            "stream-shift": "^1.0.0"
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
           }
         },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "end-of-stream": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
-          "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
           "dev": true,
           "requires": {
-            "once": "^1.4.0"
+            "p-locate": "^4.1.0"
           }
         },
-        "find-cache-dir": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
-          "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
           "dev": true,
           "requires": {
-            "commondir": "^1.0.1",
-            "make-dir": "^1.0.0",
-            "pkg-dir": "^2.0.0"
+            "yallist": "^4.0.0"
           }
         },
-        "find-up": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
           "dev": true,
           "requires": {
-            "locate-path": "^2.0.0"
+            "semver": "^6.0.0"
           }
         },
-        "flush-write-stream": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
-          "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.0.4"
-          }
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
         },
-        "from2": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-          "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+        "p-limit": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz",
+          "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==",
           "dev": true,
           "requires": {
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.0.0"
+            "p-try": "^2.0.0"
           }
         },
-        "fs-write-stream-atomic": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
-          "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
           "dev": true,
           "requires": {
-            "graceful-fs": "^4.1.2",
-            "iferr": "^0.1.5",
-            "imurmurhash": "^0.1.4",
-            "readable-stream": "1 || 2"
+            "p-limit": "^2.2.0"
+          },
+          "dependencies": {
+            "p-limit": {
+              "version": "2.3.0",
+              "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+              "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+              "dev": true,
+              "requires": {
+                "p-try": "^2.0.0"
+              }
+            }
           }
         },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
           "dev": true
         },
-        "glob": {
-          "version": "7.1.3",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
-          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+        "pkg-dir": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+          "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
+            "find-up": "^4.0.0"
           }
         },
-        "globby": {
-          "version": "7.1.1",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
-          "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
           "dev": true,
           "requires": {
-            "array-union": "^1.0.1",
-            "dir-glob": "^2.0.0",
-            "glob": "^7.1.2",
-            "ignore": "^3.3.5",
-            "pify": "^3.0.0",
-            "slash": "^1.0.0"
+            "glob": "^7.1.3"
           }
         },
-        "graceful-fs": {
-          "version": "4.1.15",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
-          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
-          "dev": true
-        },
-        "iferr": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
-          "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
-          "dev": true
-        },
-        "ignore": {
-          "version": "3.3.10",
-          "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
-          "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
-          "dev": true
-        },
-        "imurmurhash": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-          "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
         },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+        "ssri": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
+          "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==",
           "dev": true,
           "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
+            "minipass": "^3.1.1"
           }
         },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        },
-        "is-extglob": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+        "tar": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz",
+          "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==",
           "dev": true,
           "requires": {
-            "is-extglob": "^2.1.1"
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "minipass": "^3.0.0",
+            "minizlib": "^2.1.0",
+            "mkdirp": "^1.0.3",
+            "yallist": "^4.0.0"
           }
         },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
           "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+        }
+      }
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
           "dev": true
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "locate-path": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-          "dev": true,
-          "requires": {
-            "p-locate": "^2.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
+        }
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "cross-spawn": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+      "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+      "dev": true,
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "which": "^1.2.9"
+      },
+      "dependencies": {
         "lru-cache": {
-          "version": "4.1.4",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
-          "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
           "dev": true,
           "requires": {
             "pseudomap": "^1.0.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "make-dir": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
-          "dev": true,
-          "requires": {
-            "pify": "^3.0.0"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
+            "yallist": "^2.1.2"
           }
         },
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
           "dev": true
-        },
-        "mississippi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
-          "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+        }
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+      "dev": true,
+      "requires": {
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
+      }
+    },
+    "css-loader": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.2.1.tgz",
+      "integrity": "sha512-q40kYdcBNzMvkIImCL2O+wk8dh+RGwPPV9Dfz3n7XtOYPXqe2Z6VgtvoxjkLHz02gmhepG9sOAJOUlx+3hHsBg==",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.3.1",
+        "cssesc": "^3.0.0",
+        "icss-utils": "^4.1.1",
+        "loader-utils": "^1.2.3",
+        "normalize-path": "^3.0.0",
+        "postcss": "^7.0.23",
+        "postcss-modules-extract-imports": "^2.0.0",
+        "postcss-modules-local-by-default": "^3.0.2",
+        "postcss-modules-scope": "^2.1.1",
+        "postcss-modules-values": "^3.0.0",
+        "postcss-value-parser": "^4.0.2",
+        "schema-utils": "^2.6.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.6.1",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz",
+          "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==",
           "dev": true,
           "requires": {
-            "concat-stream": "^1.5.0",
-            "duplexify": "^3.4.2",
-            "end-of-stream": "^1.1.0",
-            "flush-write-stream": "^1.0.0",
-            "from2": "^2.1.0",
-            "parallel-transform": "^1.1.0",
-            "pump": "^2.0.1",
-            "pumpify": "^1.3.3",
-            "stream-each": "^1.1.0",
-            "through2": "^2.0.0"
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.1"
           }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+        }
+      }
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true
+    },
+    "csv-parse": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.12.0.tgz",
+      "integrity": "sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg=="
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "cyclist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+      "dev": true
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "minimist": "0.0.8"
+            "kind-of": "^6.0.0"
           }
         },
-        "move-concurrently": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
-          "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "aproba": "^1.1.1",
-            "copy-concurrently": "^1.0.0",
-            "fs-write-stream-atomic": "^1.0.8",
-            "mkdirp": "^0.5.1",
-            "rimraf": "^2.5.4",
-            "run-queue": "^1.0.3"
+            "kind-of": "^6.0.0"
           }
         },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "wrappy": "1"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
-        },
-        "p-limit": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "delegate": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+      "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+      "dev": true
+    },
+    "des.js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "detect-file": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
+        }
+      }
+    },
+    "dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "requires": {
+        "path-type": "^4.0.0"
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+      "dev": true
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "elliptic": {
+      "version": "6.5.3",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+      "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.4.0",
+        "brorand": "^1.0.1",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
+        }
+      }
+    },
+    "emoji-regex": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+      "dev": true
+    },
+    "emojis-list": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+      "dev": true
+    },
+    "end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "dev": true,
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
+      "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.5.0",
+        "tapable": "^1.0.0"
+      },
+      "dependencies": {
+        "memory-fs": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+          "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
           "dev": true,
           "requires": {
-            "p-try": "^1.0.0"
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
           }
-        },
-        "p-locate": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+        }
+      }
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+      "dev": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es6-shim": {
+      "version": "0.35.5",
+      "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.5.tgz",
+      "integrity": "sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg=="
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "eslint-scope": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+      "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "esprima": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz",
+      "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k="
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true
+    },
+    "events": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+      "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+      "dev": true
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+      "dev": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "p-limit": "^1.1.0"
+            "is-descriptor": "^0.1.0"
           }
         },
-        "p-try": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-          "dev": true
-        },
-        "parallel-transform": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
-          "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "cyclist": "~0.2.2",
-            "inherits": "^2.0.3",
-            "readable-stream": "^2.1.5"
+            "is-extendable": "^0.1.0"
           }
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-          "dev": true
-        },
-        "path-is-absolute": {
+        }
+      }
+    },
+    "expand-tilde": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+      "dev": true,
+      "requires": {
+        "homedir-polyfill": "^1.0.1"
+      }
+    },
+    "expose-loader": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz",
+      "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==",
+      "dev": true
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
           "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-          "dev": true
-        },
-        "path-type": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "dev": true,
           "requires": {
-            "pify": "^3.0.0"
+            "is-plain-object": "^2.0.4"
           }
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        },
-        "pkg-dir": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
-          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+        }
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "find-up": "^2.1.0"
+            "is-descriptor": "^1.0.0"
           }
         },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
-          "dev": true
-        },
-        "promise-inflight": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-          "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
-          "dev": true
-        },
-        "pseudomap": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-          "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-          "dev": true
-        },
-        "pump": {
+        "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
+            "is-extendable": "^0.1.0"
           }
         },
-        "pumpify": {
-          "version": "1.5.1",
-          "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-          "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "duplexify": "^3.6.0",
-            "inherits": "^2.0.3",
-            "pump": "^2.0.0"
+            "kind-of": "^6.0.0"
           }
         },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
+            "kind-of": "^6.0.0"
           }
         },
-        "rimraf": {
-          "version": "2.6.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-          "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "glob": "^7.0.5"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
-        },
-        "run-queue": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
-          "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
-          "dev": true,
-          "requires": {
-            "aproba": "^1.1.1"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-          "dev": true
-        },
-        "serialize-javascript": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
-          "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
-          "dev": true
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
-        },
-        "ssri": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
-          "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "^5.1.1"
-          }
-        },
-        "stream-each": {
-          "version": "1.2.3",
-          "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
-          "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
-          "dev": true,
-          "requires": {
-            "end-of-stream": "^1.1.0",
-            "stream-shift": "^1.0.0"
-          }
-        },
-        "stream-shift": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
-          "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
-          "dev": true
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "through2": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-          "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-          "dev": true,
-          "requires": {
-            "readable-stream": "~2.3.6",
-            "xtend": "~4.0.1"
-          }
-        },
-        "typedarray": {
-          "version": "0.0.6",
-          "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-          "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
-          "dev": true
-        },
-        "unique-filename": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
-          "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
-          "dev": true,
-          "requires": {
-            "unique-slug": "^2.0.0"
-          }
-        },
-        "unique-slug": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
-          "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
-          "dev": true,
-          "requires": {
-            "imurmurhash": "^0.1.4"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "dev": true
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-          "dev": true
-        },
-        "xtend": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-          "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
-          "dev": true
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
-          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
-          "dev": true
         }
       }
     },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-      "dev": true
-    },
-    "css-loader": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
-      "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "^6.26.0",
-        "css-selector-tokenizer": "^0.7.0",
-        "icss-utils": "^2.1.0",
-        "loader-utils": "^1.0.2",
-        "lodash": "^4.17.11",
-        "postcss": "^6.0.23",
-        "postcss-modules-extract-imports": "^1.2.0",
-        "postcss-modules-local-by-default": "^1.2.0",
-        "postcss-modules-scope": "^1.1.0",
-        "postcss-modules-values": "^1.3.0",
-        "postcss-value-parser": "^3.3.0",
-        "source-list-map": "^2.0.0"
+    "extract-text-webpack-plugin": {
+      "version": "4.0.0-beta.0",
+      "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz",
+      "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==",
+      "dev": true,
+      "requires": {
+        "async": "^2.4.1",
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.4.5",
+        "webpack-sources": "^1.1.0"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "babel-code-frame": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
-          "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+        "ajv": {
+          "version": "6.6.0",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.0.tgz",
+          "integrity": "sha512-ZCIMdm75ps9usdeb0GQL9rKOUlTtS0p0vU2nQVXgRIu6Yb00G9GY7AvbVLwTQ5Po4JDKIwJlT5nwggoRDrDVAw==",
           "dev": true,
           "requires": {
-            "chalk": "^1.1.3",
-            "esutils": "^2.0.2",
-            "js-tokens": "^3.0.2"
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
           }
         },
-        "big.js": {
+        "ajv-keywords": {
           "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
           "dev": true
         },
-        "css-selector-tokenizer": {
-          "version": "0.7.1",
-          "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
-          "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
+        "async": {
+          "version": "2.6.1",
+          "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+          "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
           "dev": true,
           "requires": {
-            "cssesc": "^0.1.0",
-            "fastparse": "^1.1.1",
-            "regexpu-core": "^1.0.0"
+            "lodash": "^4.17.10"
           }
         },
-        "cssesc": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
-          "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
           "dev": true
         },
         "emojis-list": {
@@ -1697,69 +2302,27 @@
           "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
           "dev": true
         },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-          "dev": true
-        },
-        "esutils": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-          "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-          "dev": true
-        },
-        "fastparse": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
-          "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
           "dev": true
         },
-        "has-ansi": {
+        "fast-json-stable-stringify": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-          "dev": true
-        },
-        "icss-replace-symbols": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
-          "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
-          "dev": true
-        },
-        "icss-utils": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
-          "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
-          "dev": true,
-          "requires": {
-            "postcss": "^6.0.1"
-          }
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+          "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+          "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
           "dev": true
         },
-        "jsesc": {
-          "version": "0.5.0",
-          "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
           "dev": true
         },
         "json5": {
           "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
@@ -1775,244 +2338,173 @@
           }
         },
         "lodash": {
-          "version": "4.17.15",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+          "version": "4.17.19",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+          "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
+          "dev": true
+        },
+        "punycode": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
           "dev": true
         },
-        "postcss": {
-          "version": "6.0.23",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
-          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+        "schema-utils": {
+          "version": "0.4.7",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
           "dev": true,
           "requires": {
-            "chalk": "^2.4.1",
-            "source-map": "^0.6.1",
-            "supports-color": "^5.4.0"
-          },
-          "dependencies": {
-            "ansi-styles": {
-              "version": "3.2.1",
-              "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-              "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-              "dev": true,
-              "requires": {
-                "color-convert": "^1.9.0"
-              }
-            },
-            "chalk": {
-              "version": "2.4.1",
-              "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
-              "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
-              "dev": true,
-              "requires": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-              }
-            },
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "dev": true,
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
-        "postcss-modules-extract-imports": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
-          "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
+        "source-list-map": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+          "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "uri-js": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+          "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
           "dev": true,
           "requires": {
-            "postcss": "^6.0.1"
+            "punycode": "^2.1.0"
           }
         },
-        "postcss-modules-local-by-default": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
-          "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+        "webpack-sources": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+          "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
           "dev": true,
           "requires": {
-            "css-selector-tokenizer": "^0.7.0",
-            "postcss": "^6.0.1"
+            "source-list-map": "^2.0.0",
+            "source-map": "~0.6.1"
           }
-        },
-        "postcss-modules-scope": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
-          "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "dev": true
+    },
+    "fast-glob": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+      "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.0",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.2",
+        "picomatch": "^2.2.1"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
           "dev": true,
           "requires": {
-            "css-selector-tokenizer": "^0.7.0",
-            "postcss": "^6.0.1"
+            "fill-range": "^7.0.1"
           }
         },
-        "postcss-modules-values": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
-          "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
           "dev": true,
           "requires": {
-            "icss-replace-symbols": "^1.1.0",
-            "postcss": "^6.0.1"
+            "to-regex-range": "^5.0.1"
           }
         },
-        "postcss-value-parser": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-          "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-          "dev": true
-        },
-        "regenerate": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
-          "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
-          "dev": true
-        },
-        "regexpu-core": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
-          "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+        "glob-parent": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+          "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
           "dev": true,
           "requires": {
-            "regenerate": "^1.2.1",
-            "regjsgen": "^0.2.0",
-            "regjsparser": "^0.1.4"
+            "is-glob": "^4.0.1"
           }
         },
-        "regjsgen": {
-          "version": "0.2.0",
-          "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
-          "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
           "dev": true
         },
-        "regjsparser": {
-          "version": "0.1.5",
-          "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
-          "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+        "micromatch": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
           "dev": true,
           "requires": {
-            "jsesc": "~0.5.0"
+            "braces": "^3.0.1",
+            "picomatch": "^2.0.5"
           }
         },
-        "source-list-map": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-          "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
           "dev": true,
           "requires": {
-            "ansi-regex": "^2.0.0"
+            "is-number": "^7.0.0"
           }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
         }
       }
     },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "requires": {
-        "ms": "2.0.0"
-      }
-    },
-    "decode-uri-component": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
       "dev": true
     },
-    "define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+    "fastq": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
+      "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
       "dev": true,
       "requires": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
-      "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
+        "reusify": "^1.0.4"
       }
     },
-    "es6-shim": {
-      "version": "0.35.4",
-      "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.4.tgz",
-      "integrity": "sha512-oJidbXjN/VWXZJs41E9JEqWzcFbjt43JupimIoVX82Thzt5qy1CiYezdhRmWkj3KOuwJ106IG/ZZrcFC6fgIUQ=="
+    "figgy-pudding": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
+      "dev": true
     },
-    "expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
       "dev": true,
       "requires": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
         "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
       },
       "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
         "extend-shallow": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
@@ -2024,1117 +2516,930 @@
         }
       }
     },
-    "expose-loader": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz",
-      "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==",
+    "find-cache-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^2.0.0",
+        "pkg-dir": "^3.0.0"
+      }
+    },
+    "find-up": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+      "dev": true,
+      "requires": {
+        "locate-path": "^3.0.0"
+      }
+    },
+    "findup-sync": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+      "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+      "dev": true,
+      "requires": {
+        "detect-file": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
+      }
+    },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "font-awesome": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+      "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
       "dev": true
     },
-    "extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
       "dev": true,
       "requires": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+      "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+      "dev": true,
+      "optional": true
+    },
+    "fstream": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      }
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      }
+    },
+    "gaze": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+      "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+      "dev": true,
+      "requires": {
+        "globule": "^1.0.0"
+      }
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
       },
       "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
           "dev": true,
+          "optional": true,
           "requires": {
-            "is-plain-object": "^2.0.4"
+            "is-extglob": "^2.1.0"
           }
         }
       }
     },
-    "extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+    "global-modules": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
       "dev": true,
       "requires": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
+        "global-prefix": "^3.0.0"
       },
       "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+        "global-prefix": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+          "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
           "dev": true,
           "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
+            "ini": "^1.3.5",
+            "kind-of": "^6.0.2",
+            "which": "^1.3.1"
           }
         }
       }
     },
-    "extract-text-webpack-plugin": {
-      "version": "4.0.0-beta.0",
-      "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz",
-      "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==",
+    "global-prefix": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
       "dev": true,
       "requires": {
-        "async": "^2.4.1",
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^0.4.5",
-        "webpack-sources": "^1.1.0"
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
+      }
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true
+    },
+    "globby": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+      "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+      "dev": true,
+      "requires": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.1.1",
+        "ignore": "^5.1.4",
+        "merge2": "^1.3.0",
+        "slash": "^3.0.0"
+      }
+    },
+    "globule": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+      "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
+      "dev": true,
+      "requires": {
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
+      }
+    },
+    "good-listener": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+      "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+      "requires": {
+        "delegate": "^3.1.2"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+      "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
       },
       "dependencies": {
-        "ajv": {
-          "version": "6.6.0",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.0.tgz",
-          "integrity": "sha512-ZCIMdm75ps9usdeb0GQL9rKOUlTtS0p0vU2nQVXgRIu6Yb00G9GY7AvbVLwTQ5Po4JDKIwJlT5nwggoRDrDVAw==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "ajv-keywords": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
-          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
-          "dev": true
-        },
-        "async": {
-          "version": "2.6.1",
-          "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
-          "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
-          "dev": true,
-          "requires": {
-            "lodash": "^4.17.10"
-          }
-        },
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-          "dev": true
-        },
-        "fast-json-stable-stringify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-          "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-          "dev": true
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "lodash": {
-          "version": "4.17.15",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
-          "dev": true
-        },
-        "punycode": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
-          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "source-list-map": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-          "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "uri-js": {
-          "version": "4.2.2",
-          "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-          "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
-          "dev": true,
-          "requires": {
-            "punycode": "^2.1.0"
-          }
-        },
-        "webpack-sources": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
-          "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
           "dev": true,
           "requires": {
-            "source-list-map": "^2.0.0",
-            "source-map": "~0.6.1"
+            "is-buffer": "^1.1.5"
           }
         }
       }
     },
-    "fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+    "hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+      "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
       "dev": true,
       "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
       },
       "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
           "dev": true,
           "requires": {
-            "is-extendable": "^0.1.0"
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
           }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+          "dev": true
         }
       }
     },
-    "font-awesome": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
-      "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
     },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-      "dev": true
+    "highlight.js": {
+      "version": "9.18.3",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz",
+      "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ=="
     },
-    "fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "dev": true,
       "requires": {
-        "map-cache": "^0.2.2"
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
-    "fs.realpath": {
+    "homedir-polyfill": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+      "dev": true,
+      "requires": {
+        "parse-passwd": "^1.0.0"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+      "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+      "dev": true
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-browserify": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
       "dev": true
     },
-    "fsevents": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
-      "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+    "humanize": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/humanize/-/humanize-0.0.9.tgz",
+      "integrity": "sha1-GZT/rs3+nEQe0r2sdFK3u0yeQaQ="
+    },
+    "icss-utils": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+      "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.14"
+      }
+    },
+    "ieee754": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "5.1.8",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+      "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+      "dev": true
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+      "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "in-publish": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
+      "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==",
+      "dev": true
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true
+    },
+    "interpret": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+      "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "nan": "^2.12.1",
-        "node-pre-gyp": "^0.12.0"
+        "kind-of": "^3.0.2"
       },
       "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^2.0.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "chownr": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "deep-extend": {
-          "version": "0.6.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
-          "optional": true,
           "requires": {
-            "aproba": "^1.0.3",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.0",
-            "object-assign": "^4.1.0",
-            "signal-exit": "^3.0.0",
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wide-align": "^1.1.0"
+            "is-buffer": "^1.1.5"
           }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "bundled": true,
+        }
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "binary-extensions": "^2.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
-          "optional": true,
           "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
+            "is-buffer": "^1.1.5"
           }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.24",
-          "bundled": true,
+        }
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
+        }
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+      "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+      "dev": true
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
-          "optional": true,
           "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
+            "is-buffer": "^1.1.5"
           }
-        },
-        "ignore-walk": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "^3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "minipass": {
-          "version": "2.3.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.0"
-          }
-        },
-        "minizlib": {
-          "version": "1.2.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.3.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "debug": "^4.1.0",
-            "iconv-lite": "^0.4.4",
-            "sax": "^1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.12.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "^1.0.2",
-            "mkdirp": "^0.5.1",
-            "needle": "^2.2.1",
-            "nopt": "^4.0.1",
-            "npm-packlist": "^1.1.6",
-            "npmlog": "^4.0.2",
-            "rc": "^1.2.7",
-            "rimraf": "^2.6.1",
-            "semver": "^5.3.0",
-            "tar": "^4"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.4.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "^3.0.1",
-            "npm-bundled": "^1.0.1"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "~1.1.2",
-            "console-control-strings": "~1.1.0",
-            "gauge": "~2.7.3",
-            "set-blocking": "~2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.8",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "^0.6.0",
-            "ini": "~1.3.0",
-            "minimist": "^1.2.0",
-            "strip-json-comments": "~2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.7.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.8",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chownr": "^1.1.1",
-            "fs-minipass": "^1.2.5",
-            "minipass": "^2.3.4",
-            "minizlib": "^1.1.1",
-            "mkdirp": "^0.5.0",
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "string-width": "^1.0.2 || 2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
         }
       }
     },
-    "fstream": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
-      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
       "dev": true,
       "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
+        "isobject": "^3.0.1"
       }
     },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
       "dev": true
     },
-    "glob": {
-      "version": "7.1.4",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-      "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-      "dev": true,
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      }
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
     },
-    "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
-      "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+      "dev": true
     },
-    "graceful-fs": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
-      "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
       "dev": true
     },
-    "has-value": {
+    "isarray": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "dev": true,
-      "requires": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
     },
-    "has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "dev": true,
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
     },
-    "highlight.js": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz",
-      "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A=="
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
     },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
     },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+    "jquery": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
+      "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
+    },
+    "jquery-ui": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz",
+      "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE="
+    },
+    "js-base64": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.3.tgz",
+      "integrity": "sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg==",
       "dev": true
     },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
     },
-    "is-binary-path": {
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
+    },
+    "json5": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
       "dev": true,
       "requires": {
-        "binary-extensions": "^1.0.0"
+        "minimist": "^1.2.0"
       }
     },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true
-    },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
       }
     },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+    "kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+      "dev": true
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
       "dev": true,
       "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
       },
       "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
       }
     },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
       "dev": true
     },
-    "is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+    "loader-utils": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+      "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
       "dev": true,
       "requires": {
-        "is-extglob": "^2.1.1"
+        "big.js": "^5.2.2",
+        "emojis-list": "^2.0.0",
+        "json5": "^1.0.1"
       }
     },
-    "is-number": {
+    "locate-path": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "p-locate": "^3.0.0",
+        "path-exists": "^3.0.0"
       }
     },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+    "lodash": {
+      "version": "4.17.20",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
       "dev": true,
       "requires": {
-        "isobject": "^3.0.1"
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
       }
     },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-      "dev": true
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "dev": true
-    },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-      "dev": true
-    },
-    "jquery": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.0.tgz",
-      "integrity": "sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ=="
-    },
-    "jquery-ui": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz",
-      "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE="
-    },
-    "kind-of": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-      "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-      "dev": true
-    },
-    "lodash": {
-      "version": "4.17.15",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
-      "dev": true
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "requires": {
+        "yallist": "^3.0.2"
+      }
     },
-    "lodash.mergewith": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
-      "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
-      "dev": true
+    "make-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+      "dev": true,
+      "requires": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      }
     },
     "map-cache": {
       "version": "0.2.2",
@@ -3142,6 +3447,12 @@
       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
       "dev": true
     },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true
+    },
     "map-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
@@ -3151,6 +3462,51 @@
         "object-visit": "^1.0.0"
       }
     },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      }
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
+    },
     "micromatch": {
       "version": "3.1.10",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -3172,21 +3528,151 @@
         "to-regex": "^3.0.2"
       }
     },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+    "microplugin": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/microplugin/-/microplugin-0.0.3.tgz",
+      "integrity": "sha1-H8Lhu3yeGegr2Eu6kTe75xJQ2M0="
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
+        }
+      }
+    },
+    "mime-db": {
+      "version": "1.44.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.27",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+      "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.44.0"
+      }
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+      "dev": true
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "dev": true,
       "requires": {
         "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+      "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz",
+      "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^3.0.0",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
     "mixin-deep": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -3209,12 +3695,26 @@
       }
     },
     "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
       "dev": true,
       "requires": {
-        "minimist": "0.0.8"
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
       }
     },
     "ms": {
@@ -3227,8 +3727,7 @@
       "version": "2.14.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
       "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
-      "dev": true,
-      "optional": true
+      "dev": true
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -3249,10 +3748,89 @@
         "to-regex": "^3.0.1"
       }
     },
+    "neo-async": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+      "dev": true
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+      "dev": true
+    },
+    "node-gyp": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+      "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+      "dev": true,
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "dev": true
+        }
+      }
+    },
+    "node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+      "dev": true,
+      "requires": {
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.1",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "^1.0.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
     "node-sass": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.10.0.tgz",
-      "integrity": "sha512-fDQJfXszw6vek63Fe/ldkYXmRYK/QS6NbvM3i5oEo9ntPDy4XX7BcKZyTKv+/kSSxRtXXc7l+MSwEmYc0CSy6Q==",
+      "version": "4.14.1",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
+      "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
       "dev": true,
       "requires": {
         "async-foreach": "^0.1.3",
@@ -3262,182 +3840,27 @@
         "get-stdin": "^4.0.1",
         "glob": "^7.0.3",
         "in-publish": "^2.0.0",
-        "lodash.assign": "^4.2.0",
-        "lodash.clonedeep": "^4.3.2",
-        "lodash.mergewith": "^4.6.0",
+        "lodash": "^4.17.15",
         "meow": "^3.7.0",
         "mkdirp": "^0.5.1",
-        "nan": "^2.10.0",
+        "nan": "^2.13.2",
         "node-gyp": "^3.8.0",
         "npmlog": "^4.0.0",
         "request": "^2.88.0",
-        "sass-graph": "^2.2.4",
+        "sass-graph": "2.2.5",
         "stdout-stream": "^1.4.0",
         "true-case-path": "^1.0.2"
       },
       "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-          "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-          "dev": true
-        },
-        "ajv": {
-          "version": "6.5.5",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
-          "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "amdefine": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
-          "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
-          "dev": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
         "ansi-styles": {
           "version": "2.2.1",
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
           "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
           "dev": true
         },
-        "aproba": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-          "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-          "dev": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.5",
-          "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
-          "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
-          "dev": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^2.0.6"
-          }
-        },
-        "array-find-index": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
-          "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
-          "dev": true
-        },
-        "asn1": {
-          "version": "0.2.4",
-          "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
-          "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
-          "dev": true,
-          "requires": {
-            "safer-buffer": "~2.1.0"
-          }
-        },
-        "assert-plus": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-          "dev": true
-        },
-        "async-foreach": {
-          "version": "0.1.3",
-          "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
-          "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
-          "dev": true
-        },
-        "asynckit": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-          "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-          "dev": true
-        },
-        "aws-sign2": {
-          "version": "0.7.0",
-          "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-          "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
-          "dev": true
-        },
-        "aws4": {
-          "version": "1.8.0",
-          "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
-          "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
-          "dev": true
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-          "dev": true
-        },
-        "bcrypt-pbkdf": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-          "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-          "dev": true,
-          "requires": {
-            "tweetnacl": "^0.14.3"
-          }
-        },
-        "block-stream": {
-          "version": "0.0.9",
-          "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-          "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-          "dev": true,
-          "requires": {
-            "inherits": "~2.0.0"
-          }
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-          "dev": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "builtin-modules": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
-          "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
-          "dev": true
-        },
-        "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-          "dev": true
-        },
-        "camelcase-keys": {
-          "version": "2.1.0",
-          "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-          "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^2.0.0",
-            "map-obj": "^1.0.0"
-          }
-        },
-        "caseless": {
-          "version": "0.12.0",
-          "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-          "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
-          "dev": true
-        },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
@@ -3448,4830 +3871,1517 @@
             "supports-color": "^2.0.0"
           }
         },
-        "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wrap-ansi": "^2.0.0"
-          }
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-          "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-          "dev": true
-        },
-        "combined-stream": {
-          "version": "1.0.7",
-          "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
-          "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
-          "dev": true,
-          "requires": {
-            "delayed-stream": "~1.0.0"
-          }
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-          "dev": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-          "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-          "dev": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
           "dev": true
-        },
-        "cross-spawn": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
-          }
-        },
-        "currently-unhandled": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
-          "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+        }
+      }
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "dev": true,
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+      "dev": true,
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "array-find-index": "^1.0.1"
+            "is-descriptor": "^0.1.0"
           }
         },
-        "dashdash": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-          "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "assert-plus": "^1.0.0"
+            "is-buffer": "^1.1.5"
           }
-        },
-        "decamelize": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-          "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-          "dev": true
-        },
-        "delayed-stream": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-          "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-          "dev": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-          "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-          "dev": true
-        },
-        "ecc-jsbn": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-          "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
-          "dev": true,
-          "requires": {
-            "jsbn": "~0.1.0",
-            "safer-buffer": "^2.1.0"
-          }
-        },
-        "error-ex": {
-          "version": "1.3.2",
-          "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-          "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-          "dev": true,
-          "requires": {
-            "is-arrayish": "^0.2.1"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-          "dev": true
-        },
-        "extend": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-          "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
-          "dev": true
-        },
-        "extsprintf": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-          "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
-          "dev": true
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-          "dev": true
-        },
-        "fast-json-stable-stringify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-          "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
-          "dev": true
-        },
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "forever-agent": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-          "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
-          "dev": true
-        },
-        "form-data": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-          "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-          "dev": true,
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.6",
-            "mime-types": "^2.1.12"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-          "dev": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-          "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
-          "dev": true,
-          "requires": {
-            "aproba": "^1.0.3",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.0",
-            "object-assign": "^4.1.0",
-            "signal-exit": "^3.0.0",
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wide-align": "^1.1.0"
-          }
-        },
-        "gaze": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
-          "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
-          "dev": true,
-          "requires": {
-            "globule": "^1.0.0"
-          }
-        },
-        "get-caller-file": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
-          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
-          "dev": true
-        },
-        "get-stdin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-          "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-          "dev": true
-        },
-        "getpass": {
-          "version": "0.1.7",
-          "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-          "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-          "dev": true,
-          "requires": {
-            "assert-plus": "^1.0.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
-          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "globule": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
-          "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
-          "dev": true,
-          "requires": {
-            "glob": "~7.1.1",
-            "lodash": "~4.17.10",
-            "minimatch": "~3.0.2"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.1.15",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
-          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
-          "dev": true
-        },
-        "har-schema": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-          "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
-          "dev": true
-        },
-        "har-validator": {
-          "version": "5.1.3",
-          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-          "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.5.5",
-            "har-schema": "^2.0.0"
-          }
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-          "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
-          "dev": true
-        },
-        "hosted-git-info": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
-          "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
-          "dev": true
-        },
-        "http-signature": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-          "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-          "dev": true,
-          "requires": {
-            "assert-plus": "^1.0.0",
-            "jsprim": "^1.2.2",
-            "sshpk": "^1.7.0"
-          }
-        },
-        "in-publish": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
-          "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
-          "dev": true
-        },
-        "indent-string": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-          "dev": true,
-          "requires": {
-            "repeating": "^2.0.0"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "dev": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        },
-        "invert-kv": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-          "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-          "dev": true
-        },
-        "is-arrayish": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-          "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-          "dev": true
-        },
-        "is-builtin-module": {
-          "version": "1.0.0",
-          "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
-          "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
-          "dev": true,
-          "requires": {
-            "builtin-modules": "^1.0.0"
-          }
-        },
-        "is-finite": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
-          "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "is-typedarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-          "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-          "dev": true
-        },
-        "is-utf8": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-          "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-          "dev": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "isexe": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-          "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-          "dev": true
-        },
-        "isstream": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-          "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-          "dev": true
-        },
-        "js-base64": {
-          "version": "2.4.9",
-          "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
-          "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==",
-          "dev": true
-        },
-        "jsbn": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-          "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-          "dev": true
-        },
-        "json-schema": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-          "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "json-stringify-safe": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-          "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-          "dev": true
-        },
-        "jsprim": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-          "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-          "dev": true,
-          "requires": {
-            "assert-plus": "1.0.0",
-            "extsprintf": "1.3.0",
-            "json-schema": "0.2.3",
-            "verror": "1.10.0"
-          }
-        },
-        "lcid": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-          "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^1.0.0"
-          }
-        },
-        "load-json-file": {
-          "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-          "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "parse-json": "^2.2.0",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0",
-            "strip-bom": "^2.0.0"
-          }
-        },
-        "lodash": {
-          "version": "4.17.15",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
-          "dev": true
-        },
-        "lodash.assign": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
-          "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
-          "dev": true
-        },
-        "lodash.clonedeep": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-          "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
-          "dev": true
-        },
-        "loud-rejection": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
-          "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
-          "dev": true,
-          "requires": {
-            "currently-unhandled": "^0.4.1",
-            "signal-exit": "^3.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "4.1.4",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
-          "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
-          "dev": true,
-          "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "map-obj": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-          "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-          "dev": true
-        },
-        "meow": {
-          "version": "3.7.0",
-          "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-          "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-          "dev": true,
-          "requires": {
-            "camelcase-keys": "^2.0.0",
-            "decamelize": "^1.1.2",
-            "loud-rejection": "^1.0.0",
-            "map-obj": "^1.0.1",
-            "minimist": "^1.1.3",
-            "normalize-package-data": "^2.3.4",
-            "object-assign": "^4.0.1",
-            "read-pkg-up": "^1.0.1",
-            "redent": "^1.0.0",
-            "trim-newlines": "^1.0.0"
-          }
-        },
-        "mime-db": {
-          "version": "1.37.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
-          "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
-          "dev": true
-        },
-        "mime-types": {
-          "version": "2.1.21",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
-          "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
-          "dev": true,
-          "requires": {
-            "mime-db": "~1.37.0"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-          "dev": true,
-          "requires": {
-            "minimist": "0.0.8"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "0.0.8",
-              "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-              "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-              "dev": true
-            }
-          }
-        },
-        "nan": {
-          "version": "2.11.1",
-          "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
-          "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
-          "dev": true
-        },
-        "node-gyp": {
-          "version": "3.8.0",
-          "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
-          "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
-          "dev": true,
-          "requires": {
-            "fstream": "^1.0.0",
-            "glob": "^7.0.3",
-            "graceful-fs": "^4.1.2",
-            "mkdirp": "^0.5.0",
-            "nopt": "2 || 3",
-            "npmlog": "0 || 1 || 2 || 3 || 4",
-            "osenv": "0",
-            "request": "^2.87.0",
-            "rimraf": "2",
-            "semver": "~5.3.0",
-            "tar": "^2.0.0",
-            "which": "1"
-          },
-          "dependencies": {
-            "semver": {
-              "version": "5.3.0",
-              "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-              "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
-              "dev": true
-            }
-          }
-        },
-        "nopt": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-          "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-          "dev": true,
-          "requires": {
-            "abbrev": "1"
-          }
-        },
-        "normalize-package-data": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-          "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
-          "dev": true,
-          "requires": {
-            "hosted-git-info": "^2.1.4",
-            "is-builtin-module": "^1.0.0",
-            "semver": "2 || 3 || 4 || 5",
-            "validate-npm-package-license": "^3.0.1"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
-          "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-          "dev": true,
-          "requires": {
-            "are-we-there-yet": "~1.1.2",
-            "console-control-strings": "~1.1.0",
-            "gauge": "~2.7.3",
-            "set-blocking": "~2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-          "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-          "dev": true
-        },
-        "oauth-sign": {
-          "version": "0.9.0",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-          "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-          "dev": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-          "dev": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-          "dev": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-          "dev": true
-        },
-        "os-locale": {
-          "version": "1.4.0",
-          "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-          "dev": true,
-          "requires": {
-            "lcid": "^1.0.0"
-          }
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-          "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-          "dev": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-          "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-          "dev": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-          "dev": true
-        },
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "performance-now": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-          "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
-          "dev": true
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        },
-        "pinkie": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-          "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-          "dev": true
-        },
-        "pinkie-promise": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-          "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-          "dev": true,
-          "requires": {
-            "pinkie": "^2.0.0"
-          }
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
-          "dev": true
-        },
-        "pseudomap": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-          "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-          "dev": true
-        },
-        "psl": {
-          "version": "1.1.29",
-          "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
-          "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
-          "dev": true
-        },
-        "punycode": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-          "dev": true
-        },
-        "qs": {
-          "version": "6.5.2",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-          "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
-          "dev": true
-        },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        },
-        "read-pkg-up": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-          "dev": true,
-          "requires": {
-            "find-up": "^1.0.0",
-            "read-pkg": "^1.0.0"
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "redent": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-          "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-          "dev": true,
-          "requires": {
-            "indent-string": "^2.1.0",
-            "strip-indent": "^1.0.1"
-          }
-        },
-        "repeating": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
-          "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-          "dev": true,
-          "requires": {
-            "is-finite": "^1.0.0"
-          }
-        },
-        "request": {
-          "version": "2.88.0",
-          "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
-          "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
-          "dev": true,
-          "requires": {
-            "aws-sign2": "~0.7.0",
-            "aws4": "^1.8.0",
-            "caseless": "~0.12.0",
-            "combined-stream": "~1.0.6",
-            "extend": "~3.0.2",
-            "forever-agent": "~0.6.1",
-            "form-data": "~2.3.2",
-            "har-validator": "~5.1.0",
-            "http-signature": "~1.2.0",
-            "is-typedarray": "~1.0.0",
-            "isstream": "~0.1.2",
-            "json-stringify-safe": "~5.0.1",
-            "mime-types": "~2.1.19",
-            "oauth-sign": "~0.9.0",
-            "performance-now": "^2.1.0",
-            "qs": "~6.5.2",
-            "safe-buffer": "^5.1.2",
-            "tough-cookie": "~2.4.3",
-            "tunnel-agent": "^0.6.0",
-            "uuid": "^3.3.2"
-          }
-        },
-        "require-directory": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-          "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-          "dev": true
-        },
-        "require-main-filename": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-          "dev": true
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-          "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
-          "dev": true,
-          "requires": {
-            "glob": "^7.0.5"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-          "dev": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-          "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-          "dev": true
-        },
-        "sass-graph": {
-          "version": "2.2.4",
-          "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
-          "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
-          "dev": true,
-          "requires": {
-            "glob": "^7.0.0",
-            "lodash": "^4.0.0",
-            "scss-tokenizer": "^0.2.3",
-            "yargs": "^7.0.0"
-          }
-        },
-        "scss-tokenizer": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
-          "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
-          "dev": true,
-          "requires": {
-            "js-base64": "^2.1.8",
-            "source-map": "^0.4.2"
-          }
-        },
-        "semver": {
-          "version": "5.6.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
-          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
-          "dev": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-          "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-          "dev": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.4.4",
-          "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
-          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
-          "dev": true,
-          "requires": {
-            "amdefine": ">=0.0.4"
-          }
-        },
-        "spdx-correct": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
-          "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
-          "dev": true,
-          "requires": {
-            "spdx-expression-parse": "^3.0.0",
-            "spdx-license-ids": "^3.0.0"
-          }
-        },
-        "spdx-exceptions": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
-          "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
-          "dev": true
-        },
-        "spdx-expression-parse": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
-          "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
-          "dev": true,
-          "requires": {
-            "spdx-exceptions": "^2.1.0",
-            "spdx-license-ids": "^3.0.0"
-          }
-        },
-        "spdx-license-ids": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
-          "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
-          "dev": true
-        },
-        "sshpk": {
-          "version": "1.15.2",
-          "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
-          "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
-          "dev": true,
-          "requires": {
-            "asn1": "~0.2.3",
-            "assert-plus": "^1.0.0",
-            "bcrypt-pbkdf": "^1.0.0",
-            "dashdash": "^1.12.0",
-            "ecc-jsbn": "~0.1.1",
-            "getpass": "^0.1.1",
-            "jsbn": "~0.1.0",
-            "safer-buffer": "^2.0.2",
-            "tweetnacl": "~0.14.0"
-          }
-        },
-        "stdout-stream": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
-          "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
-          "dev": true,
-          "requires": {
-            "readable-stream": "^2.0.1"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-bom": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
-          "requires": {
-            "is-utf8": "^0.2.0"
-          }
-        },
-        "strip-indent": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-          "dev": true,
-          "requires": {
-            "get-stdin": "^4.0.1"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        },
-        "tar": {
-          "version": "2.2.1",
-          "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
-          "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
-          "dev": true,
-          "requires": {
-            "block-stream": "*",
-            "fstream": "^1.0.2",
-            "inherits": "2"
-          }
-        },
-        "tough-cookie": {
-          "version": "2.4.3",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
-          "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
-          "dev": true,
-          "requires": {
-            "psl": "^1.1.24",
-            "punycode": "^1.4.1"
-          },
-          "dependencies": {
-            "punycode": {
-              "version": "1.4.1",
-              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-              "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-              "dev": true
-            }
-          }
-        },
-        "trim-newlines": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-          "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-          "dev": true
-        },
-        "true-case-path": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
-          "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
-          "dev": true,
-          "requires": {
-            "glob": "^7.1.2"
-          }
-        },
-        "tunnel-agent": {
-          "version": "0.6.0",
-          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-          "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "^5.0.1"
-          }
-        },
-        "tweetnacl": {
-          "version": "0.14.5",
-          "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-          "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-          "dev": true
-        },
-        "uri-js": {
-          "version": "4.2.2",
-          "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-          "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
-          "dev": true,
-          "requires": {
-            "punycode": "^2.1.0"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "dev": true
-        },
-        "uuid": {
-          "version": "3.3.2",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
-          "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
-          "dev": true
-        },
-        "validate-npm-package-license": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-          "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-          "dev": true,
-          "requires": {
-            "spdx-correct": "^3.0.0",
-            "spdx-expression-parse": "^3.0.0"
-          }
-        },
-        "verror": {
-          "version": "1.10.0",
-          "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-          "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-          "dev": true,
-          "requires": {
-            "assert-plus": "^1.0.0",
-            "core-util-is": "1.0.2",
-            "extsprintf": "^1.2.0"
-          }
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "which-module": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
-          "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
-          "dev": true
-        },
-        "wide-align": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
-          "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.2 || 2"
-          }
-        },
-        "wrap-ansi": {
-          "version": "2.1.0",
-          "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-          "dev": true
-        },
-        "y18n": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
-          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
-          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
-          "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0",
-            "cliui": "^3.2.0",
-            "decamelize": "^1.1.1",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^1.4.0",
-            "read-pkg-up": "^1.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^1.0.2",
-            "which-module": "^1.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^5.0.0"
-          },
-          "dependencies": {
-            "camelcase": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-              "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-              "dev": true
-            }
-          }
-        },
-        "yargs-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
-          "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0"
-          },
-          "dependencies": {
-            "camelcase": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-              "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-              "dev": true
-            }
-          }
-        }
-      }
-    },
-    "normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true
-    },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "dev": true,
-      "requires": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "dev": true,
-      "requires": {
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-      "dev": true,
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
-      "dev": true
-    },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
-      "dev": true
-    },
-    "process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-      "dev": true
-    },
-    "purecss": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/purecss/-/purecss-1.0.0.tgz",
-      "integrity": "sha512-gfC78WCOWNnfkzulx9aoWwcl+0JflhwKeJ+k9s/ZyIawfYNA4bqBmt0DtfgtQK9iuYMtGfbdE8R2AQMjSWR2VQ=="
-    },
-    "readable-stream": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-      "dev": true,
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "readdirp": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
-      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true
-    },
-    "repeat-element": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
-      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
-      "dev": true
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-      "dev": true
-    },
-    "reset-css": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/reset-css/-/reset-css-4.0.1.tgz",
-      "integrity": "sha512-aQFi5IxXVegVTfz0hOmXsPSmc8tlPDQOkfatHfPu3Cm6id7UXM4OzXfsaUWJEgV2yrCngsagpIb3wHXPjKAx+Q=="
-    },
-    "resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-      "dev": true
-    },
-    "ret": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
-      "dev": true
-    },
-    "rimraf": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-      "dev": true,
-      "requires": {
-        "glob": "^7.1.3"
-      }
-    },
-    "safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-      "dev": true
-    },
-    "safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-      "dev": true,
-      "requires": {
-        "ret": "~0.1.10"
-      }
-    },
-    "sass-loader": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz",
-      "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==",
-      "dev": true,
-      "requires": {
-        "clone-deep": "^2.0.1",
-        "loader-utils": "^1.0.1",
-        "lodash.tail": "^4.1.1",
-        "neo-async": "^2.5.0",
-        "pify": "^3.0.0",
-        "semver": "^5.5.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "clone-deep": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
-          "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
-          "dev": true,
-          "requires": {
-            "for-own": "^1.0.0",
-            "is-plain-object": "^2.0.4",
-            "kind-of": "^6.0.0",
-            "shallow-clone": "^1.0.0"
-          }
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "for-in": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-          "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-          "dev": true
-        },
-        "for-own": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
-          "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
-          "dev": true,
-          "requires": {
-            "for-in": "^1.0.1"
-          }
-        },
-        "is-extendable": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-          "dev": true
-        },
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        },
-        "isobject": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-          "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "lodash.tail": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
-          "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
-          "dev": true
-        },
-        "mixin-object": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
-          "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
-          "dev": true,
-          "requires": {
-            "for-in": "^0.1.3",
-            "is-extendable": "^0.1.1"
-          },
-          "dependencies": {
-            "for-in": {
-              "version": "0.1.8",
-              "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
-              "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
-              "dev": true
-            }
-          }
-        },
-        "neo-async": {
-          "version": "2.6.0",
-          "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
-          "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
-          "dev": true
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        },
-        "semver": {
-          "version": "5.6.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
-          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
-          "dev": true
-        },
-        "shallow-clone": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
-          "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.1",
-            "kind-of": "^5.0.0",
-            "mixin-object": "^2.0.1"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "5.1.0",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-              "dev": true
-            }
-          }
-        }
-      }
-    },
-    "selectize": {
-      "version": "0.12.6",
-      "resolved": "https://registry.npmjs.org/selectize/-/selectize-0.12.6.tgz",
-      "integrity": "sha512-bWO5A7G+I8+QXyjLfQUgh31VI4WKYagUZQxAXlDyUmDDNrFxrASV0W9hxCOl0XJ/XQ1dZEu3G9HjXV4Wj0yb6w==",
-      "requires": {
-        "microplugin": "0.0.3",
-        "sifter": "^0.5.1"
-      },
-      "dependencies": {
-        "ansicolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz",
-          "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8="
-        },
-        "async": {
-          "version": "2.6.1",
-          "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
-          "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
-          "requires": {
-            "lodash": "^4.17.10"
-          }
-        },
-        "cardinal": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz",
-          "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=",
-          "requires": {
-            "ansicolors": "~0.2.1",
-            "redeyed": "~1.0.0"
-          }
-        },
-        "csv-parse": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-2.5.0.tgz",
-          "integrity": "sha512-4OcjOJQByI0YDU5COYw9HAqjo8/MOLLmT9EKyMCXUzgvh30vS1SlMK+Ho84IH5exN44cSnrYecw/7Zpu2m4lkA=="
-        },
-        "esprima": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz",
-          "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k="
-        },
-        "humanize": {
-          "version": "0.0.9",
-          "resolved": "https://registry.npmjs.org/humanize/-/humanize-0.0.9.tgz",
-          "integrity": "sha1-GZT/rs3+nEQe0r2sdFK3u0yeQaQ="
-        },
-        "lodash": {
-          "version": "4.17.11",
-          "resolved": ""
-        },
-        "microplugin": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/microplugin/-/microplugin-0.0.3.tgz",
-          "integrity": "sha1-H8Lhu3yeGegr2Eu6kTe75xJQ2M0="
-        },
-        "minimist": {
-          "version": "0.0.10",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
-          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
-        },
-        "optimist": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
-          "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
-          "requires": {
-            "minimist": "~0.0.1",
-            "wordwrap": "~0.0.2"
-          }
-        },
-        "redeyed": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz",
-          "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=",
-          "requires": {
-            "esprima": "~3.0.0"
-          }
-        },
-        "sifter": {
-          "version": "0.5.3",
-          "resolved": "https://registry.npmjs.org/sifter/-/sifter-0.5.3.tgz",
-          "integrity": "sha1-XmUH/owRSyso2Qtr9OW2NuYR5Is=",
-          "requires": {
-            "async": "^2.6.0",
-            "cardinal": "^1.0.0",
-            "csv-parse": "^2.0.0",
-            "humanize": "^0.0.9",
-            "optimist": "^0.6.1"
-          }
-        },
-        "wordwrap": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
-        }
-      }
-    },
-    "set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-      "dev": true,
-      "requires": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-      "dev": true,
-      "requires": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
-      }
-    },
-    "snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.2.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true
-    },
-    "source-map-resolve": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
-      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
-      "dev": true,
-      "requires": {
-        "atob": "^2.1.1",
-        "decode-uri-component": "^0.2.0",
-        "resolve-url": "^0.2.1",
-        "source-map-url": "^0.4.0",
-        "urix": "^0.1.0"
-      }
-    },
-    "source-map-url": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-      "dev": true
-    },
-    "split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^3.0.0"
-      }
-    },
-    "static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-      "dev": true,
-      "requires": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "style-loader": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
-      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
-      "dev": true,
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.5.5",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
-          "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "ajv-errors": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
-          "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
-          "dev": true
-        },
-        "ajv-keywords": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
-          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
-          "dev": true
-        },
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-          "dev": true
-        },
-        "fast-json-stable-stringify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-          "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-          "dev": true
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "punycode": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "uri-js": {
-          "version": "4.2.2",
-          "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-          "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
-          "dev": true,
-          "requires": {
-            "punycode": "^2.1.0"
-          }
-        }
-      }
-    },
-    "to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-      "dev": true,
-      "requires": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "dev": true,
-      "requires": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      }
-    },
-    "union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
-      "dev": true,
-      "requires": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      }
-    },
-    "unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-      "dev": true,
-      "requires": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
-      "dependencies": {
-        "has-value": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-          "dev": true,
-          "requires": {
-            "get-value": "^2.0.3",
-            "has-values": "^0.1.4",
-            "isobject": "^2.0.0"
-          },
-          "dependencies": {
-            "isobject": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-              "dev": true,
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            }
-          }
-        },
-        "has-values": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
-          "dev": true
-        }
-      }
-    },
-    "upath": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
-      "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
-      "dev": true
-    },
-    "urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
-      "dev": true
-    },
-    "use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
-      "dev": true
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-      "dev": true
-    },
-    "webpack": {
-      "version": "4.26.1",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.26.1.tgz",
-      "integrity": "sha512-i2oOvEvuvLLSuSCkdVrknaxAhtUZ9g+nLSoHCWV0gDzqGX2DXaCrMmMUpbRsTSSLrUqAI56PoEiyMUZIZ1msug==",
-      "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-module-context": "1.7.11",
-        "@webassemblyjs/wasm-edit": "1.7.11",
-        "@webassemblyjs/wasm-parser": "1.7.11",
-        "acorn": "^5.6.2",
-        "acorn-dynamic-import": "^3.0.0",
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0",
-        "chrome-trace-event": "^1.0.0",
-        "enhanced-resolve": "^4.1.0",
-        "eslint-scope": "^4.0.0",
-        "json-parse-better-errors": "^1.0.2",
-        "loader-runner": "^2.3.0",
-        "loader-utils": "^1.1.0",
-        "memory-fs": "~0.4.1",
-        "micromatch": "^3.1.8",
-        "mkdirp": "~0.5.0",
-        "neo-async": "^2.5.0",
-        "node-libs-browser": "^2.0.0",
-        "schema-utils": "^0.4.4",
-        "tapable": "^1.1.0",
-        "terser-webpack-plugin": "^1.1.0",
-        "watchpack": "^1.5.0",
-        "webpack-sources": "^1.3.0"
-      },
-      "dependencies": {
-        "@webassemblyjs/ast": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
-          "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/helper-module-context": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/floating-point-hex-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
-          "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-api-error": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
-          "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-buffer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
-          "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-code-frame": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
-          "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/helper-fsm": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
-          "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-module-context": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
-          "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-bytecode": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
-          "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
-          "dev": true
-        },
-        "@webassemblyjs/helper-wasm-section": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
-          "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11"
-          }
-        },
-        "@webassemblyjs/ieee754": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
-          "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
-          "dev": true,
-          "requires": {
-            "@xtuc/ieee754": "^1.2.0"
-          }
-        },
-        "@webassemblyjs/leb128": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
-          "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
-          "dev": true,
-          "requires": {
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/utf8": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
-          "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
-          "dev": true
-        },
-        "@webassemblyjs/wasm-edit": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
-          "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/helper-wasm-section": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-opt": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11",
-            "@webassemblyjs/wast-printer": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-gen": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
-          "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-opt": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
-          "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-buffer": "1.7.11",
-            "@webassemblyjs/wasm-gen": "1.7.11",
-            "@webassemblyjs/wasm-parser": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wasm-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
-          "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-            "@webassemblyjs/ieee754": "1.7.11",
-            "@webassemblyjs/leb128": "1.7.11",
-            "@webassemblyjs/utf8": "1.7.11"
-          }
-        },
-        "@webassemblyjs/wast-parser": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
-          "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/floating-point-hex-parser": "1.7.11",
-            "@webassemblyjs/helper-api-error": "1.7.11",
-            "@webassemblyjs/helper-code-frame": "1.7.11",
-            "@webassemblyjs/helper-fsm": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@webassemblyjs/wast-printer": {
-          "version": "1.7.11",
-          "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
-          "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
-          "dev": true,
-          "requires": {
-            "@webassemblyjs/ast": "1.7.11",
-            "@webassemblyjs/wast-parser": "1.7.11",
-            "@xtuc/long": "4.2.1"
-          }
-        },
-        "@xtuc/ieee754": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-          "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-          "dev": true
-        },
-        "@xtuc/long": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
-          "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
-          "dev": true
-        },
-        "acorn": {
-          "version": "5.7.3",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
-          "dev": true
-        },
-        "acorn-dynamic-import": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
-          "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
-          "dev": true,
-          "requires": {
-            "acorn": "^5.0.0"
-          }
-        },
-        "ajv": {
-          "version": "6.5.5",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
-          "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "ajv-errors": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
-          "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
-          "dev": true
-        },
-        "ajv-keywords": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
-          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
-          "dev": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-          "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-          "dev": true
-        },
-        "arr-diff": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
-          "dev": true
-        },
-        "arr-flatten": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-          "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
-          "dev": true
-        },
-        "arr-union": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-          "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
-          "dev": true
-        },
-        "array-unique": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
-          "dev": true
-        },
-        "asn1.js": {
-          "version": "4.10.1",
-          "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-          "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.0.0",
-            "inherits": "^2.0.1",
-            "minimalistic-assert": "^1.0.0"
-          }
-        },
-        "assert": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
-          "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
-          "dev": true,
-          "requires": {
-            "util": "0.10.3"
-          },
-          "dependencies": {
-            "inherits": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-              "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
-              "dev": true
-            },
-            "util": {
-              "version": "0.10.3",
-              "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
-              "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-              "dev": true,
-              "requires": {
-                "inherits": "2.0.1"
-              }
-            }
-          }
-        },
-        "assign-symbols": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-          "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
-          "dev": true
-        },
-        "atob": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-          "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-          "dev": true
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-          "dev": true
-        },
-        "base": {
-          "version": "0.11.2",
-          "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-          "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-          "dev": true,
-          "requires": {
-            "cache-base": "^1.0.1",
-            "class-utils": "^0.3.5",
-            "component-emitter": "^1.2.1",
-            "define-property": "^1.0.0",
-            "isobject": "^3.0.1",
-            "mixin-deep": "^1.2.0",
-            "pascalcase": "^0.1.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^1.0.0"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-              "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-              "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-              "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-              "dev": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            }
-          }
-        },
-        "base64-js": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
-          "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
-          "dev": true
-        },
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "bluebird": {
-          "version": "3.5.3",
-          "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
-          "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
-          "dev": true
-        },
-        "bn.js": {
-          "version": "4.11.8",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-          "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
-          "dev": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-          "dev": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "brorand": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-          "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
-          "dev": true
-        },
-        "browserify-aes": {
-          "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-          "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
-          "dev": true,
-          "requires": {
-            "buffer-xor": "^1.0.3",
-            "cipher-base": "^1.0.0",
-            "create-hash": "^1.1.0",
-            "evp_bytestokey": "^1.0.3",
-            "inherits": "^2.0.1",
-            "safe-buffer": "^5.0.1"
-          }
-        },
-        "browserify-cipher": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-          "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
-          "dev": true,
-          "requires": {
-            "browserify-aes": "^1.0.4",
-            "browserify-des": "^1.0.0",
-            "evp_bytestokey": "^1.0.0"
-          }
-        },
-        "browserify-des": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-          "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
-          "dev": true,
-          "requires": {
-            "cipher-base": "^1.0.1",
-            "des.js": "^1.0.0",
-            "inherits": "^2.0.1",
-            "safe-buffer": "^5.1.2"
-          }
-        },
-        "browserify-rsa": {
-          "version": "4.0.1",
-          "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
-          "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.1.0",
-            "randombytes": "^2.0.1"
-          }
-        },
-        "browserify-sign": {
-          "version": "4.0.4",
-          "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
-          "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.1.1",
-            "browserify-rsa": "^4.0.0",
-            "create-hash": "^1.1.0",
-            "create-hmac": "^1.1.2",
-            "elliptic": "^6.0.0",
-            "inherits": "^2.0.1",
-            "parse-asn1": "^5.0.0"
-          }
-        },
-        "browserify-zlib": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-          "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
-          "dev": true,
-          "requires": {
-            "pako": "~1.0.5"
-          }
-        },
-        "buffer": {
-          "version": "4.9.1",
-          "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
-          "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
-          "dev": true,
-          "requires": {
-            "base64-js": "^1.0.2",
-            "ieee754": "^1.1.4",
-            "isarray": "^1.0.0"
-          }
-        },
-        "buffer-from": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-          "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-          "dev": true
-        },
-        "buffer-xor": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-          "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
-          "dev": true
-        },
-        "builtin-status-codes": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-          "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
-          "dev": true
-        },
-        "cacache": {
-          "version": "11.3.1",
-          "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
-          "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
-          "dev": true,
-          "requires": {
-            "bluebird": "^3.5.1",
-            "chownr": "^1.0.1",
-            "figgy-pudding": "^3.1.0",
-            "glob": "^7.1.2",
-            "graceful-fs": "^4.1.11",
-            "lru-cache": "^4.1.3",
-            "mississippi": "^3.0.0",
-            "mkdirp": "^0.5.1",
-            "move-concurrently": "^1.0.1",
-            "promise-inflight": "^1.0.1",
-            "rimraf": "^2.6.2",
-            "ssri": "^6.0.0",
-            "unique-filename": "^1.1.0",
-            "y18n": "^4.0.0"
-          }
-        },
-        "cache-base": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-          "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-          "dev": true,
-          "requires": {
-            "collection-visit": "^1.0.0",
-            "component-emitter": "^1.2.1",
-            "get-value": "^2.0.6",
-            "has-value": "^1.0.0",
-            "isobject": "^3.0.1",
-            "set-value": "^2.0.0",
-            "to-object-path": "^0.3.0",
-            "union-value": "^1.0.0",
-            "unset-value": "^1.0.0"
-          }
-        },
-        "chownr": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
-          "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
-          "dev": true
-        },
-        "chrome-trace-event": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
-          "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "cipher-base": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-          "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "safe-buffer": "^5.0.1"
-          }
-        },
-        "class-utils": {
-          "version": "0.3.6",
-          "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-          "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-          "dev": true,
-          "requires": {
-            "arr-union": "^3.1.0",
-            "define-property": "^0.2.5",
-            "isobject": "^3.0.0",
-            "static-extend": "^0.1.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "0.2.5",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^0.1.0"
-              }
-            }
-          }
-        },
-        "collection-visit": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-          "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-          "dev": true,
-          "requires": {
-            "map-visit": "^1.0.0",
-            "object-visit": "^1.0.0"
-          }
-        },
-        "commander": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
-          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
-          "dev": true
-        },
-        "commondir": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-          "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-          "dev": true
-        },
-        "component-emitter": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-          "dev": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-          "dev": true
-        },
-        "concat-stream": {
-          "version": "1.6.2",
-          "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-          "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-          "dev": true,
-          "requires": {
-            "buffer-from": "^1.0.0",
-            "inherits": "^2.0.3",
-            "readable-stream": "^2.2.2",
-            "typedarray": "^0.0.6"
-          }
-        },
-        "console-browserify": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
-          "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
-          "dev": true,
-          "requires": {
-            "date-now": "^0.1.4"
-          }
-        },
-        "constants-browserify": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-          "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
-          "dev": true
-        },
-        "copy-concurrently": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-          "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
-          "dev": true,
-          "requires": {
-            "aproba": "^1.1.1",
-            "fs-write-stream-atomic": "^1.0.8",
-            "iferr": "^0.1.5",
-            "mkdirp": "^0.5.1",
-            "rimraf": "^2.5.4",
-            "run-queue": "^1.0.0"
-          }
-        },
-        "copy-descriptor": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-          "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
-          "dev": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-          "dev": true
-        },
-        "create-ecdh": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-          "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.1.0",
-            "elliptic": "^6.0.0"
-          }
-        },
-        "create-hash": {
-          "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-          "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
-          "dev": true,
-          "requires": {
-            "cipher-base": "^1.0.1",
-            "inherits": "^2.0.1",
-            "md5.js": "^1.3.4",
-            "ripemd160": "^2.0.1",
-            "sha.js": "^2.4.0"
-          }
-        },
-        "create-hmac": {
-          "version": "1.1.7",
-          "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-          "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
-          "dev": true,
-          "requires": {
-            "cipher-base": "^1.0.3",
-            "create-hash": "^1.1.0",
-            "inherits": "^2.0.1",
-            "ripemd160": "^2.0.0",
-            "safe-buffer": "^5.0.1",
-            "sha.js": "^2.4.8"
-          }
-        },
-        "crypto-browserify": {
-          "version": "3.12.0",
-          "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-          "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
-          "dev": true,
-          "requires": {
-            "browserify-cipher": "^1.0.0",
-            "browserify-sign": "^4.0.0",
-            "create-ecdh": "^4.0.0",
-            "create-hash": "^1.1.0",
-            "create-hmac": "^1.1.0",
-            "diffie-hellman": "^5.0.0",
-            "inherits": "^2.0.1",
-            "pbkdf2": "^3.0.3",
-            "public-encrypt": "^4.0.0",
-            "randombytes": "^2.0.0",
-            "randomfill": "^1.0.3"
-          }
-        },
-        "cyclist": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
-          "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
-          "dev": true
-        },
-        "date-now": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
-          "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
-          "dev": true
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "decode-uri-component": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-          "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
-          "dev": true
-        },
-        "define-property": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-          "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.2",
-            "isobject": "^3.0.1"
-          },
-          "dependencies": {
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-              "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-              "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-              "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-              "dev": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            }
-          }
-        },
-        "des.js": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
-          "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "minimalistic-assert": "^1.0.0"
-          }
-        },
-        "diffie-hellman": {
-          "version": "5.0.3",
-          "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-          "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.1.0",
-            "miller-rabin": "^4.0.0",
-            "randombytes": "^2.0.0"
-          }
-        },
-        "domain-browser": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-          "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
-          "dev": true
-        },
-        "duplexify": {
-          "version": "3.6.1",
-          "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
-          "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
-          "dev": true,
-          "requires": {
-            "end-of-stream": "^1.0.0",
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.0.0",
-            "stream-shift": "^1.0.0"
-          }
-        },
-        "elliptic": {
-          "version": "6.4.1",
-          "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
-          "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.4.0",
-            "brorand": "^1.0.1",
-            "hash.js": "^1.0.0",
-            "hmac-drbg": "^1.0.0",
-            "inherits": "^2.0.1",
-            "minimalistic-assert": "^1.0.0",
-            "minimalistic-crypto-utils": "^1.0.0"
-          }
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "end-of-stream": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
-          "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
-          "dev": true,
-          "requires": {
-            "once": "^1.4.0"
-          }
-        },
-        "enhanced-resolve": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
-          "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "memory-fs": "^0.4.0",
-            "tapable": "^1.0.0"
-          }
-        },
-        "errno": {
-          "version": "0.1.7",
-          "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
-          "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
-          "dev": true,
-          "requires": {
-            "prr": "~1.0.1"
-          }
-        },
-        "eslint-scope": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
-          "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
-          "dev": true,
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        },
-        "esrecurse": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
-          "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
-          "dev": true,
-          "requires": {
-            "estraverse": "^4.1.0"
-          }
-        },
-        "estraverse": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
-          "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
-          "dev": true
-        },
-        "events": {
-          "version": "1.1.1",
-          "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
-          "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
-          "dev": true
-        },
-        "evp_bytestokey": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-          "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
-          "dev": true,
-          "requires": {
-            "md5.js": "^1.3.4",
-            "safe-buffer": "^5.1.1"
-          }
-        },
-        "expand-brackets": {
-          "version": "2.1.4",
-          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-          "dev": true,
-          "requires": {
-            "debug": "^2.3.3",
-            "define-property": "^0.2.5",
-            "extend-shallow": "^2.0.1",
-            "posix-character-classes": "^0.1.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "0.2.5",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^0.1.0"
-              }
-            },
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "extend-shallow": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-          "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-          "dev": true,
-          "requires": {
-            "assign-symbols": "^1.0.0",
-            "is-extendable": "^1.0.1"
-          },
-          "dependencies": {
-            "is-extendable": {
-              "version": "1.0.1",
-              "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-              "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-              "dev": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            }
-          }
-        },
-        "extglob": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-          "dev": true,
-          "requires": {
-            "array-unique": "^0.3.2",
-            "define-property": "^1.0.0",
-            "expand-brackets": "^2.1.4",
-            "extend-shallow": "^2.0.1",
-            "fragment-cache": "^0.2.1",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^1.0.0"
-              }
-            },
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-              "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-              "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-              "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-              "dev": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            }
-          }
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
-          "dev": true
-        },
-        "fast-json-stable-stringify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-          "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
-          "dev": true
-        },
-        "figgy-pudding": {
-          "version": "3.5.1",
-          "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
-          "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
-          "dev": true
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "find-cache-dir": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
-          "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
-          "dev": true,
-          "requires": {
-            "commondir": "^1.0.1",
-            "make-dir": "^1.0.0",
-            "pkg-dir": "^3.0.0"
-          }
-        },
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "flush-write-stream": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
-          "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.0.4"
-          }
-        },
-        "for-in": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-          "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-          "dev": true
-        },
-        "fragment-cache": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-          "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-          "dev": true,
-          "requires": {
-            "map-cache": "^0.2.2"
-          }
-        },
-        "from2": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-          "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.0.0"
-          }
-        },
-        "fs-write-stream-atomic": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
-          "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "iferr": "^0.1.5",
-            "imurmurhash": "^0.1.4",
-            "readable-stream": "1 || 2"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-          "dev": true
-        },
-        "get-value": {
-          "version": "2.0.6",
-          "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-          "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
-          "dev": true
-        },
-        "glob": {
-          "version": "7.1.3",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
-          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.1.15",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
-          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
-          "dev": true
-        },
-        "has-value": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-          "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-          "dev": true,
-          "requires": {
-            "get-value": "^2.0.6",
-            "has-values": "^1.0.0",
-            "isobject": "^3.0.0"
-          }
-        },
-        "has-values": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-          "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-          "dev": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "kind-of": "^4.0.0"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "4.0.0",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-              "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "hash-base": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
-          "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "safe-buffer": "^5.0.1"
-          }
-        },
-        "hash.js": {
-          "version": "1.1.5",
-          "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
-          "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "minimalistic-assert": "^1.0.1"
-          }
-        },
-        "hmac-drbg": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-          "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-          "dev": true,
-          "requires": {
-            "hash.js": "^1.0.3",
-            "minimalistic-assert": "^1.0.0",
-            "minimalistic-crypto-utils": "^1.0.1"
-          }
-        },
-        "https-browserify": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-          "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-          "dev": true
-        },
-        "ieee754": {
-          "version": "1.1.12",
-          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
-          "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
-          "dev": true
-        },
-        "iferr": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
-          "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
-          "dev": true
-        },
-        "imurmurhash": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-          "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-          "dev": true
-        },
-        "indexof": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
-          "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
-          "dev": true
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "dev": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        },
-        "is-accessor-descriptor": {
-          "version": "0.1.6",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-          "dev": true
-        },
-        "is-data-descriptor": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "is-descriptor": {
-          "version": "0.1.6",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-          "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^0.1.6",
-            "is-data-descriptor": "^0.1.4",
-            "kind-of": "^5.0.0"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "5.1.0",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-              "dev": true
-            }
-          }
-        },
-        "is-extendable": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-          "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-          "dev": true
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        },
-        "is-windows": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-          "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-          "dev": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "isobject": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-          "dev": true
-        },
-        "json-parse-better-errors": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-          "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        },
-        "loader-runner": {
-          "version": "2.3.1",
-          "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
-          "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
-          "dev": true
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "4.1.4",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
-          "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
-          "dev": true,
-          "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "make-dir": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
-          "dev": true,
-          "requires": {
-            "pify": "^3.0.0"
-          }
-        },
-        "map-cache": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-          "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
-          "dev": true
-        },
-        "map-visit": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-          "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-          "dev": true,
-          "requires": {
-            "object-visit": "^1.0.0"
-          }
-        },
-        "md5.js": {
-          "version": "1.3.5",
-          "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-          "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
-          "dev": true,
-          "requires": {
-            "hash-base": "^3.0.0",
-            "inherits": "^2.0.1",
-            "safe-buffer": "^5.1.2"
-          }
-        },
-        "memory-fs": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
-          "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
-          "dev": true,
-          "requires": {
-            "errno": "^0.1.3",
-            "readable-stream": "^2.0.1"
-          }
-        },
-        "micromatch": {
-          "version": "3.1.10",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^4.0.0",
-            "array-unique": "^0.3.2",
-            "braces": "^2.3.1",
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "extglob": "^2.0.4",
-            "fragment-cache": "^0.2.1",
-            "kind-of": "^6.0.2",
-            "nanomatch": "^1.2.9",
-            "object.pick": "^1.3.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.2"
-          }
-        },
-        "miller-rabin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-          "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.0.0",
-            "brorand": "^1.0.1"
-          }
-        },
-        "minimalistic-assert": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-          "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-          "dev": true
-        },
-        "minimalistic-crypto-utils": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-          "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
-          "dev": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true
-        },
-        "mississippi": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
-          "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
-          "dev": true,
-          "requires": {
-            "concat-stream": "^1.5.0",
-            "duplexify": "^3.4.2",
-            "end-of-stream": "^1.1.0",
-            "flush-write-stream": "^1.0.0",
-            "from2": "^2.1.0",
-            "parallel-transform": "^1.1.0",
-            "pump": "^3.0.0",
-            "pumpify": "^1.3.3",
-            "stream-each": "^1.1.0",
-            "through2": "^2.0.0"
-          }
-        },
-        "mixin-deep": {
-          "version": "1.3.1",
-          "resolved": "",
-          "dev": true,
-          "requires": {
-            "for-in": "^1.0.2",
-            "is-extendable": "^1.0.1"
-          },
-          "dependencies": {
-            "is-extendable": {
-              "version": "1.0.1",
-              "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-              "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-              "dev": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            }
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-          "dev": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "move-concurrently": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
-          "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
-          "dev": true,
-          "requires": {
-            "aproba": "^1.1.1",
-            "copy-concurrently": "^1.0.0",
-            "fs-write-stream-atomic": "^1.0.8",
-            "mkdirp": "^0.5.1",
-            "rimraf": "^2.5.4",
-            "run-queue": "^1.0.3"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
-        "nanomatch": {
-          "version": "1.2.13",
-          "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-          "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^4.0.0",
-            "array-unique": "^0.3.2",
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "fragment-cache": "^0.2.1",
-            "is-windows": "^1.0.2",
-            "kind-of": "^6.0.2",
-            "object.pick": "^1.3.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.1"
-          }
-        },
-        "neo-async": {
-          "version": "2.6.0",
-          "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
-          "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
-          "dev": true
-        },
-        "node-libs-browser": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
-          "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
-          "dev": true,
-          "requires": {
-            "assert": "^1.1.1",
-            "browserify-zlib": "^0.2.0",
-            "buffer": "^4.3.0",
-            "console-browserify": "^1.1.0",
-            "constants-browserify": "^1.0.0",
-            "crypto-browserify": "^3.11.0",
-            "domain-browser": "^1.1.1",
-            "events": "^1.0.0",
-            "https-browserify": "^1.0.0",
-            "os-browserify": "^0.3.0",
-            "path-browserify": "0.0.0",
-            "process": "^0.11.10",
-            "punycode": "^1.2.4",
-            "querystring-es3": "^0.2.0",
-            "readable-stream": "^2.3.3",
-            "stream-browserify": "^2.0.1",
-            "stream-http": "^2.7.2",
-            "string_decoder": "^1.0.0",
-            "timers-browserify": "^2.0.4",
-            "tty-browserify": "0.0.0",
-            "url": "^0.11.0",
-            "util": "^0.10.3",
-            "vm-browserify": "0.0.4"
-          },
-          "dependencies": {
-            "punycode": {
-              "version": "1.4.1",
-              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-              "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-              "dev": true
-            }
-          }
-        },
-        "object-copy": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-          "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-          "dev": true,
-          "requires": {
-            "copy-descriptor": "^0.1.0",
-            "define-property": "^0.2.5",
-            "kind-of": "^3.0.3"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "0.2.5",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^0.1.0"
-              }
-            },
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "object-visit": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-          "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.0"
-          }
-        },
-        "object.pick": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-          "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-          "dev": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-browserify": {
-          "version": "0.3.0",
-          "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-          "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
-          "dev": true
-        },
-        "p-limit": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
-          "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.0.0"
-          }
-        },
-        "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
-          "dev": true
-        },
-        "pako": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
-          "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
-          "dev": true
-        },
-        "parallel-transform": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
-          "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
-          "dev": true,
-          "requires": {
-            "cyclist": "~0.2.2",
-            "inherits": "^2.0.3",
-            "readable-stream": "^2.1.5"
-          }
-        },
-        "parse-asn1": {
-          "version": "5.1.1",
-          "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
-          "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
-          "dev": true,
-          "requires": {
-            "asn1.js": "^4.0.0",
-            "browserify-aes": "^1.0.0",
-            "create-hash": "^1.1.0",
-            "evp_bytestokey": "^1.0.0",
-            "pbkdf2": "^3.0.3"
-          }
-        },
-        "pascalcase": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-          "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
-          "dev": true
-        },
-        "path-browserify": {
-          "version": "0.0.0",
-          "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
-          "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-          "dev": true
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-          "dev": true
-        },
-        "pbkdf2": {
-          "version": "3.0.17",
-          "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-          "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
-          "dev": true,
-          "requires": {
-            "create-hash": "^1.1.2",
-            "create-hmac": "^1.1.4",
-            "ripemd160": "^2.0.1",
-            "safe-buffer": "^5.0.1",
-            "sha.js": "^2.4.8"
-          }
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-          "dev": true,
-          "requires": {
-            "find-up": "^3.0.0"
-          }
-        },
-        "posix-character-classes": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-          "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
-          "dev": true
-        },
-        "process": {
-          "version": "0.11.10",
-          "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-          "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
-          "dev": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
-          "dev": true
-        },
-        "promise-inflight": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-          "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
-          "dev": true
-        },
-        "prr": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-          "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
-          "dev": true
-        },
-        "pseudomap": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-          "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+        }
+      }
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.10",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+        }
+      }
+    },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-limit": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+      "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+      "dev": true,
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+      "dev": true,
+      "requires": {
+        "p-limit": "^2.0.0"
+      }
+    },
+    "p-map": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+      "dev": true,
+      "requires": {
+        "aggregate-error": "^3.0.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "dev": true
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+      "dev": true,
+      "requires": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+      "dev": true,
+      "requires": {
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "parse-passwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true,
+      "optional": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+      "dev": true
+    },
+    "path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true
+    },
+    "pbkdf2": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+      "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+      "dev": true,
+      "requires": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "picomatch": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+      "dev": true
+    },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+      "dev": true,
+      "requires": {
+        "find-up": "^3.0.0"
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.24",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.24.tgz",
+      "integrity": "sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.0"
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+      "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+      "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
+      "dev": true,
+      "requires": {
+        "icss-utils": "^4.1.1",
+        "postcss": "^7.0.16",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.0"
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz",
+      "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^6.0.0"
+      }
+    },
+    "postcss-modules-values": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+      "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+      "dev": true,
+      "requires": {
+        "icss-utils": "^4.0.0",
+        "postcss": "^7.0.6"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+      "dev": true,
+      "requires": {
+        "cssesc": "^3.0.0",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
+      "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==",
+      "dev": true
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+      "dev": true
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "psl": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+      "dev": true
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
           "dev": true
-        },
-        "public-encrypt": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-          "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
-          "dev": true,
-          "requires": {
-            "bn.js": "^4.1.0",
-            "browserify-rsa": "^4.0.0",
-            "create-hash": "^1.1.0",
-            "parse-asn1": "^5.0.0",
-            "randombytes": "^2.0.1",
-            "safe-buffer": "^5.1.2"
-          }
-        },
+        }
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "dev": true,
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      },
+      "dependencies": {
         "pump": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
           "dev": true,
           "requires": {
             "end-of-stream": "^1.1.0",
             "once": "^1.3.1"
           }
-        },
-        "pumpify": {
-          "version": "1.5.1",
-          "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-          "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
-          "dev": true,
-          "requires": {
-            "duplexify": "^3.6.0",
-            "inherits": "^2.0.3",
-            "pump": "^2.0.0"
-          },
-          "dependencies": {
-            "pump": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-              "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-              "dev": true,
-              "requires": {
-                "end-of-stream": "^1.1.0",
-                "once": "^1.3.1"
-              }
-            }
-          }
-        },
-        "punycode": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-          "dev": true
-        },
-        "querystring": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-          "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-          "dev": true
-        },
-        "querystring-es3": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-          "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
-          "dev": true
-        },
-        "randombytes": {
-          "version": "2.0.6",
-          "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
-          "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "^5.1.0"
-          }
-        },
-        "randomfill": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-          "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
-          "dev": true,
-          "requires": {
-            "randombytes": "^2.0.5",
-            "safe-buffer": "^5.1.0"
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "regex-not": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-          "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^3.0.2",
-            "safe-regex": "^1.1.0"
-          }
-        },
-        "repeat-element": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
-          "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
-          "dev": true
-        },
-        "repeat-string": {
-          "version": "1.6.1",
-          "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-          "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-          "dev": true
-        },
-        "resolve-url": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-          "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-          "dev": true
-        },
-        "ret": {
-          "version": "0.1.15",
-          "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-          "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
-          "dev": true
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-          "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
-          "dev": true,
-          "requires": {
-            "glob": "^7.0.5"
-          }
-        },
-        "ripemd160": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-          "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
-          "dev": true,
-          "requires": {
-            "hash-base": "^3.0.0",
-            "inherits": "^2.0.1"
-          }
-        },
-        "run-queue": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
-          "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+        }
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "dev": true
+    },
+    "purecss": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/purecss/-/purecss-1.0.1.tgz",
+      "integrity": "sha512-mTUc5ZzpzafswEhCmTDfSRMMyRFdLYdd+KywMwnBC/MuA/Th7jug2z0Xso4WkxvtxoU/BS9aRb7WnBNyuA7YJQ=="
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "dev": true
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "dev": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+      "dev": true
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "dev": true,
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "read-pkg": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^1.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^1.0.0"
+      },
+      "dependencies": {
+        "path-type": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "dev": true,
           "requires": {
-            "aproba": "^1.1.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
-        },
-        "safe-regex": {
-          "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-          "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+        }
+      }
+    },
+    "read-pkg-up": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+      "dev": true,
+      "requires": {
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
-            "ret": "~0.1.10"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
-        "schema-utils": {
-          "version": "0.4.7",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
-          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
-            "ajv": "^6.1.0",
-            "ajv-keywords": "^3.1.0"
+            "pinkie-promise": "^2.0.0"
           }
-        },
-        "serialize-javascript": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
-          "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
-          "dev": true
-        },
-        "set-value": {
-          "version": "2.0.0",
-          "resolved": "",
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+      "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "picomatch": "^2.2.1"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "dev": true,
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      }
+    },
+    "redeyed": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz",
+      "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=",
+      "requires": {
+        "esprima": "~3.0.0"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true,
+      "optional": true
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "request": {
+      "version": "2.88.2",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+      "dev": true,
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.5.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "dev": true
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+      "dev": true
+    },
+    "reset-css": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/reset-css/-/reset-css-5.0.1.tgz",
+      "integrity": "sha512-VyuJdNFfp5x/W6e5wauJM59C02Vs0P22sxzZGhQMPaqu/NGTeFxlBFOOw3eq9vQd19gIDdZp7zi89ylyKOJ33Q=="
+    },
+    "resolve": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+      "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "resolve-dir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      },
+      "dependencies": {
+        "global-modules": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+          "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
           "dev": true,
           "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-extendable": "^0.1.1",
-            "is-plain-object": "^2.0.3",
-            "split-string": "^3.0.1"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
+            "global-prefix": "^1.0.1",
+            "is-windows": "^1.0.1",
+            "resolve-dir": "^1.0.0"
           }
-        },
-        "setimmediate": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-          "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+        }
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+      "dev": true
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "run-parallel": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+      "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+      "dev": true
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "sass-graph": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
+      "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^13.3.2"
+      }
+    },
+    "sass-loader": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz",
+      "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==",
+      "dev": true,
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "loader-utils": "^1.0.1",
+        "neo-async": "^2.5.0",
+        "pify": "^4.0.1",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
-        },
-        "sha.js": {
-          "version": "2.4.11",
-          "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-          "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.1",
-            "safe-buffer": "^5.0.1"
-          }
-        },
-        "snapdragon": {
-          "version": "0.8.2",
-          "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-          "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-          "dev": true,
-          "requires": {
-            "base": "^0.11.1",
-            "debug": "^2.2.0",
-            "define-property": "^0.2.5",
-            "extend-shallow": "^2.0.1",
-            "map-cache": "^0.2.2",
-            "source-map": "^0.5.6",
-            "source-map-resolve": "^0.5.0",
-            "use": "^3.1.0"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "0.2.5",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^0.1.0"
-              }
-            },
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "snapdragon-node": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-          "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-          "dev": true,
-          "requires": {
-            "define-property": "^1.0.0",
-            "isobject": "^3.0.0",
-            "snapdragon-util": "^3.0.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^1.0.0"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-              "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-              "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-              "dev": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-              "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-              "dev": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            }
-          }
-        },
-        "snapdragon-util": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-          "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+        }
+      }
+    },
+    "schema-utils": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+      "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+      "dev": true,
+      "requires": {
+        "@types/json-schema": "^7.0.4",
+        "ajv": "^6.12.2",
+        "ajv-keywords": "^3.4.1"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.12.3",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+          "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
           "dev": true,
           "requires": {
-            "kind-of": "^3.2.0"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
+            "fast-deep-equal": "^3.1.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
           }
         },
-        "source-list-map": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-          "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+        "fast-deep-equal": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+          "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
           "dev": true
-        },
+        }
+      }
+    },
+    "scss-tokenizer": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+      "dev": true,
+      "requires": {
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
+      },
+      "dependencies": {
         "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "source-map-resolve": {
-          "version": "0.5.2",
-          "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
-          "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
-          "dev": true,
-          "requires": {
-            "atob": "^2.1.1",
-            "decode-uri-component": "^0.2.0",
-            "resolve-url": "^0.2.1",
-            "source-map-url": "^0.4.0",
-            "urix": "^0.1.0"
-          }
-        },
-        "source-map-support": {
-          "version": "0.5.9",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
-          "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
-          "dev": true,
-          "requires": {
-            "buffer-from": "^1.0.0",
-            "source-map": "^0.6.0"
-          },
-          "dependencies": {
-            "source-map": {
-              "version": "0.6.1",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-              "dev": true
-            }
-          }
-        },
-        "source-map-url": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-          "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-          "dev": true
-        },
-        "split-string": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-          "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
           "dev": true,
           "requires": {
-            "extend-shallow": "^3.0.0"
+            "amdefine": ">=0.0.4"
           }
-        },
-        "ssri": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-          "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+        }
+      }
+    },
+    "select": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+      "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
+    },
+    "selectize": {
+      "version": "0.12.6",
+      "resolved": "https://registry.npmjs.org/selectize/-/selectize-0.12.6.tgz",
+      "integrity": "sha512-bWO5A7G+I8+QXyjLfQUgh31VI4WKYagUZQxAXlDyUmDDNrFxrASV0W9hxCOl0XJ/XQ1dZEu3G9HjXV4Wj0yb6w==",
+      "requires": {
+        "microplugin": "0.0.3",
+        "sifter": "^0.5.1"
+      }
+    },
+    "semver": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+      "dev": true
+    },
+    "serialize-javascript": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+      "dev": true,
+      "requires": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "figgy-pudding": "^3.5.1"
+            "is-extendable": "^0.1.0"
           }
-        },
-        "static-extend": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-          "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+        }
+      }
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "sifter": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/sifter/-/sifter-0.5.4.tgz",
+      "integrity": "sha512-t2yxTi/MM/ESup7XH5oMu8PUcttlekt269RqxARgnvS+7D/oP6RyA1x3M/5w8dG9OgkOyQ8hNRWelQ8Rj4TAQQ==",
+      "requires": {
+        "async": "^2.6.0",
+        "cardinal": "^1.0.0",
+        "csv-parse": "^4.6.5",
+        "humanize": "^0.0.9",
+        "optimist": "^0.6.1"
+      }
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "dev": true,
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "define-property": "^0.2.5",
-            "object-copy": "^0.1.0"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "0.2.5",
-              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-              "dev": true,
-              "requires": {
-                "is-descriptor": "^0.1.0"
-              }
-            }
+            "is-descriptor": "^0.1.0"
           }
         },
-        "stream-browserify": {
+        "extend-shallow": {
           "version": "2.0.1",
-          "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
-          "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
-          "dev": true,
-          "requires": {
-            "inherits": "~2.0.1",
-            "readable-stream": "^2.0.2"
-          }
-        },
-        "stream-each": {
-          "version": "1.2.3",
-          "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
-          "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
-          "dev": true,
-          "requires": {
-            "end-of-stream": "^1.1.0",
-            "stream-shift": "^1.0.0"
-          }
-        },
-        "stream-http": {
-          "version": "2.8.3",
-          "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-          "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
-          "dev": true,
-          "requires": {
-            "builtin-status-codes": "^3.0.0",
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.3.6",
-            "to-arraybuffer": "^1.0.0",
-            "xtend": "^4.0.0"
-          }
-        },
-        "stream-shift": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
-          "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
-          "dev": true
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "safe-buffer": "~5.1.0"
+            "is-extendable": "^0.1.0"
           }
         },
-        "tapable": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
-          "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
           "dev": true
-        },
-        "terser": {
-          "version": "3.10.12",
-          "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.12.tgz",
-          "integrity": "sha512-3ODPC1eVt25EVNb04s/PkHxOmzKBQUF6bwwuR6h2DbEF8/j265Y1UkwNtOk9am/pRxfJ5HPapOlUlO6c16mKQQ==",
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "dev": true,
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "commander": "~2.17.1",
-            "source-map": "~0.6.1",
-            "source-map-support": "~0.5.6"
-          },
-          "dependencies": {
-            "source-map": {
-              "version": "0.6.1",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-              "dev": true
-            }
+            "is-descriptor": "^1.0.0"
           }
         },
-        "terser-webpack-plugin": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
-          "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "cacache": "^11.0.2",
-            "find-cache-dir": "^2.0.0",
-            "schema-utils": "^1.0.0",
-            "serialize-javascript": "^1.4.0",
-            "source-map": "^0.6.1",
-            "terser": "^3.8.1",
-            "webpack-sources": "^1.1.0",
-            "worker-farm": "^1.5.2"
-          },
-          "dependencies": {
-            "schema-utils": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-              "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-              "dev": true,
-              "requires": {
-                "ajv": "^6.1.0",
-                "ajv-errors": "^1.0.0",
-                "ajv-keywords": "^3.1.0"
-              }
-            },
-            "source-map": {
-              "version": "0.6.1",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-              "dev": true
-            }
+            "kind-of": "^6.0.0"
           }
         },
-        "through2": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-          "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "readable-stream": "~2.3.6",
-            "xtend": "~4.0.1"
+            "kind-of": "^6.0.0"
           }
         },
-        "timers-browserify": {
-          "version": "2.0.10",
-          "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
-          "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "setimmediate": "^1.0.4"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
-        },
-        "to-arraybuffer": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-          "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
-          "dev": true
-        },
-        "to-object-path": {
-          "version": "0.3.0",
-          "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-          "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
+            "is-buffer": "^1.1.5"
           }
-        },
-        "to-regex": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-          "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+        }
+      }
+    },
+    "source-list-map": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true
+    },
+    "source-map-resolve": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+      "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+      "dev": true,
+      "requires": {
+        "atob": "^2.1.2",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-support": {
+      "version": "0.5.19",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+      "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+      "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+      "dev": true
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "dev": true,
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
+    "ssri": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+      "dev": true,
+      "requires": {
+        "figgy-pudding": "^3.5.1"
+      }
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "regex-not": "^1.0.2",
-            "safe-regex": "^1.1.0"
+            "is-descriptor": "^0.1.0"
           }
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+        }
+      }
+    },
+    "stdout-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+      "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "dev": true,
+      "requires": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+      "dev": true
+    },
+    "string-width": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+      "dev": true,
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-bom": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+      "dev": true,
+      "requires": {
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^4.0.1"
+      }
+    },
+    "style-loader": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
+      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.5.5",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
+          "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
           "dev": true,
           "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
           }
         },
-        "tslib": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-          "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+        "ajv-errors": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
+          "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
           "dev": true
         },
-        "tty-browserify": {
-          "version": "0.0.0",
-          "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
-          "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+        "ajv-keywords": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
           "dev": true
         },
-        "typedarray": {
-          "version": "0.0.6",
-          "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-          "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
           "dev": true
         },
-        "union-value": {
-          "version": "1.0.0",
-          "resolved": "",
-          "dev": true,
-          "requires": {
-            "arr-union": "^3.1.0",
-            "get-value": "^2.0.6",
-            "is-extendable": "^0.1.1",
-            "set-value": "^0.4.3"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            },
-            "set-value": {
-              "version": "0.4.3",
-              "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
-              "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
-              "dev": true,
-              "requires": {
-                "extend-shallow": "^2.0.1",
-                "is-extendable": "^0.1.1",
-                "is-plain-object": "^2.0.1",
-                "to-object-path": "^0.3.0"
-              }
-            }
-          }
-        },
-        "unique-filename": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
-          "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
-          "dev": true,
-          "requires": {
-            "unique-slug": "^2.0.0"
-          }
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+          "dev": true
         },
-        "unique-slug": {
+        "fast-deep-equal": {
           "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
-          "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "fast-json-stable-stringify": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+          "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+          "dev": true
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
           "dev": true,
           "requires": {
-            "imurmurhash": "^0.1.4"
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0"
           }
         },
-        "unset-value": {
+        "punycode": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+          "dev": true
+        },
+        "schema-utils": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-          "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "has-value": "^0.3.1",
-            "isobject": "^3.0.0"
-          },
-          "dependencies": {
-            "has-value": {
-              "version": "0.3.1",
-              "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-              "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-              "dev": true,
-              "requires": {
-                "get-value": "^2.0.3",
-                "has-values": "^0.1.4",
-                "isobject": "^2.0.0"
-              },
-              "dependencies": {
-                "isobject": {
-                  "version": "2.1.0",
-                  "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-                  "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-                  "dev": true,
-                  "requires": {
-                    "isarray": "1.0.0"
-                  }
-                }
-              }
-            },
-            "has-values": {
-              "version": "0.1.4",
-              "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-              "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
-              "dev": true
-            }
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
         "uri-js": {
@@ -8282,802 +5392,785 @@
           "requires": {
             "punycode": "^2.1.0"
           }
-        },
-        "urix": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-          "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
-          "dev": true
-        },
-        "url": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-          "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-          "dev": true,
-          "requires": {
-            "punycode": "1.3.2",
-            "querystring": "0.2.0"
-          },
-          "dependencies": {
-            "punycode": {
-              "version": "1.3.2",
-              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-              "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-              "dev": true
-            }
-          }
-        },
-        "use": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-          "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
-          "dev": true
-        },
-        "util": {
-          "version": "0.10.4",
-          "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
-          "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+        }
+      }
+    },
+    "supports-color": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+      "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+      "dev": true
+    },
+    "tar": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+      "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "dev": true,
+      "requires": {
+        "block-stream": "*",
+        "fstream": "^1.0.12",
+        "inherits": "2"
+      }
+    },
+    "terser": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+      "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+      "dev": true,
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz",
+      "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^3.1.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "inherits": "2.0.3"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "dev": true
-        },
-        "vm-browserify": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
-          "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+        "serialize-javascript": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
+          "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
           "dev": true,
           "requires": {
-            "indexof": "0.0.1"
+            "randombytes": "^2.1.0"
           }
-        },
-        "watchpack": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
-          "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+        }
+      }
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "timers-browserify": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+      "dev": true,
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "tiny-emitter": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+      "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+      "dev": true
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "dev": true
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "chokidar": "^2.0.2",
-            "graceful-fs": "^4.1.2",
-            "neo-async": "^2.5.0"
+            "is-buffer": "^1.1.5"
           }
-        },
-        "webpack-sources": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
-          "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+        }
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "dev": true,
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "tough-cookie": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+      "dev": true,
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "dev": true
+    },
+    "true-case-path": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+      "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.2"
+      }
+    },
+    "tslib": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+      "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
+      "dev": true
+    },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "union-value": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dev": true,
+      "requires": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
           "dev": true,
           "requires": {
-            "source-list-map": "^2.0.0",
-            "source-map": "~0.6.1"
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
           },
           "dependencies": {
-            "source-map": {
-              "version": "0.6.1",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-              "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-              "dev": true
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
             }
           }
         },
-        "worker-farm": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
-          "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
-          "dev": true,
-          "requires": {
-            "errno": "~0.1.7"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-          "dev": true
-        },
-        "xtend": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-          "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
-          "dev": true
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
-          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
           "dev": true
         }
       }
     },
-    "webpack-cli": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz",
-      "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==",
+    "upath": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+      "dev": true,
+      "optional": true
+    },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
       "dev": true,
       "requires": {
-        "chalk": "^2.4.1",
-        "cross-spawn": "^6.0.5",
-        "enhanced-resolve": "^4.1.0",
-        "global-modules-path": "^2.3.0",
-        "import-local": "^2.0.0",
-        "interpret": "^1.1.0",
-        "loader-utils": "^1.1.0",
-        "supports-color": "^5.5.0",
-        "v8-compile-cache": "^2.0.2",
-        "yargs": "^12.0.2"
+        "punycode": "^2.1.0"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "dev": true,
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
-          "dev": true
-        },
-        "camelcase": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
-          "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
-          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "cliui": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
-          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
-          "dev": true,
-          "requires": {
-            "string-width": "^2.1.1",
-            "strip-ansi": "^4.0.0",
-            "wrap-ansi": "^2.0.0"
-          }
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-          "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-          "dev": true
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-          "dev": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-          "dev": true
-        },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "decamelize": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-          "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-          "dev": true
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "enhanced-resolve": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
-          "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "memory-fs": "^0.4.0",
-            "tapable": "^1.0.0"
-          }
-        },
-        "errno": {
-          "version": "0.1.7",
-          "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
-          "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
-          "dev": true,
-          "requires": {
-            "prr": "~1.0.1"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-          "dev": true
-        },
-        "execa": {
-          "version": "0.10.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
-          "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^3.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "get-caller-file": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
-          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
-          "dev": true
-        },
-        "get-stream": {
-          "version": "3.0.0",
-          "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-          "dev": true
-        },
-        "global-modules-path": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz",
-          "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==",
-          "dev": true
-        },
-        "graceful-fs": {
-          "version": "4.1.15",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
-          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
           "dev": true
-        },
-        "import-local": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
-          "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
-          "dev": true,
-          "requires": {
-            "pkg-dir": "^3.0.0",
-            "resolve-cwd": "^2.0.0"
-          }
-        },
+        }
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+      "dev": true
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3"
+      },
+      "dependencies": {
         "inherits": {
           "version": "2.0.3",
           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
           "dev": true
-        },
-        "interpret": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
-          "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
-          "dev": true
-        },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
-          "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-          "dev": true
-        },
-        "is-stream": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-          "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-          "dev": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "isexe": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-          "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-          "dev": true
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-          "dev": true
-        },
-        "lcid": {
+        }
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
+      "dev": true
+    },
+    "v8-compile-cache": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
+      "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
+      "dev": true
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+      "dev": true
+    },
+    "watchpack": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
+      "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
+      "dev": true,
+      "requires": {
+        "chokidar": "^3.4.1",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0",
+        "watchpack-chokidar2": "^2.0.0"
+      }
+    },
+    "watchpack-chokidar2": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
+      "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chokidar": "^2.1.8"
+      },
+      "dependencies": {
+        "anymatch": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
-          "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^2.0.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
           }
         },
-        "map-age-cleaner": {
-          "version": "0.1.3",
-          "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
-          "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+          "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
           "dev": true,
-          "requires": {
-            "p-defer": "^1.0.0"
-          }
+          "optional": true
         },
-        "mem": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
-          "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
+        "chokidar": {
+          "version": "2.1.8",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+          "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^1.0.0",
-            "p-is-promise": "^1.1.0"
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.3",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "normalize-path": "^3.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.2.1",
+            "upath": "^1.1.1"
           }
         },
-        "memory-fs": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
-          "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "errno": "^0.1.3",
-            "readable-stream": "^2.0.1"
+            "nan": "^2.12.1"
           }
         },
-        "mimic-fn": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
-          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
-          "dev": true
-        },
-        "nice-try": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-          "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-          "dev": true
-        },
-        "npm-run-path": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-          "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
           "dev": true,
+          "optional": true,
           "requires": {
-            "path-key": "^2.0.0"
+            "binary-extensions": "^1.0.0"
           }
         },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-          "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-          "dev": true
-        },
-        "os-locale": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
-          "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+          "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "execa": "^0.10.0",
-            "lcid": "^2.0.0",
-            "mem": "^4.0.0"
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
           }
-        },
-        "p-defer": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
-          "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
-          "dev": true
-        },
-        "p-finally": {
+        }
+      }
+    },
+    "webpack": {
+      "version": "4.44.1",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz",
+      "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "acorn": "^6.4.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.3.0",
+        "eslint-scope": "^4.0.3",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.3",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.3",
+        "watchpack": "^1.7.4",
+        "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "schema-utils": {
           "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-          "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
-          "dev": true
-        },
-        "p-is-promise": {
-          "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
-          "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
-          "dev": true
-        },
-        "p-limit": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
-          "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "p-try": "^2.0.0"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
-        },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+        }
+      }
+    },
+    "webpack-cli": {
+      "version": "3.3.12",
+      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
+      "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "cross-spawn": "^6.0.5",
+        "enhanced-resolve": "^4.1.1",
+        "findup-sync": "^3.0.0",
+        "global-modules": "^2.0.0",
+        "import-local": "^2.0.0",
+        "interpret": "^1.4.0",
+        "loader-utils": "^1.4.0",
+        "supports-color": "^6.1.0",
+        "v8-compile-cache": "^2.1.1",
+        "yargs": "^13.3.2"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
           "dev": true,
           "requires": {
-            "p-limit": "^2.0.0"
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
           }
         },
-        "p-try": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-          "dev": true
-        },
-        "path-key": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-          "dev": true
-        },
-        "pkg-dir": {
+        "emojis-list": {
           "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-          "dev": true,
-          "requires": {
-            "find-up": "^3.0.0"
-          }
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
-          "dev": true
-        },
-        "prr": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-          "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "require-directory": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-          "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-          "dev": true
-        },
-        "require-main-filename": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
           "dev": true
         },
-        "resolve-cwd": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
-          "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+        "loader-utils": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
           "dev": true,
           "requires": {
-            "resolve-from": "^3.0.0"
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
           }
-        },
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-          "dev": true
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-          "dev": true
-        },
-        "semver": {
-          "version": "5.6.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
-          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+        }
+      }
+    },
+    "webpack-sources": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+      "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+      "dev": true,
+      "requires": {
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+      "dev": true
+    },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+    },
+    "worker-farm": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+      "dev": true,
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "wrap-ansi": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+      "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "string-width": "^3.0.0",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "set-blocking": {
+        "is-fullwidth-code-point": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-          "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-          "dev": true
-        },
-        "shebang-command": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-          "dev": true,
-          "requires": {
-            "shebang-regex": "^1.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-          "dev": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
           "dev": true
         },
         "string-width": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
+            "emoji-regex": "^7.0.1",
             "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^4.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
+            "strip-ansi": "^5.1.0"
           }
         },
         "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        },
-        "strip-eof": {
-          "version": "1.0.0",
-          "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-          "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "dev": true,
           "requires": {
-            "has-flag": "^3.0.0"
+            "ansi-regex": "^4.1.0"
           }
-        },
-        "tapable": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
-          "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
-          "dev": true
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "dev": true
-        },
-        "v8-compile-cache": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
-          "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==",
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true
+    },
+    "y18n": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+      "dev": true
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true
+    },
+    "yargs": {
+      "version": "13.3.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+      "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+      "dev": true,
+      "requires": {
+        "cliui": "^5.0.0",
+        "find-up": "^3.0.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^3.0.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^13.1.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "which-module": {
+        "is-fullwidth-code-point": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-          "dev": true
-        },
-        "wrap-ansi": {
-          "version": "2.1.0",
-          "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1"
-          },
-          "dependencies": {
-            "ansi-regex": {
-              "version": "2.1.1",
-              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-              "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-              "dev": true
-            },
-            "is-fullwidth-code-point": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-              "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-              "dev": true,
-              "requires": {
-                "number-is-nan": "^1.0.0"
-              }
-            },
-            "string-width": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-              "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-              "dev": true,
-              "requires": {
-                "code-point-at": "^1.0.0",
-                "is-fullwidth-code-point": "^1.0.0",
-                "strip-ansi": "^3.0.0"
-              }
-            },
-            "strip-ansi": {
-              "version": "3.0.1",
-              "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-              "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-              "dev": true,
-              "requires": {
-                "ansi-regex": "^2.0.0"
-              }
-            }
-          }
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
           "dev": true
         },
-        "yargs": {
-          "version": "12.0.5",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
-          "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.2.0",
-            "find-up": "^3.0.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.0.0",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^3.2.1 || ^4.0.0",
-            "yargs-parser": "^11.1.1"
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
           }
         },
-        "yargs-parser": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
-          "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "dev": true,
           "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
+            "ansi-regex": "^4.1.0"
           }
         }
       }
     },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
+    "yargs-parser": {
+      "version": "13.1.2",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+      "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      }
     }
   }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/package.json b/vendor/simplesamlphp/simplesamlphp/package.json
index a8e692745e..59558be27f 100644
--- a/vendor/simplesamlphp/simplesamlphp/package.json
+++ b/vendor/simplesamlphp/simplesamlphp/package.json
@@ -9,27 +9,28 @@
     "build": "webpack -p"
   },
   "dependencies": {
-    "clipboard": "^2.0.1",
-    "es6-shim": "^0.35.4",
+    "clipboard": "^2.0.6",
+    "es6-shim": "^0.35.5",
     "font-awesome": "^4.7.0",
-    "highlight.js": "^9.13.1",
-    "jquery": "^3.4.0",
+    "highlight.js": "^9.18.3",
+    "jquery": "^3.5.1",
     "jquery-ui": "^1.12.1",
-    "purecss": "^1.0.0",
-    "reset-css": "^4.0.1",
+    "lodash": "^4.17.19",
+    "purecss": "^1.0.1",
+    "reset-css": "^5.0.1",
     "selectize": "^0.12.6"
   },
   "devDependencies": {
-    "babel-core": "^6.26.3",
-    "babel-loader": "^7.1.4",
-    "copy-webpack-plugin": "^4.6.0",
-    "css-loader": "^1.0.1",
+    "@babel/core": "^7.7.5",
+    "babel-loader": "^8.1.0",
+    "copy-webpack-plugin": "^6.0.3",
+    "css-loader": "^3.2.1",
+    "expose-loader": "^0.7.5",
     "extract-text-webpack-plugin": "^4.0.0-beta.0",
-    "node-sass": "^4.10.0",
-    "sass-loader": "^7.1.0",
+    "node-sass": "^4.14.1",
+    "sass-loader": "^7.3.1",
     "style-loader": "^0.23.1",
-    "webpack": "^4.26.1",
-    "webpack-cli": "^3.1.2",
-    "expose-loader": "^0.7.5"
+    "webpack": "^4.44.1",
+    "webpack-cli": "^3.3.12"
   }
 }
diff --git a/vendor/simplesamlphp/simplesamlphp/phpcs.xml b/vendor/simplesamlphp/simplesamlphp/phpcs.xml
new file mode 100644
index 0000000000..a37323d439
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/phpcs.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<ruleset name="SimpleSAMLphp ruleset">
+    <config name="ignore_warnings_on_exit" value="1"/>
+
+    <description>
+        By default it is less stringent about long lines than other coding standards
+    </description>
+
+    <file>bin</file>
+    <file>config-templates</file>
+    <file>lib</file>
+    <file>metadata-templates</file>
+    <file>modules/admin</file>
+    <file>modules/core</file>
+    <file>modules/cron</file>
+    <file>modules/multiauth</file>
+    <file>modules/portal</file>
+    <file>modules/saml</file>
+    <file>src</file>
+    <file>tests</file>
+    <file>www</file>
+
+    <!-- Exclude deprecated classes; they are removed in SSP 2.0 -->
+    <exclude-pattern>lib/SimpleSAML/Auth/LDAP.php</exclude-pattern>
+    <exclude-pattern>lib/SimpleSAML/Auth/TimeLimitedToken.php</exclude-pattern>
+    <exclude-pattern>lib/SimpleSAML/Bindings/Shib13/*</exclude-pattern>
+    <exclude-pattern>lib/SimpleSAML/Utilities.php</exclude-pattern>
+    <exclude-pattern>lib/SimpleSAML/XML/Shib13/*</exclude-pattern>
+    <exclude-pattern>modules/saml/lib/IdP/SAML1.php</exclude-pattern>
+    <exclude-pattern>modules/saml/www/sp/saml1-acs.php</exclude-pattern>
+    <exclude-pattern>tests/lib/SimpleSAML/Auth/TimeLimitedTokenTest.php</exclude-pattern>
+    <exclude-pattern>www/shib13</exclude-pattern>
+
+    <!-- Exclude old PHP templates (and related); they are removed in SSP 2.0 -->
+    <exclude-pattern>modules/*/templates/*.tpl.php</exclude-pattern>
+    <exclude-pattern>templates/*.tpl.php</exclude-pattern>
+    <exclude-pattern>www/resources/jquery-ui-1.8.js</exclude-pattern>
+    <exclude-pattern>www/resources/clipboard.min.js</exclude-pattern>
+    <exclude-pattern>www/resources/jquery-1.8.js</exclude-pattern>
+
+    <!-- This is the rule we inherit from. If you want to exlude some specific rules, see the docs on how to do that -->
+    <rule ref="PSR12"/>
+
+    <!-- Lines can be a little bit longer before they break the build -->
+    <rule ref="Generic.Files.LineLength">
+        <properties>
+            <property name="lineLimit" value="120"/>
+            <property name="absoluteLineLimit" value="130"/>
+        </properties>
+
+        <!-- Exclude files with long lines that we cannot immediately fix -->
+        <exclude-pattern>tests/lib/SimpleSAML/Metadata/MetaDataStorageSourceTest.php</exclude-pattern>
+        <exclude-pattern>tests/lib/SimpleSAML/Metadata/SAMLParserTest.php</exclude-pattern>
+    </rule>
+
+    <!-- Ignore these warnings until PHP 7.1 becomes the minimum required version -->
+    <rule ref="PSR12.Properties.ConstantVisibility">
+        <exclude-pattern>lib/*</exclude-pattern>
+        <exclude-pattern>modules/*</exclude-pattern>
+        <exclude-pattern>tests/*</exclude-pattern>
+    </rule>
+
+    <!-- Ignore wrong casing until we can rename then in SSP 2.0 -->
+    <rule ref="PSR1.Methods.CamelCapsMethodName">
+        <exclude-pattern>lib/SimpleSAML/XHTML/Template.php</exclude-pattern>
+    </rule>
+
+    <!-- Ignore files with side effects that we cannot fix -->
+    <rule ref="PSR1.Files.SideEffects">
+        <exclude-pattern>bin/*</exclude-pattern>
+        <exclude-pattern>lib/_autoload_modules.php</exclude-pattern>
+        <exclude-pattern>tests/_autoload_modules.php</exclude-pattern>
+        <exclude-pattern>www/_include.php</exclude-pattern>
+    </rule>
+</ruleset>
+
diff --git a/vendor/simplesamlphp/simplesamlphp/phpunit.xml b/vendor/simplesamlphp/simplesamlphp/phpunit.xml
index 6915e5c0b1..4a7750b5f7 100644
--- a/vendor/simplesamlphp/simplesamlphp/phpunit.xml
+++ b/vendor/simplesamlphp/simplesamlphp/phpunit.xml
@@ -7,7 +7,6 @@
          convertWarningsToExceptions="true"
          processIsolation="false"
          stopOnFailure="false"
-         syntaxCheck="false"
          bootstrap="./tests/bootstrap.php">
     <testsuites>
         <testsuite name="Unit tests">
@@ -17,13 +16,13 @@
     <filter>
         <whitelist processUncoveredFilesFromWhitelist="true">
             <directory suffix=".php">./lib/</directory>
-            <directory suffix=".php">./modules/consent/lib/</directory>
             <directory suffix=".php">./modules/core/lib/</directory>
             <directory suffix=".php">./modules/saml/lib/</directory>
             <exclude>
                 <directory>./vendor/</directory>
                 <directory>./tests/</directory>
                 <file>./lib/SimpleSAML/Utils/HttpAdapter.php</file>
+                <file>./lib/SimpleSAML/Auth/LDAP.php</file>
             </exclude>
         </whitelist>
     </filter>
diff --git a/vendor/simplesamlphp/simplesamlphp/psalm.xml b/vendor/simplesamlphp/simplesamlphp/psalm.xml
index 0ccc8b80b8..5a230843ec 100644
--- a/vendor/simplesamlphp/simplesamlphp/psalm.xml
+++ b/vendor/simplesamlphp/simplesamlphp/psalm.xml
@@ -1,18 +1,48 @@
 <?xml version="1.0"?>
 <psalm
     name="SimpleSAMLphp"
-    stopOnFirstError="false"
     useDocblockTypes="true"
     totallyTyped="false"
+    hideExternalErrors="true"
+    allowCoercionFromStringToClassConst="true"
+    allowStringToStandInForClass="true"
 >
     <projectFiles>
-        <directory name="lib/SimpleSAML/Utils" />
+        <directory name="lib/SimpleSAML" />
+
+        <!-- Replaces all modules/... with this one-liner for 2.0
+        <directory name="modules" />
+        -->
+        <directory name="modules/admin" />
+        <directory name="modules/core" />
+        <directory name="modules/cron" />
+        <directory name="modules/exampleauth" />
+        <directory name="modules/multiauth" />
+        <directory name="modules/portal" />
+        <directory name="modules/saml" />
+
+        <directory name="tests" />
+
+        <!-- Ignore deprecated classes -->
+        <ignoreFiles>
+            <file name="lib/SimpleSAML/Auth/DefaultAuth.php" />
+            <file name="lib/SimpleSAML/Auth/TimeLimitedToken.php" />
+            <file name="lib/SimpleSAML/Utilities.php" />
+
+            <!-- Ignore deprecated PHP-templates - Remove for 2.0 -->
+            <file name="modules/**/templates/*.tpl.php" />
+            <file name="modules/saml/templates/proxy/*.tpl.php" />
+            <file name="modules/saml/templates/sp/*.tpl.php" />
+
+            <directory name="vendor" />
+        </ignoreFiles>
     </projectFiles>
 
     <issueHandlers>
         <LessSpecificReturnType errorLevel="info" />
 
         <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
+        <DeprecatedClass errorLevel="info" />
         <DeprecatedMethod errorLevel="info" />
 
         <MissingClosureReturnType errorLevel="info" />
@@ -27,6 +57,50 @@
         <MissingParamType errorLevel="info" />
         <UnusedClass errorLevel="info" />
         <PossiblyUnusedMethod errorLevel="info" />
-        <UntypedParam errorLevel="info" />
+
+        <!-- Ignore these errors until we are fully typehinted -->
+        <DocblockTypeContradiction errorLevel="suppress" />
+        <RedundantConditionGivenDocblockType errorLevel="suppress" />
+
+        <!-- See #1141 -->
+        <MissingDependency>
+            <errorLevel type="suppress">
+                <file name="lib/SimpleSAML/HTTP/Router.php" />
+            </errorLevel>
+        </MissingDependency>
+
+        <!-- Ignore UnresolvableInclude on CLI-scripts -->
+        <UnresolvableInclude>
+            <errorLevel type="suppress">
+                <file name="bin/*.php" />
+                <file name="lib/SimpleSAML/Module.php" />
+                <file name="lib/SimpleSAML/XHTML/Template.php" />
+                <file name="modules/*/bin/*.php" />
+                <file name="tests/bootstrap.php" />
+                <file name="tests/routers/configLoader.php" />
+            </errorLevel>
+        </UnresolvableInclude>
+
+        <!-- Ignore MissingFile on www-scripts - Remove for 2.0 -->
+        <MissingFile>
+            <errorLevel type="suppress">
+                <file name="www/*.php" />
+                <file name="modules/*/www/*.php" />
+            </errorLevel>
+        </MissingFile>
+
+        <!-- Suppress PHPunit-issue -->
+        <PropertyNotSetInConstructor>
+            <errorLevel type="suppress">
+                <directory name="tests" />
+            </errorLevel>
+        </PropertyNotSetInConstructor>
     </issueHandlers>
+
+    <stubs>
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/krb5.php" />
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/memcache.php" />
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/memcached.php" />
+        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/predis.php" />
+    </stubs>
 </psalm>
diff --git a/vendor/simplesamlphp/simplesamlphp/src/css/default.scss b/vendor/simplesamlphp/simplesamlphp/src/css/default.scss
index 77a9fb011e..7ce9b78e79 100644
--- a/vendor/simplesamlphp/simplesamlphp/src/css/default.scss
+++ b/vendor/simplesamlphp/simplesamlphp/src/css/default.scss
@@ -53,6 +53,10 @@ body {
   vertical-align: middle;
 }
 
+i {
+  font-style: italic;
+}
+
 h1 {
   margin: 1em 0;
   font-size: 2em;
@@ -115,6 +119,9 @@ pre, code, kbd, samp, tt {
   //background-color: rgba(0, 0, 0, .1);
   padding: 0 .2rem;
 }
+.xmldata {
+  font-family: monospace;
+}
 
 /************************************************************
  * BUTTONS
@@ -129,8 +136,15 @@ pre, code, kbd, samp, tt {
   margin-right: 4px;
 }
 
-.pure-button-red,
-a.pure-button-red {
+.pure-button {
+  &:hover, &:focus {
+    background-color: #555;
+    padding: .5em 1em;
+    color: #fff;
+  }
+}
+
+.pure-button-red {
   background-color: rgb(219, 1, 0);
   color: #fff;
   &:hover, &:focus {
@@ -183,6 +197,10 @@ a.pure-button-red {
   border: 1px solid #E6E6E6;
 }
 
+.pure-button-group.two-elements form {
+  display: inline;
+}
+
 .pure-button-group.two-elements .pure-button:first-child {
   border-right: none;
 }
@@ -465,10 +483,10 @@ CONTENT
   padding: 0.5em 1em;
   display: inline-block;
   min-height: 1em;
-  max-height: 20em;
   width: 100%;
   height: 100%;
   white-space: pre-wrap;
+  font-family: monospace;
   &::selection {
     color: black;
     background: $lighYellow;
@@ -830,6 +848,8 @@ div.preferredidp {
     padding: .25em;
     display: block;
     color: black;
+    background-color: #f4f4f4;
+    border-top: solid 1px #bbb;
     &:focus, &:hover {
       background-color: #555;
       color: white;
@@ -857,3 +877,7 @@ div.preferredidp {
     }
   }
 }
+
+.hidden {
+  display: none;
+}
diff --git a/vendor/simplesamlphp/simplesamlphp/src/js/bundle.js b/vendor/simplesamlphp/simplesamlphp/src/js/bundle.js
index 2766b06fab..14e550b245 100644
--- a/vendor/simplesamlphp/simplesamlphp/src/js/bundle.js
+++ b/vendor/simplesamlphp/simplesamlphp/src/js/bundle.js
@@ -4,11 +4,12 @@ import "selectize/dist/js/selectize";
 import hljs from  "highlight.js/lib/highlight";
 import xml from "highlight.js/lib/languages/xml";
 import php from "highlight.js/lib/languages/php";
+import json from "highlight.js/lib/languages/json";
 
 $(document).ready(function () {
     // get available languages
     let languages = $.map($('#language-selector option'), function (option) {
-       return option.text.toLowerCase();
+        return option.text.toLowerCase();
     });
 
     // initialize selectize
@@ -29,7 +30,7 @@ $(document).ready(function () {
     });
 
     // expander boxes
-    $('.expandable > .expander').on('click', function(e) {
+    $('.expandable > .expander').on('click', function (e) {
         e.preventDefault();
         let target = $(e.currentTarget);
         target.parents('.expandable').toggleClass('expanded');
@@ -39,15 +40,16 @@ $(document).ready(function () {
     // syntax highlight
     hljs.registerLanguage('xml', xml);
     hljs.registerLanguage('php', php);
-    $('.code-box-content.xml, .code-box-content.php').each(function(i, block) {
+    hljs.registerLanguage('json', json);
+    $('.code-box-content.xml, .code-box-content.php, .code-box-content.json').each(function (i, block) {
         hljs.highlightBlock(block)
     });
 
     // clipboard
     let clipboard = new ClipboardJS('.copy');
-    clipboard.on('success', function(e) {
-        setTimeout(function() {
+    clipboard.on('success', function (e) {
+        setTimeout(function () {
             e.clearSelection();
         }, 150);
     });
-});
\ No newline at end of file
+});
diff --git a/vendor/simplesamlphp/simplesamlphp/src/js/logout/logout.js b/vendor/simplesamlphp/simplesamlphp/src/js/logout/logout.js
new file mode 100644
index 0000000000..a1b543486b
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/src/js/logout/logout.js
@@ -0,0 +1,262 @@
+/**
+ * This class is used for the logout page.
+ *
+ * It allows the user to start logout from all the services where a session exists (if any). Logout will be
+ * triggered by loading an iframe where we send a SAML logout request to the SingleLogoutService endpoint of the
+ * given SP. After successful response back from the SP, we will load a small template in the iframe that loads
+ * this class again (IFrameLogoutHandler branch of the constructor), and sends a message to the main page
+ * (core:logout-iframe branch).
+ *
+ * The iframes communicate the logout status for their corresponding association via an event message, for which the
+ * main page is listening (the clearAssociation() method). Upon reception of a message, we'll check if there was an
+ * error or not, and call the appropriate method (either completed() or failed()).
+ */
+class SimpleSAMLLogout {
+    constructor(page)
+    {
+        if (page === 'core:logout-iframe') { // main page
+            this.populateData();
+            if (Object.keys(this.sps).length === 0) {
+                // all SPs completed logout, this was a reload
+                this.btncontinue.click();
+            }
+            this.btnall.on('click', this.initLogout.bind(this));
+            window.addEventListener('message', this.clearAssociation.bind(this), false);
+        } else if (page === 'IFrameLogoutHandler') { // iframe
+            let data = $('i[id="data"]');
+            let message = {
+                spId: $(data).data('spid')
+            };
+            if ($(data).data('error')) {
+                message.error = $(data).data('error');
+            }
+
+            window.parent.postMessage(JSON.stringify(message), SimpleSAMLLogout.getOrigin());
+        }
+    }
+
+
+    /**
+     * Clear an association when it is signaled from an iframe (either failed or completed).
+     *
+     * @param event The event containing the message from the iframe.
+     */
+    clearAssociation(event)
+    {
+        if (event.origin !== SimpleSAMLLogout.getOrigin()) {
+            // we don't accept events from other origins
+            return;
+        }
+        let data = JSON.parse(event.data);
+        if (typeof data.error === 'undefined') {
+            this.completed(data.spId);
+        } else {
+            this.failed(data.spId, data.error);
+        }
+
+        if (Object.keys(this.sps).length === 0) {
+            if (this.nfailed === 0) {
+                // all SPs successfully logged out, continue w/o user interaction
+                this.btncontinue.click();
+            }
+        }
+    }
+
+
+    /**
+     * Mark logout as completed for a given SP.
+     *
+     * This method will be called by the SimpleSAML\IdP\IFrameLogoutHandler class upon successful logout from the SP.
+     *
+     * @param id The ID of the SP that completed logout successfully.
+     */
+    completed(id)
+    {
+        if (typeof this.sps[id] === 'undefined') {
+            return;
+        }
+
+        this.sps[id].icon.removeClass('fa-spin');
+        this.sps[id].icon.removeClass('fa-circle-o-notch');
+        this.sps[id].icon.addClass('fa-check-circle');
+        this.sps[id].element.toggle();
+        delete this.sps[id];
+        this.finish();
+    }
+
+
+    /**
+     * Mark logout as failed for a given SP.
+     *
+     * This method will be called by the SimpleSAML\IdP\IFrameLogoutHandler class upon logout failure from the SP.
+     *
+     * @param id The ID of the SP that failed to complete logout.
+     * @param reason The reason why logout failed.
+     */
+    failed(id, reason)
+    {
+        if (typeof this.sps[id] === 'undefined') {
+            return;
+        }
+
+        this.sps[id].element.addClass('error');
+        $(this.sps[id].icon).removeClass('fa-spin fa-circle-o-notch');
+        $(this.sps[id].icon).addClass('fa-exclamation-circle');
+
+        if (this.errmsg.hasClass('hidden')) {
+            this.errmsg.removeClass('hidden');
+        }
+        if (this.errfrm.hasClass('hidden')) {
+            this.errfrm.removeClass('hidden');
+        }
+
+        delete this.sps[id];
+        this.nfailed++;
+        this.finish();
+    }
+
+
+    /**
+     * Finish the logout process, acting according to the current situation:
+     *
+     * - If there were failures, an error message is shown telling the user to close the browser.
+     * - If everything went ok, then we just continue back to the service that started logout.
+     *
+     * Note: this method won't do anything if there are SPs pending logout (e.g. waiting for the timeout).
+     */
+    finish()
+    {
+        if (Object.keys(this.sps).length > 0) { // pending services
+            return;
+        }
+
+        if (typeof this.timeout !== 'undefined') {
+            clearTimeout(this.timeout);
+        }
+
+        if (this.nfailed > 0) { // some services failed to log out
+            this.errmsg.removeClass('hidden');
+            this.errfrm.removeClass('hidden');
+            this.actions.addClass('hidden');
+        } else { // all services done
+            this.btncontinue.click();
+        }
+    }
+
+
+    /**
+     * Get the origin of the current page.
+     */
+    static getOrigin()
+    {
+        let origin = window.location.origin;
+        if (!origin) {
+            // IE < 11 does not support window.location.origin
+            origin = window.location.protocol + "//" + window.location.hostname +
+                (window.location.port ? ':' + window.location.port : '');
+        }
+        return origin;
+    }
+
+
+    /**
+     * This method starts logout on all SPs where we are currently logged in.
+     *
+     * @param event The click event on the "Yes, all services" button.
+     */
+    initLogout(event)
+    {
+        event.preventDefault();
+
+        this.btnall.prop('disabled', true);
+        this.btncancel.prop('disabled', true);
+        Object.keys(this.sps).forEach((function (id) {
+            this.sps[id].status = 'inprogress';
+            this.sps[id].startTime = (new Date()).getTime();
+            this.sps[id].iframe.attr('src', this.sps[id].iframe.data('url'));
+            this.sps[id].icon.addClass('fa-spin');
+        }).bind(this));
+        this.initTimeout();
+    }
+
+
+    /**
+     * Set timeouts for all logout operations.
+     *
+     * If an SP didn't reply by the timeout, we'll mark it as failed.
+     */
+    initTimeout()
+    {
+        let timeout = 10;
+
+        for (const id in this.sps) {
+            if (typeof id === 'undefined') {
+                continue;
+            }
+            if (!this.sps.hasOwnProperty(id)) {
+                continue;
+            }
+            if (this.sps[id].status !== 'inprogress') {
+                continue;
+            }
+            let now = ((new Date()).getTime() - this.sps[id].startTime) / 1000;
+
+            if (this.sps[id].timeout <= now) {
+                this.failed(id, 'Timed out', window.document);
+            } else {
+                // get the lowest timeout we have
+                if ((this.sps[id].timeout - now) < timeout) {
+                    timeout = this.sps[id].timeout - now;
+                }
+            }
+        }
+
+        if (Object.keys(this.sps).length > 0) {
+            // we have associations left, check them again as soon as one expires
+            this.timeout = setTimeout(this.initTimeout.bind(this), timeout * 1000);
+        } else {
+            this.finish();
+        }
+    }
+
+
+    /**
+     * This method populates the data we need from data-* properties in the page.
+     */
+    populateData()
+    {
+        this.sps = {};
+        this.btnall = $('button[id="btn-all"]');
+        this.btncancel = $('button[id="btn-cancel"]');
+        this.btncontinue = $('button[id="btn-continue"]');
+        this.actions = $('div[id="original-actions"]');
+        this.errmsg = $('div[id="error-message"]');
+        this.errfrm = $('form[id="error-form"]');
+        this.nfailed = 0;
+        let that = this;
+
+        // initialise SP status and timeout arrays
+        $('li[id^="sp-"]').each(function () {
+            let id = $(this).data('id');
+            let iframe = $('iframe[id="iframe-' + id + '"]');
+            let status = $(this).data('status');
+
+            switch (status) {
+                case 'failed':
+                    that.nfailed++;
+                case 'completed':
+                    return;
+            }
+
+            that.sps[id] = {
+                status: status,
+                timeout: $(this).data('timeout'),
+                element: $(this),
+                iframe: iframe,
+                icon: $('i[id="icon-' + id + '"]'),
+            };
+        });
+    }
+}
+
+export default SimpleSAMLLogout;
diff --git a/vendor/simplesamlphp/simplesamlphp/src/js/logout/main.js b/vendor/simplesamlphp/simplesamlphp/src/js/logout/main.js
new file mode 100644
index 0000000000..16c508f9ce
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/src/js/logout/main.js
@@ -0,0 +1,5 @@
+import SimpleSAMLLogout from './logout.js';
+
+$(document).ready(function () {
+    new SimpleSAMLLogout($('body').attr('id'));
+});
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/IFrameLogoutHandler.twig b/vendor/simplesamlphp/simplesamlphp/templates/IFrameLogoutHandler.twig
index ad4d4a6985..946dd71a2c 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/IFrameLogoutHandler.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/IFrameLogoutHandler.twig
@@ -1,16 +1,16 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <title>Logout response from {{ assocId|escape('html') }}</title>
-        <script>
+{% set data = {}|merge({ "spid": spId }) %}
 {% if errorMsg is defined %}
-            window.parent.logoutFailed("{{ spId }}", "{{ errorMsg|escape }}");
-{% else %}
-            window.parent.logoutCompleted("{{ spId }}");
+    {% set data = data|merge({ "error": errorMsg }) %}
 {% endif %}
-        </script>
-    </head>
-    <body>
-    </body>
-</html>
+{% extends "base.twig" %}
+{% block header %}{% endblock header %}
+{% block footer %}{% endblock footer %}
+{% block content %}
+
+          <i id="data"{% for k,v in data %} data-{{ k }}="{{ v }}"{% endfor %}></i>
+{% endblock content %}
+{% block postload %}
+
+    <script src="{{ asset('js/logout.js') }}"></script>
+{% endblock postload %}
 
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/_footer.twig b/vendor/simplesamlphp/simplesamlphp/templates/_footer.twig
index a72a31c764..5cfb974b9d 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/_footer.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/_footer.twig
@@ -1,13 +1,11 @@
-      <div id="footer">
-        <div class="wrap">
-          <div class="center copyrights">
-            &copy; 2007-{{ year }}
-            <a href="https://simplesamlphp.org/">SimpleSAMLphp</a>
-          </div>
-          <div class="logo-footer-right show-for-large">
-            <div class="logo-footer">
-              <img class="pure-img" src="/{{ baseurlpath }}resources/icons/ssplogo-fish-small.png" alt="Small fish logo">
-            </div>
-          </div>
-        </div>
+<div id="footer">
+  <div class="wrap">
+    <div class="center copyrights">&copy; 2007-{{ year }} <a href="https://simplesamlphp.org/">SimpleSAMLphp</a>
+    </div>
+    <div class="logo-footer-right show-for-large">
+      <div class="logo-footer">
+        <img class="pure-img" src="/{{ baseurlpath }}resources/icons/ssplogo-fish-small.png" alt="Small fish logo">
       </div>
+    </div>
+  </div>
+</div>
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/_header.twig b/vendor/simplesamlphp/simplesamlphp/templates/_header.twig
index bc52df15e1..e23d385471 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/_header.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/_header.twig
@@ -1,81 +1,79 @@
-        <div id="header">
-            <div class="wrap">
-                <div class="left">
-                    <div class="v-center logo-header">
-                        <div id="logo">
-                            {%- if header == 'SimpleSAMLphp' %}
-
-                            <span class="simple">Simple</span>{# -#}
-                            <span class="saml">SAML</span>{# -#}
-                            <span class="simple">php</span>
-                            {%- else %}
-
-                            {{ header }}
-                            {%- endif %}
-
-                            <img class="pure-img hidden" src="" alt="LOGO">
-                        </div>
-                    </div>
-                </div>
-                {% if not hideLanguageBar -%}
-                <div class="right">
-                    <a href="" id="menuLink" class="menu-link hide-for-large">
-                        <span class="fa fa-globe fa-2x" aria-hidden="true"></span>
-                    </a>
-                </div>
-                {% endif %}
-                {% if not hideLanguageBar -%}
-                    <div id="languagebar" class="hide-for-large">
-                        <div id="menu">
-                            <div class="pure-menu">
-                                <ul class="pure-menu-list">
-                                {% for key, lang in languageBar -%}
-                                    {% if key == currentLanguage -%}
-                                    <li><a class="pure-menu-heading" href="#">{{ lang.name }}</a><li>
-                                    {% else -%}
-                                    {% if lang.url -%}
-                                    <li class="pure-menu-item"><a href="{{ lang.url }}{%- spaceless %}
-                                        {% if queryParams -%}&{% endif -%}
-                                        {% for name, value in queryParams -%}
-                                            {%- if not loop.first %}&{% endif -%}
-                                            {%- if value %}{{ name }}={{ value }}{% else %}{{ name }}{%- endif %}
-                                        {%- endfor %}"{% endspaceless %} class="pure-menu-link">{{ lang.name }}</a></li>
-                                    {% endif -%}
-                                {% endif -%}
-                            {% endfor -%}
-                                </ul>
-                            </div>
-                        </div>
-                    </div>
-                {%- endif -%}
-                <div class="right show-for-large">
-                    <div class="v-center language-bar">
-                        <form id="language-form" class="pure-form" method="get">
-                            {% if not hideLanguageBar -%}
-                            <div id="languagebar">
-                            {% for name, value in queryParams -%}
-                                {% if value -%}
-                                <input type="hidden" name="{{ name }}" value="{{ value }}" />
-                                {%- else -%}
-                                <input type="hidden" name="{{ name }}" />
-                                {%- endif -%}
-                            {%- endfor %}
-
-                                <select  class="pure-input-1-4 language-menu selectize" name="language"
-                                         id="language-selector">
-                                    {% for key, lang in languageBar -%}
-                                    {% if key == currentLanguage -%}
-                                    <option value="{{ key }}" selected="selected">&#xf0ac;  {{ lang.name }}</option>
-                                    {% else -%}
-                                    <option value="{{ key }}">{{ lang.name }}</option>
-                                    {% endif -%}
-                                {% endfor -%}
-                                </select>
-                            </div>
-                        {% endif -%}
-                        </form>
-                    </div> <!--language-bar-->
-                </div><!--show-for-large-->
-            </div> <!-- wrap -->
-        </div> <!-- header -->
+<div id="header">
+  <div class="wrap">
+    <div class="left">
+      <div class="v-center logo-header">
+        <div id="logo">
+        {% if header == 'SimpleSAMLphp' %}
+          <span class="simple">Simple</span>{# -#}
+          <span class="saml">SAML</span>{# -#}
+          <span class="simple">php</span>
+        {% else %}
+          {{ header }}
+        {% endif %}
+          <img class="pure-img hidden" src="" alt="{% trans %}Logo{% endtrans %}">
+        </div>
+      </div>
+    </div>
+    {% if not hideLanguageBar %}
+    <div class="right">
+      <a href="" id="menuLink" class="menu-link hide-for-large">
+        <span class="fa fa-globe fa-2x" aria-hidden="true"></span>
+      </a>
+    </div>
+    <div id="languagebar" class="hide-for-large">
+      <div id="menu">
+        <div class="pure-menu">
+          <ul class="pure-menu-list">
+          {% for key, lang in languageBar %}
+            {% if key == currentLanguage %}
+            <li><a class="pure-menu-heading" href="#">{{ lang.name }}</a><li>
+            {% else %}
+            {% if lang.url %}
+            <li class="pure-menu-item"><a href="{{ lang.url }}
+              {%- if queryParams %}&{% endif %}
+                  {%- for name, value in queryParams %}
+                    {%- if not loop.first %}&{% endif %}
+                    {%- if value %}{{ name }}={{ value }}{% else %}{{ name }}{% endif %}
+                  {%- endfor %}" class="pure-menu-link">{{ lang.name }}</a></li>
+              {% endif %}
+            {% endif %}
+          {% endfor %}
+          </ul>
+        </div>
+      </div>
+    </div>
+    {% endif %}
+    <div class="right show-for-large">
+      <div class="v-center language-bar">
+        <form id="language-form" class="pure-form" method="get">
+          {% if not hideLanguageBar %}
+          <div id="languagebar">
+            {% for name, value in queryParams %}
+              {% if value %}
+            <input type="hidden" name="{{ name }}" value="{{ value }}" />
+              {% else %}
+            <input type="hidden" name="{{ name }}" />
+              {% endif %}
+            {% endfor %}
+            <select  class="pure-input-1-4 language-menu selectize" name="language" id="language-selector">
+            {% for key, lang in languageBar %}
+              {% if key == currentLanguage %}
+              <option value="{{ key }}" selected="selected">&#xf0ac;  {{ lang.name }}</option>
+              {% else %}
+              <option value="{{ key }}">{{ lang.name }}</option>
+              {% endif %}
+            {% endfor %}
+            </select>
+            <noscript>
+              <button type="submit" class="pure-button">
+                <i class="fa fa-arrow-right"></i>
+              </button>
+            </noscript>
+          </div>
+          {% endif %}
+        </form>
+      </div>{# language bar #}
+    </div>{# show-for-large #}
+  </div>{# wrap #}
+</div>{# header #}
 
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/auth_status.twig b/vendor/simplesamlphp/simplesamlphp/templates/auth_status.twig
index 41b5f3fcae..9965dd3760 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/auth_status.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/auth_status.twig
@@ -17,9 +17,8 @@
 {% embed '_table.twig' -%}
 
     {% block namecol -%}
-    {% set attr = ('{attributes:attribute_'~(name|lower)~'}') %}
-    {% set translated = attr|trans %}
-    <td class="attrname">{% if translated != attr %} {{ translated }} <br>{% endif %} <samp>{{ name }}</samp></td>
+    {% set translated = name|trans %}
+    <td class="attrname">{% if translated != name %} {{ translated }} <br>{% endif %} <samp>{{ name }}</samp></td>
     {% endblock %}
 
 
@@ -68,6 +67,40 @@
 
 {% endif %}
 
+    <dl>
+      <dt>{% trans %}Debug information to be used by your support staff{% endtrans %}</dt>
+      {%- embed "includes/expander.twig" %}
+        {%- block content %}
+
+        <dl>
+          <dd>{% trans %}Tracking number{% endtrans %}</dd>
+          <dd class="code-box hljs">
+            <div class="pure-button-group top-right-corner">
+              <a class="pure-button copy hljs" data-clipboard-target="#trackid"
+                 title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+            </div>
+            <code id="trackid" class="code-box-content">{{ trackid }}</code>
+          </dd>
+          {%- if authData %}
+
+          <dd>{% trans %}Information about your current session{% endtrans %}</dd>
+          <dd class="code-box hljs">
+            <div class="pure-button-group top-right-corner">
+              <a class="pure-button copy hljs" data-clipboard-target="#authdata"
+                 title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+            </div>
+            <div id="authdata" class="code-box-content php">
+              {{- authData|json_encode(constant('JSON_UNESCAPED_SLASHES') b-or constant('JSON_PRETTY_PRINT')) |raw -}}
+            </div>
+          </dd>
+          {%- endif %}
+
+        </dl>
+        {%- endblock content %}
+      {%- endembed %}
+
+    </dl>
+    <br>
 
 {% if logout %}
     <h2>{% trans %}Logout{% endtrans %}</h2>
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/base.twig b/vendor/simplesamlphp/simplesamlphp/templates/base.twig
index 29228797c3..ea464b7caa 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/base.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/base.twig
@@ -1,50 +1,34 @@
+{% spaceless %}
 <!DOCTYPE html>
 <html lang="{{ currentLanguage }}" xml:lang="{{ currentLanguage }}">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <meta name="viewport" content="initial-scale=1.0">
     <title>{{ pagetitle }}</title>
-    <link rel="stylesheet" type="text/css" href="{{ asset("css/stylesheet.css") }}">
-    <link rel="icon" type="image/icon" href="/{{ baseurlpath }}resources/icons/favicon.ico">
+    <link rel="stylesheet" href="{{ asset("css/stylesheet.css") }}">
+    <link rel="icon" href="/{{ baseurlpath }}resources/icons/favicon.ico">
     {% if isRTL %}
-
-    <link rel="stylesheet" type="text/css" href="/{{ baseurlpath }}assets/css/src/default-rtl.css" />
+    <link rel="stylesheet" href="{{ asset("assets/css/src/default-rtl.css") }}">
     {% endif %}
-
     <meta name="robots" content="noindex, nofollow">
-    <link rel="preload" href="{{ asset('js/bundle.js') }}" as="script" />
-    {%- block preload %}{% endblock %}
-
+    <link rel="preload" href="{{ asset('js/bundle.js') }}" as="script">
+    {% block preload %}{% endblock %}
   </head>
   <body id="{{ templateId }}">
     <div id="layout">
-    {%- block header %}{% include "_header.twig" %}{% endblock %}
-
+    {% block header %}{% include "_header.twig" %}{% endblock %}
       <div id="content">
         <div class="wrap">
-          {%- if not isProduction %}
-
-          <div class="message-box warning">
-            {% trans %}You are now accessing a pre-production system. This authentication setup
-            {#- #} is for testing and pre-production verification only. If someone sent you
-            {#- #} a link that pointed you here, and you are not <i>a tester</i> you
-            {#- #} probably got the wrong link, and should <b>not be here</b>.{% endtrans %}
-          </div>
-          {% endif -%}
-          {%- block contentwrapper %}
-            {%- block content %}{% endblock %}
-          {%- endblock contentwrapper %}
-
-          </div>
-        </div><!-- content -->
+          {% block contentwrapper %}{% block content %}{% endblock %}{% endblock contentwrapper %}
+        </div>
+      </div>{# content #}
       <div id="push"></div>
-    </div><!-- layout -->
+    </div>{# layout #}
     <div id="foot">
-      {%- block footer %}{% include "_footer.twig" %}{% endblock %}
-
+      {% block footer %}{% include "_footer.twig" %}{% endblock %}
     </div>
     <script src="{{ asset('js/bundle.js') }}"></script>
-    {%- block postload %}{% endblock %}
-
+    {% block postload %}{% endblock %}
   </body>
 </html>
+{% endspaceless %}
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/includes/expander.twig b/vendor/simplesamlphp/simplesamlphp/templates/includes/expander.twig
index 8096b91332..0817520d3f 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/includes/expander.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/includes/expander.twig
@@ -1,11 +1,13 @@
         <div class="expandable{% if expanded %} expanded{% endif %}">
+          {% if block('general') is defined %}
           <div class="general">
-            {%- block general%}{% endblock %}
+            {{- block("general") }}
 
           </div>
+          {% endif %}
           <a tabindex="0" class="expander"></a>
           <div class="content">
             {%- block content %}{% endblock %}
 
           </div>
-        </div>
\ No newline at end of file
+        </div>
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/login-ldapmulti.php b/vendor/simplesamlphp/simplesamlphp/templates/login-ldapmulti.php
index a53da3ebed..b4cf136dff 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/login-ldapmulti.php
+++ b/vendor/simplesamlphp/simplesamlphp/templates/login-ldapmulti.php
@@ -51,7 +51,7 @@
 
             <tr>
                 <td style="padding: .3em;"><?php echo $this->t('password'); ?></td>
-                <td><input type="password" tabindex="2" name="password" /></td>
+                <td><input type="password" tabindex="2" name="password" autocomplete="current-password" /></td>
             </tr>
             <tr><td></td><td>
                 <button type="submit" tabindex="5" id="mobilesubmit" class="btn"><?php echo $this->t('login_button'); ?></button>
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/login.php b/vendor/simplesamlphp/simplesamlphp/templates/login.php
index fd0755db98..fb1d7b951b 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/login.php
+++ b/vendor/simplesamlphp/simplesamlphp/templates/login.php
@@ -43,7 +43,7 @@
             </tr>
             <tr>
                 <td style="padding: .3em;"><?php echo $this->t('password'); ?></td>
-                <td><input id="password" type="password" tabindex="2" name="password" /></td>
+                <td><input id="password" type="password" tabindex="2" name="password" autocomplete="current-password" /></td>
             </tr>
             <tr>
                 <td></td>
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/mailhtml.twig b/vendor/simplesamlphp/simplesamlphp/templates/mailhtml.twig
new file mode 100644
index 0000000000..1f01ce16da
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/templates/mailhtml.twig
@@ -0,0 +1,25 @@
+<style type="text/css">
+body {
+    font-family: sans-serif;
+}
+ul {
+    list-style: none;
+    padding-left: 1em;
+}
+p {
+    white-space: pre-line;
+}
+</style>
+<h1>{{ subject }}</h1>
+
+<p>{{ text }}</p>
+
+{% for name, values in data %}
+<h2>{{ name }}</h2>
+<ul>
+{% for value in values %}
+    <li><pre>{{ value }}</pre></li>
+{% endfor %}
+</ul>
+
+{% endfor %}
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/mailtxt.twig b/vendor/simplesamlphp/simplesamlphp/templates/mailtxt.twig
new file mode 100644
index 0000000000..b560656da3
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/templates/mailtxt.twig
@@ -0,0 +1,13 @@
+{% autoescape false %}
+# {{ subject }}
+
+{{ text }}
+
+{% for name, values in data %}
+## {{ name }}
+{% for value in values %}
+- {{ value }}
+{% endfor %}
+
+{% endfor %}
+{% endautoescape %}
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/metadata-converter.twig b/vendor/simplesamlphp/simplesamlphp/templates/metadata-converter.twig
index d2d936537e..8c7b5291eb 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/metadata-converter.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/metadata-converter.twig
@@ -1,23 +1,22 @@
 {% set pagetitle = 'Metadata parser'|trans %}
 {% extends "base.twig" %}
 
-{%  set i=1 %}
+{% set i=1 %}
 {% block content %}
     <h1>{{ pagetitle }}</h1>
-    <form method="post" class="pure-form" enctype="multipart/form-data">
-        <h3> {% trans 'XML metadata' %}</h3>
+    <form method="post" class="pure-form" enctype="multipart/form-data" action="#converted">
+        <h3>{% trans 'XML metadata' %}</h3>
         <div class="pure-control-group">
-            <textarea name="xmldata" rows="20" class="text-area edge">{{ xmldata }}</textarea>
+            <textarea name="xmldata" rows="20" class="text-area edge xmldata">{{ xmldata }}</textarea>
         </div>
         <br>
         <div class="center">
             <div class="pure-button-group two-elements" role="group">
                 <label class="pure-button">
                     <span class="fa fa-folder-open"></span>{{ 'or select a file:'|trans }}
-                    <input type="file" name="xmlfile" class="hidden" multiple>
+                    <input type="file" name="xmlfile" class="hidden" id="file-input">
                 </label>
-                {#needs translation#}
-                <label id="show-file" class="pure-button hollow show-files" disabled>No file selected.</label>
+                <label id="show-file" class="pure-button hollow show-files" disabled>{{ 'No file selected.'|trans }}</label>
             </div>
             <br>
             <button class="pure-button pure-button-red pure-input-1-3">{{ 'Parse'|trans }}</button>
@@ -26,7 +25,7 @@
 
     {% if output -%}
     <br>
-    <h2>{{ 'Converted metadata'|trans }}</h2>
+    <h2 id="converted">{{ 'Converted metadata'|trans }}</h2>
         {% for type, text in output if text -%}
 {# spaceless is to work around a clipboard.js bug that would add extra whitespace #}
 {% spaceless %}
@@ -47,4 +46,15 @@
         {%- endfor -%}
     {% endif -%}
 {% endblock content -%}
-
+{% block postload %}
+<script>
+    $('body').on('change', '#file-input', function () {
+        var files = this.files;
+        var fileNames = [];
+        for (var i = 0; i < files.length; i++) {
+            fileNames.push(files.item(i).name);
+        }
+        $('#show-file').html(fileNames.join(", "));
+    });
+</script>
+{% endblock postload %}
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/metadata.php b/vendor/simplesamlphp/simplesamlphp/templates/metadata.tpl.php
similarity index 100%
rename from vendor/simplesamlphp/simplesamlphp/templates/metadata.php
rename to vendor/simplesamlphp/simplesamlphp/templates/metadata.tpl.php
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/metadata.twig b/vendor/simplesamlphp/simplesamlphp/templates/metadata.twig
index cac1051041..4d39035336 100644
--- a/vendor/simplesamlphp/simplesamlphp/templates/metadata.twig
+++ b/vendor/simplesamlphp/simplesamlphp/templates/metadata.twig
@@ -1,54 +1,62 @@
 {% set pagetile = 'SimpleSAMLphp Show Metadata'|trans %}
 {% extends 'base.twig' %}
 {% block content %}
-    <h2>{{ header }}</h2>
-    <p>{{ metadata_intro }}</p>
+  <h2>{% trans %}Metadata{% endtrans %}</h2>
+  <dl>
+    <dd>{{ metadata_intro }}</dd>
 
-{% if metaurl is defined %}
-    <p>{{ 'You can get the metadata xml on a dedicated URL:' | trans }}</p>
-    <div class="input-group">
-        <pre id="metadataurl" class="input-left">{{ metaurl }}</pre>
-        <button data-clipboard-target="#metadataurl" id="btnurl" class="pure-button right clipboard-btn copy">
-            <span class="fa fa-copy"></span>
-        </button>
-    </div>
-{% endif %}
+  {% if metaurl is defined %}
+    <dd>{% trans %}You can get the metadata xml on a dedicated URL:{% endtrans %}</dd>
+    <dd class="code-box hljs">
+      <div class="pure-button-group top-right-corner">
+        <a class="pure-button copy hljs" data-clipboard-target="#url"
+           title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+        <a class="pure-button hljs" href="{{ metaurl }}">
+          <span class="fa fa-external-link-square"></span>
+        </a>
+      </div>
+      <code id="url" class="code-box-content">{{ metaurl }}</code>
+    </dd>
+  {% endif %}
 
-    <h2>{{ 'Metadata' | trans }}</h2>
-    <div class="code-box">
-        <div class="code-box-title">
-    <p>{{ 'In SAML 2.0 Metadata XML format:' | trans }}</p>
-            <button data-clipboard-target="#xmlmetadata" id="btnxml" class="pure-button right clipboard-btn copy">
-                <span class="fa fa-copy"></span>
-            </button>
-        </div>
-        <div class="code-box-content">
-            <pre id="xmlmetadata">{{ metadata | raw }}</pre>
-        </div>
-    </div>
+    <dt>{% trans %}SAML Metadata{% endtrans %}</dt>
+    <dd>{% trans %}In SAML 2.0 Metadata XML format:{% endtrans %}</dd>
+    <dd class="code-box hljs">
+      <div class="pure-button-group top-right-corner">
+        <a class="pure-button copy hljs" data-clipboard-target="#xml-metadata"
+           title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+      </div>
+      <div id="xml-metadata" class="code-box-content xml">{{ metadata|raw }}</div>
+    </dd>
+    <dt>{% trans %}SimpleSAMLphp Metadata{% endtrans %}</dt>
+    <dd>{% trans %}Use this if you are using a SimpleSAMLphp entity on
+              {#- #} the other side:{% endtrans %}</dd>
+    <dd class="code-box hljs">
+      <div class="pure-button-group top-right-corner">
+        <a class="pure-button copy hljs" data-clipboard-target="#php-metadata"
+           title="{% trans %}Copy to clipboard{% endtrans %}"><span class="fa fa-copy"></span></a>
+      </div>
+      <div id="php-metadata" class="code-box-content php">
+        {#- #}{{ metadataflat|raw }}{# -#}
+      </div>
+    </dd>
+  {% if certdata is defined %}
+    <dt>{% trans %}Certificates{% endtrans %}</dt>
+    <p>{% trans %}Download the X509 certificates as PEM-encoded files.{% endtrans %}</p>
 
-    <div class="code-box">
-        <div class="code-box-title">
-    <p>{{ 'In SimpleSAMLphp flat file format - use this if you are using a SimpleSAMLphp entity on the other side:' | trans }}</p>
-            <button data-clipboard-target="#phpmetadata" id="btnphp" class="pure-button right clipboard-btn copy">
-                <span class="fa fa-copy"></span>
-            </button>
-        </div>
-        <div class="code-box-content">
-            <pre id="phpmetadata">{{ metadataflat | raw }}</pre>
-        </div>
-    </div>
+    <ul>
+      {% for cert in certdata %}
 
-{% if certdata is defined %}
-    <h2>{{ 'Certificates' |trans }}</h2>
-    <p>{{ 'Download the X509 certificates as PEM-encoded files.' |trans }}</p>
+        <li>
+          <a href="{{ cert.url }}"><i class="fa fa-download"></i>{{ cert.name }}
+          {#- #}{% if cert.signing %}-signing{% endif %}
+          {#- #}{% if cert.encryption %}-encryption{% endif %}.pem
+          {#- #}{% if cert.prefix %} ({% trans %}new{% endtrans %}){% endif %}</a> {{ cert.comment }}
+        </li>
+      {% endfor %}
 
-    <ul>
-    {% for cert in certdata %}
-        <li><a href="{{ cert.url }}">{{ cert.name }}</a> {{ cert.comment }}</li>
-    {% endfor %}
     </ul>
+  {% endif %}
 
-{% endif %}
-
-{% endblock content %}
+  </dl>
+{% endblock content %}
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/post.twig b/vendor/simplesamlphp/simplesamlphp/templates/post.twig
new file mode 100644
index 0000000000..a11c56a188
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/templates/post.twig
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
+    <link rel="icon" href="/{{ baseurlpath }}resources/icons/favicon.ico">
+    <title>{% trans %}Sending message{% endtrans %}</title>
+    <link rel="stylesheet" href="/{{ baseurlpath }}resources/post.css">
+    <script src="/{{ baseurlpath }}resources/post.js"></script>
+  </head>
+  <body>
+    <form method="post" action="{{ destination }}">
+      {#- We need to add this element and call the click method, because calling submit() on the form causes failed
+          submissions if the form has another element with name or id of submit. See:
+          https://developer.mozilla.org/en/DOM/form.submit#Specification
+       #}
+
+      <input type="submit" id="postLoginSubmitButton">
+      {%- for name, value in post %}
+        {%- if value is iterable %}
+          {%- for index, item in value %}
+
+      <input type="hidden" name="{{ name }}[{{ index }}]" value="{{ value }}">
+          {%- endfor %}
+        {%- else %}
+
+      <input type="hidden" name="{{ name }}" value="{{ value }}">
+        {%- endif %}
+      {%- endfor %}
+
+      <noscript>
+        <h2>{% trans %}Warning{% endtrans %}</h2>
+        <p>{% trans %}Since your browser does not support Javascript, you must press the button below to proceed.{%
+            endtrans %}</p>
+        <button type="submit">{% trans %}Yes, continue{% endtrans %}</button>
+      </noscript>
+    </form>
+  </body>
+</html>
diff --git a/vendor/simplesamlphp/simplesamlphp/templates/status.twig b/vendor/simplesamlphp/simplesamlphp/templates/status.twig
new file mode 120000
index 0000000000..acc62e469c
--- /dev/null
+++ b/vendor/simplesamlphp/simplesamlphp/templates/status.twig
@@ -0,0 +1 @@
+auth_status.twig
\ No newline at end of file
diff --git a/vendor/simplesamlphp/simplesamlphp/webpack.config.js b/vendor/simplesamlphp/simplesamlphp/webpack.config.js
index 2dff590d58..8792220fad 100644
--- a/vendor/simplesamlphp/simplesamlphp/webpack.config.js
+++ b/vendor/simplesamlphp/simplesamlphp/webpack.config.js
@@ -18,6 +18,7 @@ module.exports = environment => {
     return {
         entry: {
             bundle: './src/js/bundle',
+            logout: './src/js/logout/main',
             stylesheet: './src/js/style'
         },
         output: {
@@ -83,13 +84,15 @@ module.exports = environment => {
                 filename: localConfig['css_filename'],
                 ignoreOrder: true
             }),
-            new CopyWebpackPlugin([
-                {
-                    from: path.resolve(__dirname + '/node_modules/font-awesome/fonts/*'),
-                    to: 'fonts/',
-                    flatten: true
-                }
-            ])
+            new CopyWebpackPlugin({
+                patterns: [
+                    {
+                        from: path.resolve(__dirname + '/node_modules/font-awesome/fonts/*'),
+                        to: 'fonts/',
+                        flatten: true
+                    }
+                ],
+            }),
         ]
     }
 };
diff --git a/vendor/simplesamlphp/simplesamlphp/www/_include.php b/vendor/simplesamlphp/simplesamlphp/www/_include.php
index 1960627f87..afe9b6b39e 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/_include.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/_include.php
@@ -1,7 +1,7 @@
 <?php
 
 // initialize the autoloader
-require_once(dirname(dirname(__FILE__)).'/lib/_autoload.php');
+require_once(dirname(dirname(__FILE__)) . '/lib/_autoload.php');
 
 // enable assertion handler for all pages
 \SimpleSAML\Error\Assertion::installHandler();
@@ -45,7 +45,7 @@ function SimpleSAML_error_handler($errno, $errstr, $errfile = null, $errline = 0
 
     // show an error with a full backtrace
     $context = (is_null($errfile) ? '' : " at $errfile:$errline");
-    $e = new \SimpleSAML\Error\Exception('Error '.$errno.' - '.$errstr.$context);
+    $e = new \SimpleSAML\Error\Exception('Error ' . $errno . ' - ' . $errstr . $context);
     $e->logError();
 
     // resume normal error processing
diff --git a/vendor/simplesamlphp/simplesamlphp/www/admin/metadata-converter.php b/vendor/simplesamlphp/simplesamlphp/www/admin/metadata-converter.php
index 5ce928ac59..83837409de 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/admin/metadata-converter.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/admin/metadata-converter.php
@@ -41,8 +41,8 @@
             // remove the entityDescriptor element because it is unused, and only makes the output harder to read
             unset($entityMetadata['entityDescriptor']);
 
-            $text .= '$metadata['.var_export($entityId, true).'] = '.
-                var_export($entityMetadata, true).";\n";
+            $text .= '$metadata[' . var_export($entityId, true) . '] = ' .
+                var_export($entityMetadata, true) . ";\n";
         }
         $entities = $text;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/www/admin/sandbox.php b/vendor/simplesamlphp/simplesamlphp/www/admin/sandbox.php
index e2318bd187..820c1fc2c4 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/admin/sandbox.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/admin/sandbox.php
@@ -10,7 +10,10 @@
 
 $template = new \SimpleSAML\XHTML\Template($config, 'sandbox.php');
 $template->data['pagetitle'] = 'Sandbox';
-$template->data['sometext'] = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.';
+$template->data['sometext'] = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.' .
+    ' Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit.' .
+    ' Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. ' .
+    'Nam tincidunt congue enim, ut porta lorem lacinia consectetur.';
 $template->data['remaining'] = $session->getAuthData('admin', 'Expire') - time();
 $template->data['logout'] = null;
 
diff --git a/vendor/simplesamlphp/simplesamlphp/www/authmemcookie.php b/vendor/simplesamlphp/simplesamlphp/www/authmemcookie.php
deleted file mode 100644
index 9825c62f54..0000000000
--- a/vendor/simplesamlphp/simplesamlphp/www/authmemcookie.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-/**
- * This file implements an script which can be used to authenticate users with Auth MemCookie.
- * See: http://authmemcookie.sourceforge.net/
- *
- * The configuration for this script is stored in config/authmemcookie.php.
- *
- * The file extra/auth_memcookie.conf contains an example of how Auth Memcookie can be configured
- * to use SimpleSAMLphp.
- *
- * @deprecated This file has been deprecated and will be removed in SSP 2.0. Use the memcookie module instead.
- */
-
-require_once('_include.php');
-
-try {
-    // load SimpleSAMLphp configuration
-    $globalConfig = \SimpleSAML\Configuration::getInstance();
-
-    // check if this module is enabled
-    if (!$globalConfig->getBoolean('enable.authmemcookie', false)) {
-        throw new \SimpleSAML\Error\Error('NOACCESS');
-    }
-
-    // load Auth MemCookie configuration
-    $amc = \SimpleSAML\AuthMemCookie::getInstance();
-
-    $sourceId = $amc->getAuthSource();
-    $s = new \SimpleSAML\Auth\Simple($sourceId);
-
-    // check if the user is authorized. We attempt to authenticate the user if not
-    $s->requireAuth();
-
-    // generate session id and save it in a cookie
-    $sessionID = \SimpleSAML\Utils\Random::generateID();
-    $cookieName = $amc->getCookieName();
-    \SimpleSAML\Utils\HTTP::setCookie($cookieName, $sessionID);
-
-    // generate the authentication information
-    $attributes = $s->getAttributes();
-
-    $authData = [];
-
-    // username
-    $usernameAttr = $amc->getUsernameAttr();
-    if (!array_key_exists($usernameAttr, $attributes)) {
-        throw new \Exception(
-            "The user doesn't have an attribute named '".$usernameAttr.
-            "'. This attribute is expected to contain the username."
-        );
-    }
-    $authData['UserName'] = $attributes[$usernameAttr];
-
-    // groups
-    $groupsAttr = $amc->getGroupsAttr();
-    if ($groupsAttr !== null) {
-        if (!array_key_exists($groupsAttr, $attributes)) {
-            throw new \Exception(
-                "The user doesn't have an attribute named '".$groupsAttr.
-                "'. This attribute is expected to contain the groups the user is a member of."
-            );
-        }
-        $authData['Groups'] = $attributes[$groupsAttr];
-    } else {
-        $authData['Groups'] = [];
-    }
-
-    $authData['RemoteIP'] = $_SERVER['REMOTE_ADDR'];
-
-    foreach ($attributes as $n => $v) {
-        $authData['ATTR_'.$n] = $v;
-    }
-
-    // store the authentication data in the memcache server
-    $data = '';
-    foreach ($authData as $name => $values) {
-        if (is_array($values)) {
-            foreach ($values as $i => $value) {
-                if (!is_a($value, 'DOMNodeList')) {
-                    continue;
-                }
-                /* @var \DOMNodeList $value */
-                if ($value->length === 0) {
-                    continue;
-                }
-                $values[$i] = new \SAML2\XML\saml\AttributeValue($value->item(0)->parentNode);
-            }
-            $values = implode(':', $values);
-        }
-        $data .= $name.'='.$values."\r\n";
-    }
-
-    $memcache = $amc->getMemcache();
-    $expirationTime = $s->getAuthData('Expire');
-    $memcache->set($sessionID, $data, 0, $expirationTime);
-
-    // register logout handler
-    $session = \SimpleSAML\Session::getSessionFromRequest();
-    $session->registerLogoutHandler($sourceId, '\SimpleSAML\AuthMemCookie', 'logoutHandler');
-
-    // redirect the user back to this page to signal that the login is completed
-    \SimpleSAML\Utils\HTTP::redirectTrustedURL(\SimpleSAML\Utils\HTTP::getSelfURL());
-} catch (\Exception $e) {
-    throw new \SimpleSAML\Error\Error('CONFIG', $e);
-}
diff --git a/vendor/simplesamlphp/simplesamlphp/www/errorreport.php b/vendor/simplesamlphp/simplesamlphp/www/errorreport.php
index 0193e4767b..025a81edec 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/errorreport.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/errorreport.php
@@ -13,26 +13,28 @@
     exit;
 }
 
-$reportId = (string) $_REQUEST['reportId'];
-$email = (string) $_REQUEST['email'];
-$text = htmlspecialchars((string) $_REQUEST['text']);
+$reportId = $_REQUEST['reportId'];
+$email = $_REQUEST['email'];
+$text = $_REQUEST['text'];
+
+if (!preg_match('/^[0-9a-f]{8}$/', $reportId)) {
+    throw new \SimpleSAML\Error\Exception('Invalid reportID');
+}
 
 $data = null;
 try {
     $session = \SimpleSAML\Session::getSessionFromRequest();
     $data = $session->getData('core:errorreport', $reportId);
 } catch (\Exception $e) {
-    \SimpleSAML\Logger::error('Error loading error report data: '.var_export($e->getMessage(), true));
+    \SimpleSAML\Logger::error('Error loading error report data: ' . var_export($e->getMessage(), true));
 }
 
 if ($data === null) {
     $data = [
         'exceptionMsg'   => 'not set',
         'exceptionTrace' => 'not set',
-        'reportId'       => $reportId,
         'trackId'        => 'not set',
         'url'            => 'not set',
-        'version'        => $config->getVersion(),
         'referer'        => 'not set',
     ];
 
@@ -41,90 +43,18 @@
     }
 }
 
-foreach ($data as $k => $v) {
-    $data[$k] = htmlspecialchars($v);
-}
-
-// build the email message
-$message = <<<MESSAGE
-<h1>SimpleSAMLphp Error Report</h1>
-
-<p>Message from user:</p>
-<div class="box" style="background: yellow; color: #888; border: 1px solid #999900; padding: .4em; margin: .5em">
-    %s
-</div>
-
-<p>Exception: <strong>%s</strong></p>
-<pre>%s</pre>
-
-<p>URL:</p>
-<pre><a href="%s">%s</a></pre>
-
-<p>Host:</p>
-<pre>%s</pre>
-
-<p>Directory:</p>
-<pre>%s</pre>
-
-<p>Track ID:</p>
-<pre>%s</pre>
-
-<p>Version: <code>%s</code></p>
-
-<p>Report ID: <code>%s</code></p>
-
-<p>Referer: <code>%s</code></p>
-
-<hr />
-<div class="footer">
-    This message was sent using SimpleSAMLphp. Visit the <a href="http://simplesamlphp.org/">SimpleSAMLphp homepage</a>.
-</div>
-MESSAGE;
-$message = sprintf(
-    $message,
-    $text,
-    $data['exceptionMsg'],
-    $data['exceptionTrace'],
-    $data['url'],
-    $data['url'],
-    htmlspecialchars(php_uname('n')),
-    dirname(dirname(__FILE__)),
-    $data['trackId'],
-    $data['version'],
-    $data['reportId'],
-    $data['referer']
-);
-
-// add the email address of the submitter as the Reply-To address
-$email = trim($email);
-
-// check that it looks like a valid email address
-if (!preg_match('/\s/', $email) && strpos($email, '@') !== false) {
-    $replyto = $email;
-} else {
-    $replyto = null;
-}
-
-$from = $config->getString('sendmail_from', null);
-if ($from === null || $from === '') {
-    $from = ini_get('sendmail_from');
-    if ($from === '' || $from === false) {
-        $from = 'no-reply@example.org';
-    }
-}
-
-// If no sender email was configured at least set some relevant from address
-if ($from === 'no-reply@example.org' && $replyto !== null) {
-    $from = $replyto;
-}
+$data['reportId'] = $reportId;
+$data['version'] = $config->getVersion();
+$data['hostname'] = php_uname('n');
+$data['directory'] = dirname(dirname(__FILE__));
 
-// send the email
-$toAddress = $config->getString('technicalcontact_email', 'na@example.org');
-if ($config->getBoolean('errorreporting', true) && $toAddress !== 'na@example.org') {
-    $email = new \SimpleSAML\XHTML\EMail($toAddress, 'SimpleSAMLphp error report', $from);
-    $email->setBody($message);
-    $email->send();
-    SimpleSAML\Logger::error('Report with id '.$reportId.' sent to <'.$toAddress.'>.');
+if ($config->getBoolean('errorreporting', true)) {
+    $mail = new SimpleSAML\Utils\EMail('SimpleSAMLphp error report from ' . $email);
+    $mail->setData($data);
+    $mail->addReplyTo($email);
+    $mail->setText($text);
+    $mail->send();
+    SimpleSAML\Logger::error('Report with id ' . $reportId . ' sent');
 }
 
 // redirect the user back to this page to clear the POST request
diff --git a/vendor/simplesamlphp/simplesamlphp/www/module.php b/vendor/simplesamlphp/simplesamlphp/www/module.php
index 83ee0ff382..ebdc6b19c4 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/module.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/module.php
@@ -4,6 +4,7 @@
  * This web page receives requests for web-pages hosted by modules, and directs them to
  * the process() handler in the Module class.
  */
+
 require_once('_include.php');
 
 \SimpleSAML\Module::process()->send();
diff --git a/vendor/simplesamlphp/simplesamlphp/www/resources/script.js b/vendor/simplesamlphp/simplesamlphp/www/resources/script.js
index a195c24cb8..e72584a3d7 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/resources/script.js
+++ b/vendor/simplesamlphp/simplesamlphp/www/resources/script.js
@@ -5,7 +5,7 @@
  */
 function SimpleSAML_focus(id)
 {
-    element = document.getElementById(id);
+    var element = document.getElementById(id);
     if (element != null) {
         element.focus();
     }
@@ -19,7 +19,7 @@ function SimpleSAML_focus(id)
  */
 function SimpleSAML_show(id)
 {
-    element = document.getElementById(id);
+    var element = document.getElementById(id);
     if (element == null) {
         return;
     }
@@ -35,7 +35,7 @@ function SimpleSAML_show(id)
  */
 function SimpleSAML_hide(id)
 {
-    element = document.getElementById(id);
+    var element = document.getElementById(id);
     if (element == null) {
         return;
     }
diff --git a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/ArtifactResolutionService.php b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/ArtifactResolutionService.php
index 16a99dc62e..c4e52bd149 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/ArtifactResolutionService.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/ArtifactResolutionService.php
@@ -47,6 +47,10 @@
 }
 
 $issuer = $request->getIssuer();
+if (!is_string($issuer)) {
+    $issuer = $issuer->getValue();
+}
+
 $spMetadata = $metadata->getMetaDataConfig($issuer, 'saml20-sp-remote');
 
 $artifact = $request->getArtifact();
@@ -62,7 +66,11 @@
 }
 
 $artifactResponse = new \SAML2\ArtifactResponse();
-$artifactResponse->setIssuer($idpEntityId);
+
+$issuer = new \SAML2\XML\saml\Issuer();
+$issuer->setValue($idpEntityId);
+$artifactResponse->setIssuer($issuer);
+
 $artifactResponse->setInResponseTo($request->getId());
 $artifactResponse->setAny($responseXML);
 \SimpleSAML\Module\saml\Message::addSign($idpMetadata, $spMetadata, $artifactResponse);
diff --git a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SSOService.php b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SSOService.php
index c3e4916849..5a400b8544 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SSOService.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SSOService.php
@@ -15,7 +15,7 @@
 
 $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
 $idpEntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
-$idp = \SimpleSAML\IdP::getById('saml2:'.$idpEntityId);
+$idp = \SimpleSAML\IdP::getById('saml2:' . $idpEntityId);
 
 try {
     \SimpleSAML\Module\saml\IdP\SAML2::receiveAuthnRequest($idp);
diff --git a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SingleLogoutService.php b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SingleLogoutService.php
index 6e6e9a5f85..2d3c0e4b4a 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SingleLogoutService.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/SingleLogoutService.php
@@ -14,7 +14,7 @@
 
 $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
 $idpEntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
-$idp = \SimpleSAML\IdP::getById('saml2:'.$idpEntityId);
+$idp = \SimpleSAML\IdP::getById('saml2:' . $idpEntityId);
 
 if (isset($_REQUEST['ReturnTo'])) {
     $idp->doLogoutRedirect(\SimpleSAML\Utils\HTTP::checkURLAllowed((string) $_REQUEST['ReturnTo']));
diff --git a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/initSLO.php b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/initSLO.php
index 21576797dc..82c38c8d4d 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/initSLO.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/initSLO.php
@@ -4,7 +4,7 @@
 
 $metadata = \SimpleSAML\Metadata\MetaDataStorageHandler::getMetadataHandler();
 $idpEntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
-$idp = \SimpleSAML\IdP::getById('saml2:'.$idpEntityId);
+$idp = \SimpleSAML\IdP::getById('saml2:' . $idpEntityId);
 
 \SimpleSAML\Logger::info('SAML2.0 - IdP.initSLO: Accessing SAML 2.0 IdP endpoint init Single Logout');
 
diff --git a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/metadata.php b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/metadata.php
index 984fb9252d..698cb9f4a3 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/metadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/saml2/idp/metadata.php
@@ -3,6 +3,7 @@
 require_once('../../_include.php');
 
 use SAML2\Constants;
+use SimpleSAML\Module;
 use SimpleSAML\Utils\Auth as Auth;
 use SimpleSAML\Utils\Crypto as Crypto;
 use SimpleSAML\Utils\HTTP as HTTP;
@@ -112,7 +113,7 @@
         // Artifact sending enabled
         $metaArray['ArtifactResolutionService'][] = [
             'index'    => 0,
-            'Location' => HTTP::getBaseURL().'saml2/idp/ArtifactResolutionService.php',
+            'Location' => HTTP::getBaseURL() . 'saml2/idp/ArtifactResolutionService.php',
             'Binding'  => Constants::BINDING_SOAP,
         ];
     }
@@ -122,7 +123,7 @@
         array_unshift($metaArray['SingleSignOnService'], [
             'hoksso:ProtocolBinding' => Constants::BINDING_HTTP_REDIRECT,
             'Binding'                => Constants::BINDING_HOK_SSO,
-            'Location'               => HTTP::getBaseURL().'saml2/idp/SSOService.php'
+            'Location'               => HTTP::getBaseURL() . 'saml2/idp/SSOService.php'
         ]);
     }
 
@@ -130,7 +131,7 @@
         $metaArray['SingleSignOnService'][] = [
             'index' => 0,
             'Binding'  => Constants::BINDING_SOAP,
-            'Location' => HTTP::getBaseURL().'saml2/idp/SSOService.php',
+            'Location' => HTTP::getBaseURL() . 'saml2/idp/SSOService.php',
         ];
     }
 
@@ -147,7 +148,9 @@
         );
 
         if (!$idpmeta->hasValue('OrganizationURL')) {
-            throw new \SimpleSAML\Error\Exception('If OrganizationName is set, OrganizationURL must also be set.');
+            throw new \SimpleSAML\Error\Exception(
+                'If OrganizationName is set, OrganizationURL must also be set.'
+            );
         }
         $metaArray['OrganizationURL'] = $idpmeta->getLocalizedString('OrganizationURL');
     }
@@ -206,22 +209,20 @@
 
     $metaxml = $metaBuilder->getEntityDescriptorText();
 
-    $metaflat = '$metadata['.var_export($idpentityid, true).'] = '.var_export($metaArray, true).';';
+    $metaflat = '$metadata[' . var_export($idpentityid, true) . '] = ' . var_export($metaArray, true) . ';';
 
     // sign the metadata if enabled
     $metaxml = \SimpleSAML\Metadata\Signer::sign($metaxml, $idpmeta->toArray(), 'SAML 2 IdP');
 
     if (array_key_exists('output', $_GET) && $_GET['output'] == 'xhtml') {
-        $defaultidp = $config->getString('default-saml20-idp', null);
-
-        $t = new \SimpleSAML\XHTML\Template($config, 'metadata.php', 'admin');
+        $t = new \SimpleSAML\XHTML\Template($config, 'metadata.tpl.php', 'admin');
 
         $t->data['clipboard.js'] = true;
         $t->data['available_certs'] = $availableCerts;
         $certdata = [];
         foreach (array_keys($availableCerts) as $availableCert) {
             $certdata[$availableCert]['name'] = $availableCert;
-            $certdata[$availableCert]['url'] = SimpleSAML\Module::getModuleURL('saml/idp/certs.php').'/'.$availableCert;
+            $certdata[$availableCert]['url'] = Module::getModuleURL('saml/idp/certs.php') . '/' . $availableCert;
             $certdata[$availableCert]['comment'] = (
                 $availableCerts[$availableCert]['certFingerprint'][0] === 'afe71c28ef740bc87425be13a2263d37971da1f9' ?
                 'This is the default certificate. Generate a new certificate if this is a production system.' :
@@ -234,7 +235,6 @@
         $t->data['metaurl'] = HTTP::getSelfURLNoQuery();
         $t->data['metadata'] = htmlspecialchars($metaxml);
         $t->data['metadataflat'] = htmlspecialchars($metaflat);
-        $t->data['defaultidp'] = $defaultidp;
         $t->show();
     } else {
         header('Content-Type: application/xml');
diff --git a/vendor/simplesamlphp/simplesamlphp/www/shib13/idp/metadata.php b/vendor/simplesamlphp/simplesamlphp/www/shib13/idp/metadata.php
index acd5ee33a4..d8063b4447 100644
--- a/vendor/simplesamlphp/simplesamlphp/www/shib13/idp/metadata.php
+++ b/vendor/simplesamlphp/simplesamlphp/www/shib13/idp/metadata.php
@@ -84,7 +84,7 @@
     if (array_key_exists('output', $_GET) && $_GET['output'] == 'xhtml') {
         $defaultidp = $config->getString('default-shib13-idp', null);
 
-        $t = new \SimpleSAML\XHTML\Template($config, 'metadata.php', 'admin');
+        $t = new \SimpleSAML\XHTML\Template($config, 'metadata.tpl.php', 'admin');
 
         $t->data['clipboard.js'] = true;
         $t->data['header'] = 'shib13-idp'; // TODO: Replace with headerString in 2.0
diff --git a/vendor/simplesamlphp/twig-configurable-i18n/.codecov.yml b/vendor/simplesamlphp/twig-configurable-i18n/.codecov.yml
new file mode 100644
index 0000000000..f7f39e1e93
--- /dev/null
+++ b/vendor/simplesamlphp/twig-configurable-i18n/.codecov.yml
@@ -0,0 +1,11 @@
+coverage:
+  status:
+    project: yes
+
+comment:
+  layout: "diff"
+  behavior: once
+  require_changes: true
+  require_base: no
+  require_head: yes
+  branches: null
diff --git a/vendor/jaimeperez/twig-configurable-i18n/.editorconfig b/vendor/simplesamlphp/twig-configurable-i18n/.editorconfig
similarity index 100%
rename from vendor/jaimeperez/twig-configurable-i18n/.editorconfig
rename to vendor/simplesamlphp/twig-configurable-i18n/.editorconfig
diff --git a/vendor/jaimeperez/twig-configurable-i18n/.php_cs.dist b/vendor/simplesamlphp/twig-configurable-i18n/.php_cs.dist
similarity index 100%
rename from vendor/jaimeperez/twig-configurable-i18n/.php_cs.dist
rename to vendor/simplesamlphp/twig-configurable-i18n/.php_cs.dist
diff --git a/vendor/simplesamlphp/twig-configurable-i18n/.travis.yml b/vendor/simplesamlphp/twig-configurable-i18n/.travis.yml
new file mode 100644
index 0000000000..7b4416ea3f
--- /dev/null
+++ b/vendor/simplesamlphp/twig-configurable-i18n/.travis.yml
@@ -0,0 +1,134 @@
+sudo: required
+
+language: php
+
+stages:
+  - pre-conditions
+  - test
+  - quality
+
+################
+#  Test stage  #
+################
+
+php:
+  - 7.1
+  - 7.2
+  - 7.3
+  - 7.4
+
+env:
+  - COMMAND="composer install --no-interaction"
+  - COMMAND="composer update --no-interaction"
+
+before_script:
+  - ${COMMAND} --no-interaction
+
+script:
+  - php vendor/bin/phpunit --no-coverage
+
+jobs:
+  fast_finish: true
+
+  allow_failures:
+    - php: 7.4
+      env: Psalm
+    - php: 7.4
+      env: PHP Codesniffer
+
+  include:
+
+    ##########################
+    #  Pre-conditions stage  #
+    ##########################
+
+    - stage: pre-conditions
+      env: Syntax check PHP
+      php: 7.1
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      env: Syntax check PHP
+      php: 7.2
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      env: Syntax check PHP
+      php: 7.3
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      env: Syntax check PHP
+      php: 7.4
+      before_script:
+        - composer install
+      script:
+        - vendor/bin/check-syntax-php.sh
+
+    - stage: pre-conditions
+      env: Syntax check YAML / XML / JSON
+      before_script:
+        - composer install
+      script:
+        - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-json.sh
+        - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-xml.sh
+        - vendor/simplesamlphp/simplesamlphp-test-framework/bin/check-syntax-yaml.sh
+
+    ###################
+    #  Quality stage  #
+    ###################
+
+    - stage: quality
+      php: 7.4
+      env: Security check (composer install)
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/security-checker security:check
+
+    - stage: quality
+      php: 7.4
+      env: Security check (composer update)
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/security-checker security:check
+
+    - stage: quality
+      php: 7.4
+      env: Codecov
+      before_script:
+        - composer update
+      script:
+        - php vendor/bin/phpunit
+        - bash <(curl -s https://codecov.io/bash)
+
+    - stage: quality
+      php: 7.4
+      env: Psalm
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/psalm
+        - vendor/bin/psalter --issues=UnnecessaryVarAnnotation --dry-run
+
+    - stage: quality
+      php: 7.4
+      env: PHP Codesniffer
+      before_script:
+        - composer update
+      script:
+        - vendor/bin/phpcs
+
+notifications:
+  slack:
+    secure: jgkeIXi7Hzkc907ZKGpuJZ9va+KjHNV0LZoWc22skkDqNIu2wshvqx4wOMFK8CXtRcRgCambtXxyTio17Q4B4mFu1uf7qVN6x18QyLNhfypB/d808kLoJCzlmGB7477jrw5xvgSVOMxWmic8QTjkcMOWSiG4fJE86zIthZP0OOY=
diff --git a/vendor/jaimeperez/twig-configurable-i18n/README.md b/vendor/simplesamlphp/twig-configurable-i18n/README.md
similarity index 95%
rename from vendor/jaimeperez/twig-configurable-i18n/README.md
rename to vendor/simplesamlphp/twig-configurable-i18n/README.md
index c16a64699c..d00786d8c5 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/README.md
+++ b/vendor/simplesamlphp/twig-configurable-i18n/README.md
@@ -30,8 +30,8 @@ First, **create aliases** for two classes so that the ones defined in
 this extension override the default ones:
 
 ```php
-use JaimePerez\TwigConfigurableI18n\Twig\Environment as Twig_Environment;
-use JaimePerez\TwigConfigurableI18n\Twig\Extensions\Extension\I18n as Twig_Extensions_Extension_I18n;
+use SimpleSAML\TwigConfigurableI18n\Twig\Environment as Twig_Environment;
+use SimpleSAML\TwigConfigurableI18n\Twig\Extensions\Extension\I18n as Twig_Extensions_Extension_I18n;
 ```
 
 The first line allows you to redefine the twig environment class, so
@@ -81,4 +81,4 @@ $twig = new Twig_Environment($loader, array(
     'translation_function' => '__',
     'translation_function_plural' => 'n__'
 ));
-```
\ No newline at end of file
+```
diff --git a/vendor/jaimeperez/twig-configurable-i18n/composer.json b/vendor/simplesamlphp/twig-configurable-i18n/composer.json
similarity index 50%
rename from vendor/jaimeperez/twig-configurable-i18n/composer.json
rename to vendor/simplesamlphp/twig-configurable-i18n/composer.json
index d916ce30a7..66ef8da681 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/composer.json
+++ b/vendor/simplesamlphp/twig-configurable-i18n/composer.json
@@ -1,5 +1,5 @@
 {
-    "name": "jaimeperez/twig-configurable-i18n",
+    "name": "simplesamlphp/twig-configurable-i18n",
     "description": "This is an extension on top of Twig's i18n extension, allowing you to customize which functions to use for translations.",
     "type": "project",
     "keywords": [ "twig", "extension", "i18n", "internationalization", "translation", "gettext" ],
@@ -12,18 +12,22 @@
     ],
     "autoload": {
         "psr-4": {
-            "JaimePerez\\TwigConfigurableI18n\\": "src/"
+            "SimpleSAML\\TwigConfigurableI18n\\": "src/"
         }
     },
     "require": {
-        "twig/extensions": "^1.5"
+        "php": ">=7.1",
+        "twig/extensions": "@dev"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.8.36",
-        "twig/twig": "^1.37 || ^2.7"
+        "phpunit/phpunit": "^7.5",
+        "sensiolabs/security-checker": "~6.0.3",
+        "simplesamlphp/simplesamlphp-test-framework": "~0.1.2",
+        "squizlabs/php_codesniffer": "^3.5",
+        "twig/twig": "^2.13"
     },
     "support": {
-        "issues": "https://github.com/jaimeperez/twig-configurable-i18n/issues",
-        "source": "https://github.com/jaimeperez/twig-configurable-i18n"
+        "issues": "https://github.com/simplesamlphp/twig-configurable-i18n/issues",
+        "source": "https://github.com/simplesamlphp/twig-configurable-i18n"
     }
 }
diff --git a/vendor/simplesamlphp/twig-configurable-i18n/phpcs.xml b/vendor/simplesamlphp/twig-configurable-i18n/phpcs.xml
new file mode 100644
index 0000000000..7645ef8204
--- /dev/null
+++ b/vendor/simplesamlphp/twig-configurable-i18n/phpcs.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<ruleset name="SimpleSAMLphp ruleset">
+    <config name="ignore_warnings_on_exit" value="1"/>
+
+    <description>
+        By default it is less stringent about long lines than other coding standards
+    </description>
+
+    <file>src</file>
+    <file>tests</file>
+
+    <!-- This is the rule we inherit from. If you want to exlude some specific rules, see the docs on how to do that -->
+    <rule ref="PSR12"/>
+</ruleset>
+
+
diff --git a/vendor/simplesamlphp/twig-configurable-i18n/phpunit.xml b/vendor/simplesamlphp/twig-configurable-i18n/phpunit.xml
new file mode 100644
index 0000000000..80a3a8a1d2
--- /dev/null
+++ b/vendor/simplesamlphp/twig-configurable-i18n/phpunit.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<phpunit bootstrap="tests/bootstrap.php">
+    <testsuites>
+        <testsuite name="The project's test suite">
+            <directory>tests/</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+    <logging>
+        <log type="coverage-text" target="php://stdout" showUncoveredFiles="true" />
+        <log type="coverage-html" target="build/coverage" lowUpperBound="35" highLowerBound="70" />
+        <log type="coverage-clover" target="build/logs/clover.xml" />
+    </logging>
+</phpunit>
+
diff --git a/vendor/jaimeperez/twig-configurable-i18n/psalm.xml b/vendor/simplesamlphp/twig-configurable-i18n/psalm.xml
similarity index 100%
rename from vendor/jaimeperez/twig-configurable-i18n/psalm.xml
rename to vendor/simplesamlphp/twig-configurable-i18n/psalm.xml
diff --git a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Environment.php b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Environment.php
similarity index 82%
rename from vendor/jaimeperez/twig-configurable-i18n/src/Twig/Environment.php
rename to vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Environment.php
index a0013d9768..c9e70feb9c 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Environment.php
+++ b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Environment.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * This class extends the Twig_Environment class.
  *
@@ -7,7 +8,10 @@
  *
  * @author Jaime Pérez Crespo
  */
-namespace JaimePerez\TwigConfigurableI18n\Twig;
+
+namespace SimpleSAML\TwigConfigurableI18n\Twig;
+
+use Twig\Loader\LoaderInterface;
 
 class Environment extends \Twig\Environment
 {
@@ -28,9 +32,9 @@ class Environment extends \Twig\Environment
      *
      * @see \Twig\Environment::__construct()
      * @param \Twig\Loader\LoaderInterface $loader A Twig_LoaderInterface instance.
-     * @param array                      $options An array of options.
+     * @param array $options An array of options.
      */
-    public function __construct(\Twig\Loader\LoaderInterface $loader, $options = [])
+    public function __construct(LoaderInterface $loader, $options = [])
     {
         parent::__construct($loader, $options);
         $this->options = $options;
@@ -42,7 +46,7 @@ public function __construct(\Twig\Loader\LoaderInterface $loader, $options = [])
      *
      * @return array An array of options.
      */
-    public function getOptions()
+    public function getOptions(): array
     {
         return $this->options;
     }
diff --git a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php
similarity index 67%
rename from vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php
rename to vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php
index d0fa671fd6..984c73bc30 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php
+++ b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php
@@ -1,12 +1,15 @@
 <?php
+
 /**
  * An internationalization extension for Twig that allows you to specify the functions to use for translation.
  *
  * @author Jaime Pérez Crespo
  */
-namespace JaimePerez\TwigConfigurableI18n\Twig\Extensions\Extension;
 
-use JaimePerez\TwigConfigurableI18n\Twig\Extensions\TokenParser\Trans;
+namespace SimpleSAML\TwigConfigurableI18n\Twig\Extensions\Extension;
+
+use SimpleSAML\TwigConfigurableI18n\Twig\Extensions\TokenParser\Trans;
+use Twig\TwigFilter;
 
 class I18n extends \Twig\Extensions\I18nExtension
 {
@@ -23,8 +26,8 @@ class I18n extends \Twig\Extensions\I18nExtension
     public function __construct()
     {
         $this->filters = [
-            new \Twig\TwigFilter('trans', [$this, 'translateSingular'], ['needs_environment' => true]),
-            new \Twig\TwigFilter('transchoice', [$this, 'translatePlural'], ['needs_environment' => true]),
+            new TwigFilter('trans', [$this, 'translateSingular'], ['needs_environment' => true]),
+            new TwigFilter('transchoice', [$this, 'translatePlural'], ['needs_environment' => true]),
         ];
     }
 
@@ -34,7 +37,7 @@ public function __construct()
      *
      * @return \Twig\TokenParser\TokenParserInterface[]
      */
-    public function getTokenParsers()
+    public function getTokenParsers(): array
     {
         return [new Trans()];
     }
@@ -45,7 +48,7 @@ public function getTokenParsers()
      *
      * @return \Twig\TwigFilter[] An array of filters
      */
-    public function getFilters()
+    public function getFilters(): array
     {
         return $this->filters;
     }
@@ -56,18 +59,19 @@ public function getFilters()
      *
      * Defaults to gettext().
      *
-     * @return string
+     * @return string|null|false
      */
     public function translateSingular()
     {
         $singular = 'gettext';
         $args = func_get_args();
 
-        /** @var \JaimePerez\TwigConfigurableI18n\Twig\Environment $env */
+        /** @var \SimpleSAML\TwigConfigurableI18n\Twig\Environment $env */
         $env = array_shift($args);
         $options = $env->getOptions();
-        if (array_key_exists('translation_function', $options) &&
-            is_callable($options['translation_function'], false, $callable)
+        if (
+            array_key_exists('translation_function', $options)
+            && is_callable($options['translation_function'], false, $callable)
         ) {
             $singular = $options['translation_function'];
         }
@@ -80,19 +84,20 @@ public function translateSingular()
      *
      * Defaults to ngettext().
      *
-     * @return string
+     * @return string|null|false
      */
     public function translatePlural()
     {
         $plural = 'ngettext';
         $args = func_get_args();
 
-        /** @var \JaimePerez\TwigConfigurableI18n\Twig\Environment $env */
+        /** @var \SimpleSAML\TwigConfigurableI18n\Twig\Environment $env */
         $env = array_shift($args);
         $options = $env->getOptions();
 
-        if (array_key_exists('translation_function_plural', $options) &&
-            is_callable($options['translation_function_plural'])
+        if (
+            array_key_exists('translation_function_plural', $options)
+            && is_callable($options['translation_function_plural'])
         ) {
             $plural = $options['translation_function_plural'];
         }
diff --git a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php
similarity index 70%
rename from vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php
rename to vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php
index 1b5042d77c..9183feba21 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php
+++ b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php
@@ -1,11 +1,12 @@
 <?php
+
 /**
  * A class for translation nodes that can be translated with customizable functions.
  *
  * @author Jaime Pérez Crespo
  */
 
-namespace JaimePerez\TwigConfigurableI18n\Twig\Extensions\Node;
+namespace SimpleSAML\TwigConfigurableI18n\Twig\Extensions\Node;
 
 use ReflectionClass;
 use Twig\Compiler;
@@ -15,14 +16,14 @@ class Trans extends \Twig\Extensions\Node\TransNode
     /**
      * Compiles the node to PHP.
      *
-     * If JaimePerez\TwigConfigurableI18n\Twig\Environment was used to configure Twig, and the version of
+     * If SimpleSAML\TwigConfigurableI18n\Twig\Environment was used to configure Twig, and the version of
      * Twig_Extensions_Extension_I18n allows it, we will try to change all calls to the default translation methods
      * to whatever is configured in the environment.
      *
      * @param \Twig\Compiler $compiler A \Twig\Compiler instance
      * @return void
      */
-    public function compile(Compiler $compiler)
+    public function compile(Compiler $compiler): void
     {
         parent::compile($compiler);
 
@@ -39,22 +40,24 @@ public function compile(Compiler $compiler)
 
         // now, if we have proper configuration, rename the calls to gettext with the ones configured in the environment
         $env = $compiler->getEnvironment();
-        if (is_a($env, \JaimePerez\TwigConfigurableI18n\Twig\Environment::class)) {
-            /** @var \JaimePerez\TwigConfigurableI18n\Twig\Environment $env */
+        if (is_a($env, \SimpleSAML\TwigConfigurableI18n\Twig\Environment::class)) {
+            /** @var \SimpleSAML\TwigConfigurableI18n\Twig\Environment $env */
             $options = $env->getOptions();
             $source = $compiler->getSource();
-            if (array_key_exists('translation_function', $options) &&
-                is_callable($options['translation_function'], false, $callable)
+            if (
+                array_key_exists('translation_function', $options)
+                && is_callable($options['translation_function'], false, $callable)
             ) {
-                $source = preg_replace('/([^\w_$])gettext\(/', '$1'.$callable.'(', $source);
+                $source = preg_replace('/([^\w_$])gettext\(/', '$1' . $callable . '(', $source);
                 $property->setValue($compiler, $source);
             }
-            if (array_key_exists('translation_function_plural', $options) &&
-                is_callable($options['translation_function_plural'], false, $callable)
+            if (
+                array_key_exists('translation_function_plural', $options)
+                && is_callable($options['translation_function_plural'], false, $callable)
             ) {
                 $source = preg_replace(
                     '/([^\w_$])ngettext\(/',
-                    '$1'.$callable.'(',
+                    '$1' . $callable . '(',
                     $source
                 );
                 $property->setValue($compiler, $source);
diff --git a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php
similarity index 60%
rename from vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php
rename to vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php
index 2f4d79e397..cfa7a62816 100644
--- a/vendor/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php
+++ b/vendor/simplesamlphp/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php
@@ -1,12 +1,15 @@
 <?php
+
 /**
  * A class implementing a token parser for translation nodes.
  *
  * @author Jaime Pérez Crespo
  */
-namespace JaimePerez\TwigConfigurableI18n\Twig\Extensions\TokenParser;
 
-use JaimePerez\TwigConfigurableI18n\Twig\Extensions\Node\Trans as NodeTrans;
+namespace SimpleSAML\TwigConfigurableI18n\Twig\Extensions\TokenParser;
+
+use SimpleSAML\TwigConfigurableI18n\Twig\Extensions\Node\Trans as NodeTrans;
+use Twig\Node\Node;
 use Twig\Token;
 
 class Trans extends \Twig\Extensions\TokenParser\TransTokenParser
@@ -18,16 +21,17 @@ class Trans extends \Twig\Extensions\TokenParser\TransTokenParser
      *
      * @return \Twig\Node\Node A \Twig\Node\Node instance
      */
-    public function parse(Token $token)
+    public function parse(Token $token): Node
     {
         $parsed = parent::parse($token);
-        $body = ($parsed->hasNode('body')) ? $parsed->getNode('body') : null;
+        $body = $parsed->getNode('body');
         $plural = ($parsed->hasNode('plural')) ? $parsed->getNode('plural') : null;
+
+        /** @var \Twig\Node\Expression\AbstractExpression|null */
         $count = ($parsed->hasNode('count')) ? $parsed->getNode('count') : null;
         $notes = ($parsed->hasNode('notes')) ? $parsed->getNode('notes') : null;
 
-        /** @var \Twig\Node\Node $retval */
-        $retval = new NodeTrans($body, $plural, $count, $notes, $parsed->getTemplateLine(), $parsed->getNodeTag());
-        return $retval;
+        /** @var \Twig\Node\Node */
+        return new NodeTrans($body, $plural, $count, $notes, $parsed->getTemplateLine(), $parsed->getNodeTag());
     }
 }
diff --git a/vendor/simplesamlphp/twig-configurable-i18n/tests/bootstrap.php b/vendor/simplesamlphp/twig-configurable-i18n/tests/bootstrap.php
new file mode 100644
index 0000000000..2551e08084
--- /dev/null
+++ b/vendor/simplesamlphp/twig-configurable-i18n/tests/bootstrap.php
@@ -0,0 +1,4 @@
+<?php
+
+$projectRoot = dirname(__DIR__);
+require_once($projectRoot . '/vendor/autoload.php');
diff --git a/vendor/simplesamlphp/twig-configurable-i18n/tests/src/Twig/EnvironmentTest.php b/vendor/simplesamlphp/twig-configurable-i18n/tests/src/Twig/EnvironmentTest.php
new file mode 100644
index 0000000000..43263b558c
--- /dev/null
+++ b/vendor/simplesamlphp/twig-configurable-i18n/tests/src/Twig/EnvironmentTest.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace SimpleSAML\Test\TwigConfigurableI18n\Twig;
+
+use PHPUnit\Framework\TestCase;
+use SimpleSAML\TwigConfigurableI18n\Twig\Environment;
+use Twig\Loader\FilesystemLoader;
+
+class EnvironmentTest extends TestCase
+{
+    /**
+     * @covers \SimpleSAML\TwigConfigurableI18n\Twig\Environment::getOptions()
+     * @return void
+     */
+    public function testOptions(): void
+    {
+        $loader = new FilesystemLoader();
+        $options = [1, 'testcase', 1.0, [], $loader];
+        $env = new Environment($loader, $options);
+        $this->assertEquals($env->getOptions(), $options);
+    }
+}
diff --git a/vendor/symfony/config/Definition/BaseNode.php b/vendor/symfony/config/Definition/BaseNode.php
index 3d7fd85603..3b0ea0a98a 100644
--- a/vendor/symfony/config/Definition/BaseNode.php
+++ b/vendor/symfony/config/Definition/BaseNode.php
@@ -24,7 +24,7 @@
  */
 abstract class BaseNode implements NodeInterface
 {
-    const DEFAULT_PATH_SEPARATOR = '.';
+    public const DEFAULT_PATH_SEPARATOR = '.';
 
     private static $placeholderUniquePrefixes = [];
     private static $placeholders = [];
@@ -112,7 +112,7 @@ public function setAttribute($key, $value)
      */
     public function getAttribute($key, $default = null)
     {
-        return isset($this->attributes[$key]) ? $this->attributes[$key] : $default;
+        return $this->attributes[$key] ?? $default;
     }
 
     /**
diff --git a/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
index 60491e0da3..bec08b0db6 100644
--- a/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
@@ -281,7 +281,7 @@ public function canBeEnabled()
             ->beforeNormalization()
                 ->ifArray()
                 ->then(function ($v) {
-                    $v['enabled'] = isset($v['enabled']) ? $v['enabled'] : true;
+                    $v['enabled'] = $v['enabled'] ?? true;
 
                     return $v;
                 })
diff --git a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
index e19e09ca7c..89103efeaf 100644
--- a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
+++ b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
@@ -17,6 +17,7 @@
 use Symfony\Component\Config\Definition\NodeInterface;
 use Symfony\Component\Config\Definition\PrototypedArrayNode;
 use Symfony\Component\Config\Definition\ScalarNode;
+use Symfony\Component\Config\Definition\VariableNode;
 use Symfony\Component\Yaml\Inline;
 
 /**
@@ -95,6 +96,9 @@ private function writeNode(NodeInterface $node, NodeInterface $parentNode = null
         } elseif ($node instanceof EnumNode) {
             $comments[] = 'One of '.implode('; ', array_map('json_encode', $node->getValues()));
             $default = $node->hasDefaultValue() ? Inline::dump($node->getDefaultValue()) : '~';
+        } elseif (VariableNode::class === \get_class($node) && \is_array($example)) {
+            // If there is an array example, we are sure we dont need to print a default value
+            $default = '';
         } else {
             $default = '~';
 
@@ -125,7 +129,7 @@ private function writeNode(NodeInterface $node, NodeInterface $parentNode = null
 
         // example
         if ($example && !\is_array($example)) {
-            $comments[] = 'Example: '.$example;
+            $comments[] = 'Example: '.Inline::dump($example);
         }
 
         $default = '' != (string) $default ? ' '.$default : '';
@@ -161,7 +165,7 @@ private function writeNode(NodeInterface $node, NodeInterface $parentNode = null
 
             $this->writeLine('# '.$message.':', $depth * 4 + 4);
 
-            $this->writeArray($example, $depth + 1);
+            $this->writeArray(array_map([Inline::class, 'dump'], $example), $depth + 1);
         }
 
         if ($children) {
diff --git a/vendor/symfony/config/Definition/Processor.php b/vendor/symfony/config/Definition/Processor.php
index a878b90557..e7b364864d 100644
--- a/vendor/symfony/config/Definition/Processor.php
+++ b/vendor/symfony/config/Definition/Processor.php
@@ -86,10 +86,10 @@ public static function normalizeConfig($config, $key, $plural = null)
         if (isset($config[$key])) {
             if (\is_string($config[$key]) || !\is_int(key($config[$key]))) {
                 // only one
-                return  [$config[$key]];
+                return [$config[$key]];
             }
 
-            return  $config[$key];
+            return $config[$key];
         }
 
         return [];
diff --git a/vendor/symfony/config/Definition/PrototypedArrayNode.php b/vendor/symfony/config/Definition/PrototypedArrayNode.php
index f48414e318..68bb270172 100644
--- a/vendor/symfony/config/Definition/PrototypedArrayNode.php
+++ b/vendor/symfony/config/Definition/PrototypedArrayNode.php
@@ -237,6 +237,10 @@ protected function normalizeValue($value)
                 } elseif (isset($v[$this->keyAttribute])) {
                     $k = $v[$this->keyAttribute];
 
+                    if (\is_float($k)) {
+                        $k = var_export($k, true);
+                    }
+
                     // remove the key attribute when required
                     if ($this->removeKeyAttribute) {
                         unset($v[$this->keyAttribute]);
@@ -367,7 +371,7 @@ protected function mergeValues($leftSide, $rightSide)
      */
     private function getPrototypeForChild(string $key)
     {
-        $prototype = isset($this->valuePrototypes[$key]) ? $this->valuePrototypes[$key] : $this->prototype;
+        $prototype = $this->valuePrototypes[$key] ?? $this->prototype;
         $prototype->setName($key);
 
         return $prototype;
diff --git a/vendor/symfony/config/LICENSE b/vendor/symfony/config/LICENSE
index 9e936ec044..9ff2d0d630 100644
--- a/vendor/symfony/config/LICENSE
+++ b/vendor/symfony/config/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2020 Fabien Potencier
+Copyright (c) 2004-2021 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/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php
index e87230785b..1ca59665a4 100644
--- a/vendor/symfony/config/Loader/FileLoader.php
+++ b/vendor/symfony/config/Loader/FileLoader.php
@@ -78,7 +78,7 @@ public function import($resource, $type = null, $ignoreErrors = false, $sourceRe
         }
         $exclude = \func_num_args() >= 5 ? func_get_arg(4) : null;
 
-        if (\is_string($resource) && \strlen($resource) !== $i = strcspn($resource, '*?{[')) {
+        if (\is_string($resource) && \strlen($resource) !== ($i = strcspn($resource, '*?{[')) && false === strpos($resource, "\n")) {
             $excluded = [];
             foreach ((array) $exclude as $pattern) {
                 foreach ($this->glob($pattern, true, $_, false, true) as $path => $info) {
@@ -97,7 +97,7 @@ public function import($resource, $type = null, $ignoreErrors = false, $sourceRe
             }
 
             if ($isSubpath) {
-                return isset($ret[1]) ? $ret : (isset($ret[0]) ? $ret[0] : null);
+                return isset($ret[1]) ? $ret : ($ret[0] ?? null);
             }
         }
 
diff --git a/vendor/symfony/config/Loader/LoaderInterface.php b/vendor/symfony/config/Loader/LoaderInterface.php
index dfca9dd27b..130296ea0a 100644
--- a/vendor/symfony/config/Loader/LoaderInterface.php
+++ b/vendor/symfony/config/Loader/LoaderInterface.php
@@ -24,6 +24,8 @@ interface LoaderInterface
      * @param mixed       $resource The resource
      * @param string|null $type     The resource type or null if unknown
      *
+     * @return mixed
+     *
      * @throws \Exception If something went wrong
      */
     public function load($resource, $type = null);
diff --git a/vendor/symfony/config/README.md b/vendor/symfony/config/README.md
index 0bbde55230..5315624661 100644
--- a/vendor/symfony/config/README.md
+++ b/vendor/symfony/config/README.md
@@ -1,9 +1,9 @@
 Config Component
 ================
 
-The Config component provides several classes to help you find, load, combine,
-autofill and validate configuration values of any kind, whatever their source
-may be (YAML, XML, INI files, or for instance a database).
+The Config component helps find, load, combine, autofill and validate
+configuration values of any kind, whatever their source may be (YAML, XML, INI
+files, or for instance a database).
 
 Resources
 ---------
diff --git a/vendor/symfony/config/Resource/ClassExistenceResource.php b/vendor/symfony/config/Resource/ClassExistenceResource.php
index da76a7b780..c77e343b5c 100644
--- a/vendor/symfony/config/Resource/ClassExistenceResource.php
+++ b/vendor/symfony/config/Resource/ClassExistenceResource.php
@@ -219,14 +219,14 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
             }
 
             $props = [
-                'file' => isset($callerFrame['file']) ? $callerFrame['file'] : null,
-                'line' => isset($callerFrame['line']) ? $callerFrame['line'] : null,
+                'file' => $callerFrame['file'] ?? null,
+                'line' => $callerFrame['line'] ?? null,
                 'trace' => \array_slice($trace, 1 + $i),
             ];
 
             foreach ($props as $p => $v) {
                 if (null !== $v) {
-                    $r = new \ReflectionProperty('Exception', $p);
+                    $r = new \ReflectionProperty(\Exception::class, $p);
                     $r->setAccessible(true);
                     $r->setValue($e, $v);
                 }
diff --git a/vendor/symfony/config/composer.json b/vendor/symfony/config/composer.json
index fd26b4bd8c..d71373bb81 100644
--- a/vendor/symfony/config/composer.json
+++ b/vendor/symfony/config/composer.json
@@ -1,7 +1,7 @@
 {
     "name": "symfony/config",
     "type": "library",
-    "description": "Symfony Config Component",
+    "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
     "keywords": [],
     "homepage": "https://symfony.com",
     "license": "MIT",
diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php
index 95e4a80107..4053d9e6a5 100644
--- a/vendor/symfony/filesystem/Filesystem.php
+++ b/vendor/symfony/filesystem/Filesystem.php
@@ -577,7 +577,7 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
             } elseif (is_dir($file)) {
                 $this->mkdir($target);
             } elseif (is_file($file)) {
-                $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
+                $this->copy($file, $target, $options['override'] ?? false);
             } else {
                 throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
             }
@@ -695,7 +695,9 @@ public function dumpFile($filename, $content)
 
             $this->rename($tmpFile, $filename, true);
         } finally {
-            @unlink($tmpFile);
+            if (file_exists($tmpFile)) {
+                @unlink($tmpFile);
+            }
         }
     }
 
diff --git a/vendor/symfony/filesystem/LICENSE b/vendor/symfony/filesystem/LICENSE
index 9e936ec044..9ff2d0d630 100644
--- a/vendor/symfony/filesystem/LICENSE
+++ b/vendor/symfony/filesystem/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2020 Fabien Potencier
+Copyright (c) 2004-2021 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/filesystem/composer.json b/vendor/symfony/filesystem/composer.json
index 95df9d3e58..9feb1013ef 100644
--- a/vendor/symfony/filesystem/composer.json
+++ b/vendor/symfony/filesystem/composer.json
@@ -1,7 +1,7 @@
 {
     "name": "symfony/filesystem",
     "type": "library",
-    "description": "Symfony Filesystem Component",
+    "description": "Provides basic utilities for the filesystem",
     "keywords": [],
     "homepage": "https://symfony.com",
     "license": "MIT",
diff --git a/vendor/webmozart/assert/CHANGELOG.md b/vendor/webmozart/assert/CHANGELOG.md
index 1d379277ff..9a7becb249 100644
--- a/vendor/webmozart/assert/CHANGELOG.md
+++ b/vendor/webmozart/assert/CHANGELOG.md
@@ -3,95 +3,23 @@ Changelog
 
 ## UNRELEASED
 
-## 1.9.1
-
-## Fixed
-
-* provisional support for PHP 8.0
-
-## 1.9.0
-
-* added better Psalm support for `all*` & `nullOr*` methods
-  * These methods are now understood by Psalm through a mixin. You may need a newer version of Psalm in order to use this
-* added `@psalm-pure` annotation to `Assert::notFalse()`
-* added more `@psalm-assert` annotations where appropriate
-
-## Changed
-
-* the `all*` & `nullOr*` methods are now declared on an interface, instead of `@method` annotations.
-This interface is linked to the `Assert` class with a `@mixin` annotation. Most IDE's have supported this
-for a long time, and you should not lose any autocompletion capabilities. PHPStan has supported this since
-version `0.12.20`. This package is marked incompatible (with a composer conflict) with phpstan version prior to that.
-If you do not use PHPStan than this does not matter.
-
-## 1.8.0
-
-### Added
-
-* added `Assert::notStartsWith()`
-* added `Assert::notEndsWith()`
-* added `Assert::inArray()`
-* added `@psalm-pure` annotations to pure assertions
-
-### Fixed
-
-* Exception messages of comparisons between `DateTime(Immutable)` objects now display their date & time.
-* Custom Exception messages for `Assert::count()` now use the values to render the exception message.
-
-## 1.7.0 (2020-02-14)
-
-### Added
-
-* added `Assert::notFalse()`
-* added `Assert::isAOf()`
-* added `Assert::isAnyOf()`
-* added `Assert::isNotA()`
-
-## 1.6.0 (2019-11-24)
-
-### Added
-
-* added `Assert::validArrayKey()`
-* added `Assert::isNonEmptyList()`
-* added `Assert::isNonEmptyMap()`
-* added `@throws InvalidArgumentException` annotations to all methods that throw.
-* added `@psalm-assert` for the list type to the `isList` assertion.
-
-### Fixed
-
-* `ResourceBundle` & `SimpleXMLElement` now pass the `isCountable` assertions.
-They are countable, without implementing the `Countable` interface.
-* The doc block of `range` now has the proper variables.
-* An empty array will now pass `isList` and `isMap`. As it is a valid form of both.
-If a non-empty variant is needed, use `isNonEmptyList` or `isNonEmptyMap`.
-
-### Changed
-
-* Removed some `@psalm-assert` annotations, that were 'side effect' assertions See:
-  * [#144](https://github.com/webmozart/assert/pull/144)
-  * [#145](https://github.com/webmozart/assert/issues/145)
-  * [#146](https://github.com/webmozart/assert/pull/146)
-  * [#150](https://github.com/webmozart/assert/pull/150)
-* If you use Psalm, the minimum version needed is `3.6.0`. Which is enforced through a composer conflict.
-If you don't use Psalm, then this has no impact.
-
 ## 1.5.0 (2019-08-24)
 
-### Added
+### Added 
 
 * added `Assert::uniqueValues()`
 * added `Assert::unicodeLetters()`
 * added: `Assert::email()`
 * added support for [Psalm](https://github.com/vimeo/psalm), by adding `@psalm-assert` annotations where appropriate.
 
-### Fixed
+## Fixed
 
-* `Assert::endsWith()` would not give the correct result when dealing with a multibyte suffix.
-* `Assert::length(), minLength, maxLength, lengthBetween` would not give the correct result when dealing with multibyte characters.
+* `Assert::endsWith()` would not give the correct result when dealing with multibyte suffix. 
+* `Assert::length(), minLength, maxLength, lengthBetween` would not give the correct result when dealing with multibyte characters. 
 
 **NOTE**: These 2 changes may break your assertions if you relied on the fact that multibyte characters didn't behave correctly.
 
-### Changed
+## Changed
 
 * The names of some variables have been updated to better reflect what they are.
 * All function calls are now in their FQN form, slightly increasing performance.
diff --git a/vendor/webmozart/assert/README.md b/vendor/webmozart/assert/README.md
index 1407a9a1bd..1b6299a42f 100644
--- a/vendor/webmozart/assert/README.md
+++ b/vendor/webmozart/assert/README.md
@@ -3,7 +3,6 @@ Webmozart Assert
 
 [![Build Status](https://travis-ci.org/webmozart/assert.svg?branch=master)](https://travis-ci.org/webmozart/assert)
 [![Build status](https://ci.appveyor.com/api/projects/status/lyg83bcsisrr94se/branch/master?svg=true)](https://ci.appveyor.com/project/webmozart/assert/branch/master)
-[![Code Coverage](https://scrutinizer-ci.com/g/webmozart/assert/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/webmozart/assert/?branch=master)
 [![Latest Stable Version](https://poser.pugx.org/webmozart/assert/v/stable.svg)](https://packagist.org/packages/webmozart/assert)
 [![Total Downloads](https://poser.pugx.org/webmozart/assert/downloads.svg)](https://packagist.org/packages/webmozart/assert)
 
@@ -104,21 +103,17 @@ Method                                                   | Description
 `isIterable($value, $message = '')`                      | Check that a value is an array or a `\Traversable`
 `isCountable($value, $message = '')`                     | Check that a value is an array or a `\Countable`
 `isInstanceOf($value, $class, $message = '')`            | Check that a value is an `instanceof` a class
-`isInstanceOfAny($value, array $classes, $message = '')` | Check that a value is an `instanceof` at least one class on the array of classes
+`isInstanceOfAny($value, array $classes, $message = '')` | Check that a value is an `instanceof` a at least one class on the array of classes
 `notInstanceOf($value, $class, $message = '')`           | Check that a value is not an `instanceof` a class
-`isAOf($value, $class, $message = '')`                   | Check that a value is of the class or has one of its parents
-`isAnyOf($value, array $classes, $message = '')`         | Check that a value is of at least one of the classes or has one of its parents
-`isNotA($value, $class, $message = '')`                  | Check that a value is not of the class or has not one of its parents
 `isArrayAccessible($value, $message = '')`               | Check that a value can be accessed as an array
 `uniqueValues($values, $message = '')`                   | Check that the given array contains unique values
 
 ### Comparison Assertions
 
 Method                                          | Description
------------------------------------------------ | ------------------------------------------------------------------
+----------------------------------------------- | --------------------------------------------------
 `true($value, $message = '')`                   | Check that a value is `true`
 `false($value, $message = '')`                  | Check that a value is `false`
-`notFalse($value, $message = '')`               | Check that a value is not `false`
 `null($value, $message = '')`                   | Check that a value is `null`
 `notNull($value, $message = '')`                | Check that a value is not `null`
 `isEmpty($value, $message = '')`                | Check that a value is `empty()`
@@ -132,8 +127,7 @@ Method                                          | Description
 `lessThan($value, $value2, $message = '')`      | Check that a value is less than another
 `lessThanEq($value, $value2, $message = '')`    | Check that a value is less than or equal to another
 `range($value, $min, $max, $message = '')`      | Check that a value is within a range
-`inArray($value, array $values, $message = '')` | Check that a value is one of a list of values
-`oneOf($value, array $values, $message = '')`   | Check that a value is one of a list of values (alias of `inArray`)
+`oneOf($value, array $values, $message = '')`   | Check that a value is one of a list of values
 
 ### String Assertions
 
@@ -143,12 +137,10 @@ any of the following assertions.
 Method                                              | Description
 --------------------------------------------------- | -----------------------------------------------------------------
 `contains($value, $subString, $message = '')`       | Check that a string contains a substring
-`notContains($value, $subString, $message = '')`    | Check that a string does not contain a substring
+`notContains($value, $subString, $message = '')`    | Check that a string does not contains a substring
 `startsWith($value, $prefix, $message = '')`        | Check that a string has a prefix
-`notStartsWith($value, $prefix, $message = '')`     | Check that a string does not have a prefix
 `startsWithLetter($value, $message = '')`           | Check that a string starts with a letter
 `endsWith($value, $suffix, $message = '')`          | Check that a string has a suffix
-`notEndsWith($value, $suffix, $message = '')`       | Check that a string does not have a suffix
 `regex($value, $pattern, $message = '')`            | Check that a string matches a regular expression
 `notRegex($value, $pattern, $message = '')`         | Check that a string does not match a regular expression
 `unicodeLetters($value, $message = '')`             | Check that a string contains Unicode letters only
@@ -197,15 +189,12 @@ Method                                             | Description
 -------------------------------------------------- | ------------------------------------------------------------------
 `keyExists($array, $key, $message = '')`           | Check that a key exists in an array
 `keyNotExists($array, $key, $message = '')`        | Check that a key does not exist in an array
-`validArrayKey($key, $message = '')`               | Check that a value is a valid array key (int or string)
 `count($array, $number, $message = '')`            | Check that an array contains a specific number of elements
 `minCount($array, $min, $message = '')`            | Check that an array contains at least a certain number of elements
 `maxCount($array, $max, $message = '')`            | Check that an array contains at most a certain number of elements
 `countBetween($array, $min, $max, $message = '')`  | Check that an array has a count in the given range
 `isList($array, $message = '')`                    | Check that an array is a non-associative list
-`isNonEmptyList($array, $message = '')`            | Check that an array is a non-associative list, and not empty
 `isMap($array, $message = '')`                     | Check that an array is associative and has strings as keys
-`isNonEmptyMap($array, $message = '')`             | Check that an array is associative and has strings as keys, and is not empty
 
 ### Function Assertions
 
@@ -231,27 +220,6 @@ assertion only if it the value is not `null`:
 Assert::nullOrString($middleName, 'The middle name must be a string or null. Got: %s');
 ```
 
-### Extending Assert
-
-The `Assert` class comes with a few methods, which can be overridden to change the class behaviour. You can also extend it to
-add your own assertions.
-
-#### Overriding methods
-
-Overriding the following methods in your assertion class allows you to change the behaviour of the assertions:
-
-* `public static function __callStatic($name, $arguments)`
-  * This method is used to 'create' the `nullOr` and `all` versions of the assertions.
-* `protected static function valueToString($value)`
-  * This method is used for error messages, to convert the value to a string value for displaying. You could use this for representing a value object with a `__toString` method for example.
-* `protected static function typeToString($value)`
-  * This method is used for error messages, to convert the a value to a string representing its type.
-* `protected static function strlen($value)`
-  * This method is used to calculate string length for relevant methods, using the `mb_strlen` if available and useful.
-* `protected static function reportInvalidArgument($message)`
-  * This method is called when an assertion fails, with the specified error message. Here you can throw your own exception, or log something.
-
-
 Authors
 -------
 
@@ -274,7 +242,7 @@ All contents of this package are licensed under the [MIT license].
 [beberlei/assert]: https://github.com/beberlei/assert
 [assert package]: https://github.com/beberlei/assert
 [Composer]: https://getcomposer.org
-[Bernhard Schussek]: https://webmozarts.com
+[Bernhard Schussek]: http://webmozarts.com
 [The Community Contributors]: https://github.com/webmozart/assert/graphs/contributors
 [issue tracker]: https://github.com/webmozart/assert/issues
 [Git repository]: https://github.com/webmozart/assert
diff --git a/vendor/webmozart/assert/ci/composer.json b/vendor/webmozart/assert/ci/composer.json
new file mode 100644
index 0000000000..b498949531
--- /dev/null
+++ b/vendor/webmozart/assert/ci/composer.json
@@ -0,0 +1,5 @@
+{
+    "require": {
+        "vimeo/psalm": "^3.4"
+    }
+}
diff --git a/vendor/webmozart/assert/composer.json b/vendor/webmozart/assert/composer.json
index 2e609b6307..1aa9f270cc 100644
--- a/vendor/webmozart/assert/composer.json
+++ b/vendor/webmozart/assert/composer.json
@@ -14,15 +14,16 @@
         }
     ],
     "require": {
-        "php": "^5.3.3 || ^7.0 || ^8.0",
+        "php": "^5.3.3 || ^7.0",
         "symfony/polyfill-ctype": "^1.8"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36 || ^7.5.13"
     },
-    "conflict": {
-        "vimeo/psalm": "<3.9.1",
-        "phpstan/phpstan": "<0.12.20"
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.3-dev"
+        }
     },
     "autoload": {
         "psr-4": {
@@ -31,8 +32,7 @@
     },
     "autoload-dev": {
         "psr-4": {
-            "Webmozart\\Assert\\Tests\\": "tests/",
-            "Webmozart\\Assert\\Bin\\": "bin/src"
+            "Webmozart\\Assert\\Tests\\": "tests/"
         }
     }
 }
diff --git a/vendor/webmozart/assert/psalm.xml b/vendor/webmozart/assert/psalm.xml
index 9a43008195..44d37aabed 100644
--- a/vendor/webmozart/assert/psalm.xml
+++ b/vendor/webmozart/assert/psalm.xml
@@ -4,11 +4,12 @@
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="https://getpsalm.org/schema/config"
     xsi:schemaLocation="https://getpsalm.org/schema/config ci/vendor/vimeo/psalm/config.xsd"
-    phpVersion="7.3"
 >
     <projectFiles>
-        <directory name="bin" />
         <directory name="tests/static-analysis" />
+        <ignoreFiles>
+            <directory name="vendor" />
+        </ignoreFiles>
     </projectFiles>
 
 </psalm>
diff --git a/vendor/webmozart/assert/src/Assert.php b/vendor/webmozart/assert/src/Assert.php
index b28e17841a..79b1036e51 100644
--- a/vendor/webmozart/assert/src/Assert.php
+++ b/vendor/webmozart/assert/src/Assert.php
@@ -15,19 +15,176 @@
 use BadMethodCallException;
 use Closure;
 use Countable;
-use DateTime;
-use DateTimeImmutable;
 use Exception;
 use InvalidArgumentException;
-use ResourceBundle;
-use SimpleXMLElement;
 use Throwable;
 use Traversable;
 
 /**
  * Efficient assertions to validate the input/output of your methods.
  *
- * @mixin Mixin
+ * @method static void nullOrString($value, $message = '')
+ * @method static void nullOrStringNotEmpty($value, $message = '')
+ * @method static void nullOrInteger($value, $message = '')
+ * @method static void nullOrIntegerish($value, $message = '')
+ * @method static void nullOrFloat($value, $message = '')
+ * @method static void nullOrNumeric($value, $message = '')
+ * @method static void nullOrNatural($value, $message = '')
+ * @method static void nullOrBoolean($value, $message = '')
+ * @method static void nullOrScalar($value, $message = '')
+ * @method static void nullOrObject($value, $message = '')
+ * @method static void nullOrResource($value, $type = null, $message = '')
+ * @method static void nullOrIsCallable($value, $message = '')
+ * @method static void nullOrIsArray($value, $message = '')
+ * @method static void nullOrIsTraversable($value, $message = '')
+ * @method static void nullOrIsArrayAccessible($value, $message = '')
+ * @method static void nullOrIsCountable($value, $message = '')
+ * @method static void nullOrIsIterable($value, $message = '')
+ * @method static void nullOrIsInstanceOf($value, $class, $message = '')
+ * @method static void nullOrNotInstanceOf($value, $class, $message = '')
+ * @method static void nullOrIsInstanceOfAny($value, $classes, $message = '')
+ * @method static void nullOrIsEmpty($value, $message = '')
+ * @method static void nullOrNotEmpty($value, $message = '')
+ * @method static void nullOrTrue($value, $message = '')
+ * @method static void nullOrFalse($value, $message = '')
+ * @method static void nullOrIp($value, $message = '')
+ * @method static void nullOrIpv4($value, $message = '')
+ * @method static void nullOrIpv6($value, $message = '')
+ * @method static void nullOrEmail($value, $message = '')
+ * @method static void nullOrUniqueValues($values, $message = '')
+ * @method static void nullOrEq($value, $expect, $message = '')
+ * @method static void nullOrNotEq($value, $expect, $message = '')
+ * @method static void nullOrSame($value, $expect, $message = '')
+ * @method static void nullOrNotSame($value, $expect, $message = '')
+ * @method static void nullOrGreaterThan($value, $limit, $message = '')
+ * @method static void nullOrGreaterThanEq($value, $limit, $message = '')
+ * @method static void nullOrLessThan($value, $limit, $message = '')
+ * @method static void nullOrLessThanEq($value, $limit, $message = '')
+ * @method static void nullOrRange($value, $min, $max, $message = '')
+ * @method static void nullOrOneOf($value, $values, $message = '')
+ * @method static void nullOrContains($value, $subString, $message = '')
+ * @method static void nullOrNotContains($value, $subString, $message = '')
+ * @method static void nullOrNotWhitespaceOnly($value, $message = '')
+ * @method static void nullOrStartsWith($value, $prefix, $message = '')
+ * @method static void nullOrStartsWithLetter($value, $message = '')
+ * @method static void nullOrEndsWith($value, $suffix, $message = '')
+ * @method static void nullOrRegex($value, $pattern, $message = '')
+ * @method static void nullOrNotRegex($value, $pattern, $message = '')
+ * @method static void nullOrUnicodeLetters($value, $message = '')
+ * @method static void nullOrAlpha($value, $message = '')
+ * @method static void nullOrDigits($value, $message = '')
+ * @method static void nullOrAlnum($value, $message = '')
+ * @method static void nullOrLower($value, $message = '')
+ * @method static void nullOrUpper($value, $message = '')
+ * @method static void nullOrLength($value, $length, $message = '')
+ * @method static void nullOrMinLength($value, $min, $message = '')
+ * @method static void nullOrMaxLength($value, $max, $message = '')
+ * @method static void nullOrLengthBetween($value, $min, $max, $message = '')
+ * @method static void nullOrFileExists($value, $message = '')
+ * @method static void nullOrFile($value, $message = '')
+ * @method static void nullOrDirectory($value, $message = '')
+ * @method static void nullOrReadable($value, $message = '')
+ * @method static void nullOrWritable($value, $message = '')
+ * @method static void nullOrClassExists($value, $message = '')
+ * @method static void nullOrSubclassOf($value, $class, $message = '')
+ * @method static void nullOrInterfaceExists($value, $message = '')
+ * @method static void nullOrImplementsInterface($value, $interface, $message = '')
+ * @method static void nullOrPropertyExists($value, $property, $message = '')
+ * @method static void nullOrPropertyNotExists($value, $property, $message = '')
+ * @method static void nullOrMethodExists($value, $method, $message = '')
+ * @method static void nullOrMethodNotExists($value, $method, $message = '')
+ * @method static void nullOrKeyExists($value, $key, $message = '')
+ * @method static void nullOrKeyNotExists($value, $key, $message = '')
+ * @method static void nullOrCount($value, $key, $message = '')
+ * @method static void nullOrMinCount($value, $min, $message = '')
+ * @method static void nullOrMaxCount($value, $max, $message = '')
+ * @method static void nullOrIsList($value, $message = '')
+ * @method static void nullOrIsMap($value, $message = '')
+ * @method static void nullOrCountBetween($value, $min, $max, $message = '')
+ * @method static void nullOrUuid($values, $message = '')
+ * @method static void nullOrThrows($expression, $class = 'Exception', $message = '')
+ * @method static void allString($values, $message = '')
+ * @method static void allStringNotEmpty($values, $message = '')
+ * @method static void allInteger($values, $message = '')
+ * @method static void allIntegerish($values, $message = '')
+ * @method static void allFloat($values, $message = '')
+ * @method static void allNumeric($values, $message = '')
+ * @method static void allNatural($values, $message = '')
+ * @method static void allBoolean($values, $message = '')
+ * @method static void allScalar($values, $message = '')
+ * @method static void allObject($values, $message = '')
+ * @method static void allResource($values, $type = null, $message = '')
+ * @method static void allIsCallable($values, $message = '')
+ * @method static void allIsArray($values, $message = '')
+ * @method static void allIsTraversable($values, $message = '')
+ * @method static void allIsArrayAccessible($values, $message = '')
+ * @method static void allIsCountable($values, $message = '')
+ * @method static void allIsIterable($values, $message = '')
+ * @method static void allIsInstanceOf($values, $class, $message = '')
+ * @method static void allNotInstanceOf($values, $class, $message = '')
+ * @method static void allIsInstanceOfAny($values, $classes, $message = '')
+ * @method static void allNull($values, $message = '')
+ * @method static void allNotNull($values, $message = '')
+ * @method static void allIsEmpty($values, $message = '')
+ * @method static void allNotEmpty($values, $message = '')
+ * @method static void allTrue($values, $message = '')
+ * @method static void allFalse($values, $message = '')
+ * @method static void allIp($values, $message = '')
+ * @method static void allIpv4($values, $message = '')
+ * @method static void allIpv6($values, $message = '')
+ * @method static void allEmail($values, $message = '')
+ * @method static void allUniqueValues($values, $message = '')
+ * @method static void allEq($values, $expect, $message = '')
+ * @method static void allNotEq($values, $expect, $message = '')
+ * @method static void allSame($values, $expect, $message = '')
+ * @method static void allNotSame($values, $expect, $message = '')
+ * @method static void allGreaterThan($values, $limit, $message = '')
+ * @method static void allGreaterThanEq($values, $limit, $message = '')
+ * @method static void allLessThan($values, $limit, $message = '')
+ * @method static void allLessThanEq($values, $limit, $message = '')
+ * @method static void allRange($values, $min, $max, $message = '')
+ * @method static void allOneOf($values, $values, $message = '')
+ * @method static void allContains($values, $subString, $message = '')
+ * @method static void allNotContains($values, $subString, $message = '')
+ * @method static void allNotWhitespaceOnly($values, $message = '')
+ * @method static void allStartsWith($values, $prefix, $message = '')
+ * @method static void allStartsWithLetter($values, $message = '')
+ * @method static void allEndsWith($values, $suffix, $message = '')
+ * @method static void allRegex($values, $pattern, $message = '')
+ * @method static void allNotRegex($values, $pattern, $message = '')
+ * @method static void allUnicodeLetters($values, $message = '')
+ * @method static void allAlpha($values, $message = '')
+ * @method static void allDigits($values, $message = '')
+ * @method static void allAlnum($values, $message = '')
+ * @method static void allLower($values, $message = '')
+ * @method static void allUpper($values, $message = '')
+ * @method static void allLength($values, $length, $message = '')
+ * @method static void allMinLength($values, $min, $message = '')
+ * @method static void allMaxLength($values, $max, $message = '')
+ * @method static void allLengthBetween($values, $min, $max, $message = '')
+ * @method static void allFileExists($values, $message = '')
+ * @method static void allFile($values, $message = '')
+ * @method static void allDirectory($values, $message = '')
+ * @method static void allReadable($values, $message = '')
+ * @method static void allWritable($values, $message = '')
+ * @method static void allClassExists($values, $message = '')
+ * @method static void allSubclassOf($values, $class, $message = '')
+ * @method static void allInterfaceExists($values, $message = '')
+ * @method static void allImplementsInterface($values, $interface, $message = '')
+ * @method static void allPropertyExists($values, $property, $message = '')
+ * @method static void allPropertyNotExists($values, $property, $message = '')
+ * @method static void allMethodExists($values, $method, $message = '')
+ * @method static void allMethodNotExists($values, $method, $message = '')
+ * @method static void allKeyExists($values, $key, $message = '')
+ * @method static void allKeyNotExists($values, $key, $message = '')
+ * @method static void allCount($values, $key, $message = '')
+ * @method static void allMinCount($values, $min, $message = '')
+ * @method static void allMaxCount($values, $max, $message = '')
+ * @method static void allCountBetween($values, $min, $max, $message = '')
+ * @method static void allIsList($values, $message = '')
+ * @method static void allIsMap($values, $message = '')
+ * @method static void allUuid($values, $message = '')
+ * @method static void allThrows($expressions, $class = 'Exception', $message = '')
  *
  * @since  1.0
  *
@@ -36,13 +193,10 @@
 class Assert
 {
     /**
-     * @psalm-pure
      * @psalm-assert string $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function string($value, $message = '')
     {
@@ -55,13 +209,10 @@ public static function string($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert non-empty-string $value
+     * @psalm-assert string $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function stringNotEmpty($value, $message = '')
     {
@@ -70,13 +221,10 @@ public static function stringNotEmpty($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert int $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function integer($value, $message = '')
     {
@@ -89,13 +237,10 @@ public static function integer($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert numeric $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function integerish($value, $message = '')
     {
@@ -108,13 +253,10 @@ public static function integerish($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert float $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function float($value, $message = '')
     {
@@ -127,13 +269,10 @@ public static function float($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert numeric $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function numeric($value, $message = '')
     {
@@ -146,32 +285,26 @@ public static function numeric($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert int $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function natural($value, $message = '')
     {
         if (!\is_int($value) || $value < 0) {
             static::reportInvalidArgument(\sprintf(
-                $message ?: 'Expected a non-negative integer. Got: %s',
+                $message ?: 'Expected a non-negative integer. Got %s',
                 static::valueToString($value)
             ));
         }
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert bool $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function boolean($value, $message = '')
     {
@@ -184,13 +317,10 @@ public static function boolean($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert scalar $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function scalar($value, $message = '')
     {
@@ -203,13 +333,10 @@ public static function scalar($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert object $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function object($value, $message = '')
     {
@@ -222,14 +349,11 @@ public static function object($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert resource $value
      *
      * @param mixed       $value
      * @param string|null $type    type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php
      * @param string      $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function resource($value, $type = null, $message = '')
     {
@@ -250,13 +374,10 @@ public static function resource($value, $type = null, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert callable $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isCallable($value, $message = '')
     {
@@ -269,13 +390,10 @@ public static function isCallable($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert array $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isArray($value, $message = '')
     {
@@ -288,15 +406,12 @@ public static function isArray($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert iterable $value
      *
      * @deprecated use "isIterable" or "isInstanceOf" instead
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isTraversable($value, $message = '')
     {
@@ -317,13 +432,8 @@ public static function isTraversable($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert array|ArrayAccess $value
-     *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isArrayAccessible($value, $message = '')
     {
@@ -336,22 +446,14 @@ public static function isArrayAccessible($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert countable $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isCountable($value, $message = '')
     {
-        if (
-            !\is_array($value)
-            && !($value instanceof Countable)
-            && !($value instanceof ResourceBundle)
-            && !($value instanceof SimpleXMLElement)
-        ) {
+        if (!\is_array($value) && !($value instanceof Countable)) {
             static::reportInvalidArgument(\sprintf(
                 $message ?: 'Expected a countable. Got: %s',
                 static::typeToString($value)
@@ -360,13 +462,10 @@ public static function isCountable($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert iterable $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isIterable($value, $message = '')
     {
@@ -379,7 +478,6 @@ public static function isIterable($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-template ExpectedType of object
      * @psalm-param class-string<ExpectedType> $class
      * @psalm-assert ExpectedType $value
@@ -387,8 +485,6 @@ public static function isIterable($value, $message = '')
      * @param mixed         $value
      * @param string|object $class
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isInstanceOf($value, $class, $message = '')
     {
@@ -402,7 +498,6 @@ public static function isInstanceOf($value, $class, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-template ExpectedType of object
      * @psalm-param class-string<ExpectedType> $class
      * @psalm-assert !ExpectedType $value
@@ -410,8 +505,6 @@ public static function isInstanceOf($value, $class, $message = '')
      * @param mixed         $value
      * @param string|object $class
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notInstanceOf($value, $class, $message = '')
     {
@@ -425,14 +518,9 @@ public static function notInstanceOf($value, $class, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-param array<class-string> $classes
-     *
      * @param mixed                $value
      * @param array<object|string> $classes
      * @param string               $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isInstanceOfAny($value, array $classes, $message = '')
     {
@@ -450,91 +538,10 @@ public static function isInstanceOfAny($value, array $classes, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert ExpectedType|class-string<ExpectedType> $value
-     *
-     * @param object|string $value
-     * @param string        $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function isAOf($value, $class, $message = '')
-    {
-        static::string($class, 'Expected class as a string. Got: %s');
-
-        if (!\is_a($value, $class, \is_string($value))) {
-            static::reportInvalidArgument(sprintf(
-                $message ?: 'Expected an instance of this class or to this class among his parents %2$s. Got: %s',
-                static::typeToString($value),
-                $class
-            ));
-        }
-    }
-
-    /**
-     * @psalm-pure
-     * @psalm-template UnexpectedType of object
-     * @psalm-param class-string<UnexpectedType> $class
-     * @psalm-assert !UnexpectedType $value
-     * @psalm-assert !class-string<UnexpectedType> $value
-     *
-     * @param object|string $value
-     * @param string        $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function isNotA($value, $class, $message = '')
-    {
-        static::string($class, 'Expected class as a string. Got: %s');
-
-        if (\is_a($value, $class, \is_string($value))) {
-            static::reportInvalidArgument(sprintf(
-                $message ?: 'Expected an instance of this class or to this class among his parents other than %2$s. Got: %s',
-                static::typeToString($value),
-                $class
-            ));
-        }
-    }
-
-    /**
-     * @psalm-pure
-     * @psalm-param array<class-string> $classes
-     *
-     * @param object|string $value
-     * @param string[]      $classes
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function isAnyOf($value, array $classes, $message = '')
-    {
-        foreach ($classes as $class) {
-            static::string($class, 'Expected class as a string. Got: %s');
-
-            if (\is_a($value, $class, \is_string($value))) {
-                return;
-            }
-        }
-
-        static::reportInvalidArgument(sprintf(
-            $message ?: 'Expected an any of instance of this class or to this class among his parents other than %2$s. Got: %s',
-            static::typeToString($value),
-            \implode(', ', \array_map(array('static', 'valueToString'), $classes))
-        ));
-    }
-
-    /**
-     * @psalm-pure
      * @psalm-assert empty $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isEmpty($value, $message = '')
     {
@@ -547,13 +554,10 @@ public static function isEmpty($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert !empty $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notEmpty($value, $message = '')
     {
@@ -566,13 +570,10 @@ public static function notEmpty($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert null $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function null($value, $message = '')
     {
@@ -585,13 +586,10 @@ public static function null($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert !null $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notNull($value, $message = '')
     {
@@ -603,13 +601,10 @@ public static function notNull($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert true $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function true($value, $message = '')
     {
@@ -622,13 +617,10 @@ public static function true($value, $message = '')
     }
 
     /**
-     * @psalm-pure
      * @psalm-assert false $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function false($value, $message = '')
     {
@@ -641,28 +633,8 @@ public static function false($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert !false $value
-     *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function notFalse($value, $message = '')
-    {
-        if (false === $value) {
-            static::reportInvalidArgument(
-                $message ?: 'Expected a value other than false.'
-            );
-        }
-    }
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function ip($value, $message = '')
     {
@@ -677,8 +649,6 @@ public static function ip($value, $message = '')
     /**
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function ipv4($value, $message = '')
     {
@@ -693,14 +663,12 @@ public static function ipv4($value, $message = '')
     /**
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function ipv6($value, $message = '')
     {
         if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) {
             static::reportInvalidArgument(\sprintf(
-                $message ?: 'Expected a value to be an IPv6. Got: %s',
+                $message ?: 'Expected a value to be an IPv6. Got %s',
                 static::valueToString($value)
             ));
         }
@@ -709,14 +677,12 @@ public static function ipv6($value, $message = '')
     /**
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function email($value, $message = '')
     {
         if (false === \filter_var($value, FILTER_VALIDATE_EMAIL)) {
             static::reportInvalidArgument(\sprintf(
-                $message ?: 'Expected a value to be a valid e-mail address. Got: %s',
+                $message ?: 'Expected a value to be a valid e-mail address. Got %s',
                 static::valueToString($value)
             ));
         }
@@ -727,8 +693,6 @@ public static function email($value, $message = '')
      *
      * @param array  $values
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function uniqueValues(array $values, $message = '')
     {
@@ -750,8 +714,6 @@ public static function uniqueValues(array $values, $message = '')
      * @param mixed  $value
      * @param mixed  $expect
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function eq($value, $expect, $message = '')
     {
@@ -768,8 +730,6 @@ public static function eq($value, $expect, $message = '')
      * @param mixed  $value
      * @param mixed  $expect
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notEq($value, $expect, $message = '')
     {
@@ -782,13 +742,13 @@ public static function notEq($value, $expect, $message = '')
     }
 
     /**
-     * @psalm-pure
+     * @psalm-template ExpectedType
+     * @psalm-param ExpectedType $expect
+     * @psalm-assert =ExpectedType $value
      *
      * @param mixed  $value
      * @param mixed  $expect
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function same($value, $expect, $message = '')
     {
@@ -802,13 +762,9 @@ public static function same($value, $expect, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param mixed  $expect
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notSame($value, $expect, $message = '')
     {
@@ -821,13 +777,9 @@ public static function notSame($value, $expect, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param mixed  $limit
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function greaterThan($value, $limit, $message = '')
     {
@@ -841,13 +793,9 @@ public static function greaterThan($value, $limit, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param mixed  $limit
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function greaterThanEq($value, $limit, $message = '')
     {
@@ -861,13 +809,9 @@ public static function greaterThanEq($value, $limit, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param mixed  $limit
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function lessThan($value, $limit, $message = '')
     {
@@ -881,13 +825,9 @@ public static function lessThan($value, $limit, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param mixed  $limit
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function lessThanEq($value, $limit, $message = '')
     {
@@ -903,14 +843,10 @@ public static function lessThanEq($value, $limit, $message = '')
     /**
      * Inclusive range, so Assert::(3, 3, 5) passes.
      *
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $min
-     * @param mixed  $max
+     * @param mixed $value
+     * @param mixed min
+     * @param mixed max
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function range($value, $min, $max, $message = '')
     {
@@ -925,33 +861,17 @@ public static function range($value, $min, $max, $message = '')
     }
 
     /**
-     * A more human-readable alias of Assert::inArray().
+     * Does strict comparison, so Assert::oneOf(3, ['3']) does not pass the assertion.
      *
-     * @psalm-pure
+     * @psalm-template ExpectedType
+     * @psalm-param array<ExpectedType> $values
+     * @psalm-assert ExpectedType $value
      *
      * @param mixed  $value
      * @param array  $values
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function oneOf($value, array $values, $message = '')
-    {
-        static::inArray($value, $values, $message);
-    }
-
-    /**
-     * Does strict comparison, so Assert::inArray(3, ['3']) does not pass the assertion.
-     *
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param array  $values
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function inArray($value, array $values, $message = '')
     {
         if (!\in_array($value, $values, true)) {
             static::reportInvalidArgument(\sprintf(
@@ -963,13 +883,9 @@ public static function inArray($value, array $values, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $subString
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function contains($value, $subString, $message = '')
     {
@@ -983,13 +899,9 @@ public static function contains($value, $subString, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $subString
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notContains($value, $subString, $message = '')
     {
@@ -1003,12 +915,8 @@ public static function notContains($value, $subString, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notWhitespaceOnly($value, $message = '')
     {
@@ -1021,13 +929,9 @@ public static function notWhitespaceOnly($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $prefix
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function startsWith($value, $prefix, $message = '')
     {
@@ -1041,37 +945,11 @@ public static function startsWith($value, $prefix, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
-     * @param string $prefix
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function notStartsWith($value, $prefix, $message = '')
-    {
-        if (0 === \strpos($value, $prefix)) {
-            static::reportInvalidArgument(\sprintf(
-                $message ?: 'Expected a value not to start with %2$s. Got: %s',
-                static::valueToString($value),
-                static::valueToString($prefix)
-            ));
-        }
-    }
-
-    /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function startsWithLetter($value, $message = '')
     {
-        static::string($value);
-
         $valid = isset($value[0]);
 
         if ($valid) {
@@ -1090,13 +968,9 @@ public static function startsWithLetter($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $suffix
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function endsWith($value, $suffix, $message = '')
     {
@@ -1110,33 +984,9 @@ public static function endsWith($value, $suffix, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
-     * @param string $suffix
+     * @param mixed  $value
+     * @param mixed  $pattern
      * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function notEndsWith($value, $suffix, $message = '')
-    {
-        if ($suffix === \substr($value, -\strlen($suffix))) {
-            static::reportInvalidArgument(\sprintf(
-                $message ?: 'Expected a value not to end with %2$s. Got: %s',
-                static::valueToString($value),
-                static::valueToString($suffix)
-            ));
-        }
-    }
-
-    /**
-     * @psalm-pure
-     *
-     * @param string $value
-     * @param string $pattern
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function regex($value, $pattern, $message = '')
     {
@@ -1149,13 +999,9 @@ public static function regex($value, $pattern, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
-     * @param string $pattern
+     * @param mixed  $value
+     * @param mixed  $pattern
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function notRegex($value, $pattern, $message = '')
     {
@@ -1170,12 +1016,10 @@ public static function notRegex($value, $pattern, $message = '')
     }
 
     /**
-     * @psalm-pure
+     * @psalm-assert !numeric $value
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function unicodeLetters($value, $message = '')
     {
@@ -1190,17 +1034,11 @@ public static function unicodeLetters($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function alpha($value, $message = '')
     {
-        static::string($value);
-
         $locale = \setlocale(LC_CTYPE, 0);
         \setlocale(LC_CTYPE, 'C');
         $valid = !\ctype_alpha($value);
@@ -1215,12 +1053,8 @@ public static function alpha($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function digits($value, $message = '')
     {
@@ -1238,12 +1072,8 @@ public static function digits($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function alnum($value, $message = '')
     {
@@ -1261,13 +1091,8 @@ public static function alnum($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert lowercase-string $value
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function lower($value, $message = '')
     {
@@ -1285,13 +1110,8 @@ public static function lower($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert !lowercase-string $value
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function upper($value, $message = '')
     {
@@ -1309,13 +1129,9 @@ public static function upper($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
-     * @param string $value
-     * @param int    $length
+     * @param mixed  $value
+     * @param mixed  $length
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function length($value, $length, $message = '')
     {
@@ -1331,13 +1147,9 @@ public static function length($value, $length, $message = '')
     /**
      * Inclusive min.
      *
-     * @psalm-pure
-     *
-     * @param string    $value
-     * @param int|float $min
-     * @param string    $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $value
+     * @param mixed  $min
+     * @param string $message
      */
     public static function minLength($value, $min, $message = '')
     {
@@ -1353,13 +1165,9 @@ public static function minLength($value, $min, $message = '')
     /**
      * Inclusive max.
      *
-     * @psalm-pure
-     *
-     * @param string    $value
-     * @param int|float $max
-     * @param string    $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $value
+     * @param mixed  $max
+     * @param string $message
      */
     public static function maxLength($value, $max, $message = '')
     {
@@ -1375,14 +1183,10 @@ public static function maxLength($value, $max, $message = '')
     /**
      * Inclusive , so Assert::lengthBetween('asd', 3, 5); passes the assertion.
      *
-     * @psalm-pure
-     *
-     * @param string    $value
-     * @param int|float $min
-     * @param int|float $max
-     * @param string    $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $value
+     * @param mixed  $min
+     * @param mixed  $max
+     * @param string $message
      */
     public static function lengthBetween($value, $min, $max, $message = '')
     {
@@ -1403,8 +1207,6 @@ public static function lengthBetween($value, $min, $max, $message = '')
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function fileExists($value, $message = '')
     {
@@ -1421,8 +1223,6 @@ public static function fileExists($value, $message = '')
     /**
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function file($value, $message = '')
     {
@@ -1439,8 +1239,6 @@ public static function file($value, $message = '')
     /**
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function directory($value, $message = '')
     {
@@ -1455,10 +1253,8 @@ public static function directory($value, $message = '')
     }
 
     /**
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function readable($value, $message = '')
     {
@@ -1471,10 +1267,8 @@ public static function readable($value, $message = '')
     }
 
     /**
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function writable($value, $message = '')
     {
@@ -1491,8 +1285,6 @@ public static function writable($value, $message = '')
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function classExists($value, $message = '')
     {
@@ -1505,16 +1297,9 @@ public static function classExists($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert class-string<ExpectedType>|ExpectedType $value
-     *
      * @param mixed         $value
      * @param string|object $class
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function subclassOf($value, $class, $message = '')
     {
@@ -1532,8 +1317,6 @@ public static function subclassOf($value, $class, $message = '')
      *
      * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function interfaceExists($value, $message = '')
     {
@@ -1546,16 +1329,9 @@ public static function interfaceExists($value, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $interface
-     * @psalm-assert class-string<ExpectedType> $value
-     *
      * @param mixed  $value
      * @param mixed  $interface
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function implementsInterface($value, $interface, $message = '')
     {
@@ -1569,14 +1345,9 @@ public static function implementsInterface($value, $interface, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-param class-string|object $classOrObject
-     *
      * @param string|object $classOrObject
      * @param mixed         $property
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function propertyExists($classOrObject, $property, $message = '')
     {
@@ -1589,14 +1360,9 @@ public static function propertyExists($classOrObject, $property, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-param class-string|object $classOrObject
-     *
      * @param string|object $classOrObject
      * @param mixed         $property
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function propertyNotExists($classOrObject, $property, $message = '')
     {
@@ -1609,18 +1375,13 @@ public static function propertyNotExists($classOrObject, $property, $message = '
     }
 
     /**
-     * @psalm-pure
-     * @psalm-param class-string|object $classOrObject
-     *
      * @param string|object $classOrObject
      * @param mixed         $method
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function methodExists($classOrObject, $method, $message = '')
     {
-        if (!(\is_string($classOrObject) || \is_object($classOrObject)) || !\method_exists($classOrObject, $method)) {
+        if (!\method_exists($classOrObject, $method)) {
             static::reportInvalidArgument(\sprintf(
                 $message ?: 'Expected the method %s to exist.',
                 static::valueToString($method)
@@ -1629,18 +1390,13 @@ public static function methodExists($classOrObject, $method, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-param class-string|object $classOrObject
-     *
      * @param string|object $classOrObject
      * @param mixed         $method
      * @param string        $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function methodNotExists($classOrObject, $method, $message = '')
     {
-        if ((\is_string($classOrObject) || \is_object($classOrObject)) && \method_exists($classOrObject, $method)) {
+        if (\method_exists($classOrObject, $method)) {
             static::reportInvalidArgument(\sprintf(
                 $message ?: 'Expected the method %s to not exist.',
                 static::valueToString($method)
@@ -1649,13 +1405,9 @@ public static function methodNotExists($classOrObject, $method, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param array      $array
      * @param string|int $key
      * @param string     $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function keyExists($array, $key, $message = '')
     {
@@ -1668,13 +1420,9 @@ public static function keyExists($array, $key, $message = '')
     }
 
     /**
-     * @psalm-pure
-     *
      * @param array      $array
      * @param string|int $key
      * @param string     $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function keyNotExists($array, $key, $message = '')
     {
@@ -1686,57 +1434,28 @@ public static function keyNotExists($array, $key, $message = '')
         }
     }
 
-    /**
-     * Checks if a value is a valid array key (int or string).
-     *
-     * @psalm-pure
-     * @psalm-assert array-key $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function validArrayKey($value, $message = '')
-    {
-        if (!(\is_int($value) || \is_string($value))) {
-            static::reportInvalidArgument(\sprintf(
-                $message ?: 'Expected string or integer. Got: %s',
-                static::typeToString($value)
-            ));
-        }
-    }
-
     /**
      * Does not check if $array is countable, this can generate a warning on php versions after 7.2.
      *
-     * @param Countable|array $array
-     * @param int             $number
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $array
+     * @param mixed  $number
+     * @param string $message
      */
     public static function count($array, $number, $message = '')
     {
         static::eq(
             \count($array),
             $number,
-            \sprintf(
-                $message ?: 'Expected an array to contain %d elements. Got: %d.',
-                $number,
-                \count($array)
-            )
+            $message ?: \sprintf('Expected an array to contain %d elements. Got: %d.', $number, \count($array))
         );
     }
 
     /**
      * Does not check if $array is countable, this can generate a warning on php versions after 7.2.
      *
-     * @param Countable|array $array
-     * @param int|float       $min
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $array
+     * @param mixed  $min
+     * @param string $message
      */
     public static function minCount($array, $min, $message = '')
     {
@@ -1752,11 +1471,9 @@ public static function minCount($array, $min, $message = '')
     /**
      * Does not check if $array is countable, this can generate a warning on php versions after 7.2.
      *
-     * @param Countable|array $array
-     * @param int|float       $max
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $array
+     * @param mixed  $max
+     * @param string $message
      */
     public static function maxCount($array, $max, $message = '')
     {
@@ -1772,12 +1489,10 @@ public static function maxCount($array, $max, $message = '')
     /**
      * Does not check if $array is countable, this can generate a warning on php versions after 7.2.
      *
-     * @param Countable|array $array
-     * @param int|float       $min
-     * @param int|float       $max
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
+     * @param mixed  $array
+     * @param mixed  $min
+     * @param mixed  $max
+     * @param string $message
      */
     public static function countBetween($array, $min, $max, $message = '')
     {
@@ -1794,17 +1509,12 @@ public static function countBetween($array, $min, $max, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert list $array
-     *
      * @param mixed  $array
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isList($array, $message = '')
     {
-        if (!\is_array($array) || $array !== \array_values($array)) {
+        if (!\is_array($array) || !$array || \array_keys($array) !== \range(0, \count($array) - 1)) {
             static::reportInvalidArgument(
                 $message ?: 'Expected list - non-associative array.'
             );
@@ -1812,36 +1522,17 @@ public static function isList($array, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-assert non-empty-list $array
-     *
      * @param mixed  $array
      * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function isNonEmptyList($array, $message = '')
-    {
-        static::isList($array, $message);
-        static::notEmpty($array, $message);
-    }
-
-    /**
-     * @psalm-pure
-     * @psalm-template T
-     * @psalm-param mixed|array<T> $array
-     * @psalm-assert array<string, T> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function isMap($array, $message = '')
     {
         if (
             !\is_array($array) ||
-            \array_keys($array) !== \array_filter(\array_keys($array), '\is_string')
+            !$array ||
+            \array_keys($array) !== \array_filter(\array_keys($array), function ($key) {
+                return \is_string($key);
+            })
         ) {
             static::reportInvalidArgument(
                 $message ?: 'Expected map - associative array with string keys.'
@@ -1850,30 +1541,8 @@ public static function isMap($array, $message = '')
     }
 
     /**
-     * @psalm-pure
-     * @psalm-template T
-     * @psalm-param mixed|array<T> $array
-     * @psalm-assert array<string, T> $array
-     * @psalm-assert !empty $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function isNonEmptyMap($array, $message = '')
-    {
-        static::isMap($array, $message);
-        static::notEmpty($array, $message);
-    }
-
-    /**
-     * @psalm-pure
-     *
-     * @param string $value
+     * @param mixed  $value
      * @param string $message
-     *
-     * @throws InvalidArgumentException
      */
     public static function uuid($value, $message = '')
     {
@@ -1894,13 +1563,9 @@ public static function uuid($value, $message = '')
     }
 
     /**
-     * @psalm-param class-string<Throwable> $class
-     *
-     * @param Closure $expression
-     * @param string  $class
-     * @param string  $message
-     *
-     * @throws InvalidArgumentException
+     * @param Closure       $expression
+     * @param string|object $class
+     * @param string        $message
      */
     public static function throws(Closure $expression, $class = 'Exception', $message = '')
     {
@@ -1929,9 +1594,6 @@ public static function throws(Closure $expression, $class = 'Exception', $messag
         ));
     }
 
-    /**
-     * @throws BadMethodCallException
-     */
     public static function __callStatic($name, $arguments)
     {
         if ('nullOr' === \substr($name, 0, 6)) {
@@ -1989,10 +1651,6 @@ protected static function valueToString($value)
                 return \get_class($value).': '.self::valueToString($value->__toString());
             }
 
-            if ($value instanceof DateTime || $value instanceof DateTimeImmutable) {
-                return \get_class($value).': '.self::valueToString($value->format('c'));
-            }
-
             return \get_class($value);
         }
 
@@ -2032,10 +1690,6 @@ protected static function strlen($value)
 
     /**
      * @param string $message
-     *
-     * @throws InvalidArgumentException
-     *
-     * @psalm-pure this method is not supposed to perform side-effects
      */
     protected static function reportInvalidArgument($message)
     {
diff --git a/vendor/webmozart/assert/src/Mixin.php b/vendor/webmozart/assert/src/Mixin.php
deleted file mode 100644
index 3ad9b2d042..0000000000
--- a/vendor/webmozart/assert/src/Mixin.php
+++ /dev/null
@@ -1,1971 +0,0 @@
-<?php
-
-/**
- * provides type inference and auto-completion for magic static methods of Assert.
- */
-
-namespace Webmozart\Assert;
-
-use ArrayAccess;
-use Closure;
-use Countable;
-use InvalidArgumentException;
-use Throwable;
-
-interface Mixin
-{
-    /**
-     * @psalm-pure
-     * @psalm-assert null|string $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrString($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<string> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allString($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|non-empty-string $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrStringNotEmpty($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<non-empty-string> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allStringNotEmpty($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|int $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrInteger($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<int> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allInteger($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|numeric $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIntegerish($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<numeric> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIntegerish($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|float $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrFloat($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<float> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allFloat($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|numeric $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNumeric($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<numeric> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNumeric($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|int $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNatural($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<int> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNatural($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|bool $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrBoolean($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<bool> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allBoolean($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|scalar $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrScalar($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<scalar> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allScalar($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|object $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrObject($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<object> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allObject($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|resource $value
-     *
-     * @param mixed       $value
-     * @param string|null $type    type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrResource($value, $type = null, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<resource> $value
-     *
-     * @param mixed       $value
-     * @param string|null $type    type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allResource($value, $type = null, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|callable $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsCallable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<callable> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsCallable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|array $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsArray($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<array> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsArray($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|iterable $value
-     *
-     * @deprecated use "isIterable" or "isInstanceOf" instead
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsTraversable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<iterable> $value
-     *
-     * @deprecated use "isIterable" or "isInstanceOf" instead
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsTraversable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|array|ArrayAccess $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsArrayAccessible($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<array|ArrayAccess> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsArrayAccessible($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|countable $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsCountable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<countable> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsCountable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|iterable $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsIterable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<iterable> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsIterable($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert null|ExpectedType $value
-     *
-     * @param mixed         $value
-     * @param string|object $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsInstanceOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert iterable<ExpectedType> $value
-     *
-     * @param mixed         $value
-     * @param string|object $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsInstanceOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     *
-     * @param mixed         $value
-     * @param string|object $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotInstanceOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     *
-     * @param mixed         $value
-     * @param string|object $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotInstanceOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param array<class-string> $classes
-     *
-     * @param mixed                $value
-     * @param array<object|string> $classes
-     * @param string               $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsInstanceOfAny($value, $classes, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param array<class-string> $classes
-     *
-     * @param mixed                $value
-     * @param array<object|string> $classes
-     * @param string               $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsInstanceOfAny($value, $classes, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert null|ExpectedType|class-string<ExpectedType> $value
-     *
-     * @param null|object|string $value
-     * @param string             $class
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsAOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert iterable<ExpectedType|class-string<ExpectedType>> $value
-     *
-     * @param iterable<object|string> $value
-     * @param string                  $class
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsAOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template UnexpectedType of object
-     * @psalm-param class-string<UnexpectedType> $class
-     *
-     * @param null|object|string $value
-     * @param string             $class
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsNotA($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template UnexpectedType of object
-     * @psalm-param class-string<UnexpectedType> $class
-     *
-     * @param iterable<object|string> $value
-     * @param string                  $class
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsNotA($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param array<class-string> $classes
-     *
-     * @param null|object|string $value
-     * @param string[]           $classes
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsAnyOf($value, $classes, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param array<class-string> $classes
-     *
-     * @param iterable<object|string> $value
-     * @param string[]                $classes
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsAnyOf($value, $classes, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert empty $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsEmpty($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<empty> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsEmpty($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotEmpty($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotEmpty($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<null> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNull($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotNull($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|true $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrTrue($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<true> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allTrue($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|false $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrFalse($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<false> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allFalse($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotFalse($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotFalse($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIp($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIp($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIpv4($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIpv4($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIpv6($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIpv6($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrEmail($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allEmail($value, $message = '');
-
-    /**
-     * @param null|array $values
-     * @param string     $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrUniqueValues($values, $message = '');
-
-    /**
-     * @param iterable<array> $values
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allUniqueValues($values, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrEq($value, $expect, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allEq($value, $expect, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotEq($value, $expect, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotEq($value, $expect, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrSame($value, $expect, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allSame($value, $expect, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotSame($value, $expect, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $expect
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotSame($value, $expect, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrGreaterThan($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allGreaterThan($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrGreaterThanEq($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allGreaterThanEq($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrLessThan($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allLessThan($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrLessThanEq($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $limit
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allLessThanEq($value, $limit, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $min
-     * @param mixed  $max
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrRange($value, $min, $max, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param mixed  $min
-     * @param mixed  $max
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allRange($value, $min, $max, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param array  $values
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrOneOf($value, $values, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param array  $values
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allOneOf($value, $values, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param array  $values
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrInArray($value, $values, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param array  $values
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allInArray($value, $values, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $subString
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrContains($value, $subString, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $subString
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allContains($value, $subString, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $subString
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotContains($value, $subString, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $subString
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotContains($value, $subString, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotWhitespaceOnly($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotWhitespaceOnly($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $prefix
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrStartsWith($value, $prefix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $prefix
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allStartsWith($value, $prefix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $prefix
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotStartsWith($value, $prefix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $prefix
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotStartsWith($value, $prefix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrStartsWithLetter($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allStartsWithLetter($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $suffix
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrEndsWith($value, $suffix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $suffix
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allEndsWith($value, $suffix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $suffix
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotEndsWith($value, $suffix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $suffix
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotEndsWith($value, $suffix, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $pattern
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrRegex($value, $pattern, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $pattern
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allRegex($value, $pattern, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $pattern
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrNotRegex($value, $pattern, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $pattern
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allNotRegex($value, $pattern, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrUnicodeLetters($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allUnicodeLetters($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrAlpha($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allAlpha($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrDigits($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allDigits($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrAlnum($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allAlnum($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|lowercase-string $value
-     *
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrLower($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<lowercase-string> $value
-     *
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allLower($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrUpper($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allUpper($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param int         $length
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrLength($value, $length, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param int              $length
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allLength($value, $length, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param int|float   $min
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrMinLength($value, $min, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param int|float        $min
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allMinLength($value, $min, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param int|float   $max
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrMaxLength($value, $max, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param int|float        $max
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allMaxLength($value, $max, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param int|float   $min
-     * @param int|float   $max
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrLengthBetween($value, $min, $max, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param int|float        $min
-     * @param int|float        $max
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allLengthBetween($value, $min, $max, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrFileExists($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allFileExists($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrFile($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allFile($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrDirectory($value, $message = '');
-
-    /**
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allDirectory($value, $message = '');
-
-    /**
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrReadable($value, $message = '');
-
-    /**
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allReadable($value, $message = '');
-
-    /**
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrWritable($value, $message = '');
-
-    /**
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allWritable($value, $message = '');
-
-    /**
-     * @psalm-assert null|class-string $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrClassExists($value, $message = '');
-
-    /**
-     * @psalm-assert iterable<class-string> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allClassExists($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert null|class-string<ExpectedType>|ExpectedType $value
-     *
-     * @param mixed         $value
-     * @param string|object $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrSubclassOf($value, $class, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $class
-     * @psalm-assert iterable<class-string<ExpectedType>|ExpectedType> $value
-     *
-     * @param mixed         $value
-     * @param string|object $class
-     * @param string        $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allSubclassOf($value, $class, $message = '');
-
-    /**
-     * @psalm-assert null|class-string $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrInterfaceExists($value, $message = '');
-
-    /**
-     * @psalm-assert iterable<class-string> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allInterfaceExists($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $interface
-     * @psalm-assert null|class-string<ExpectedType> $value
-     *
-     * @param mixed  $value
-     * @param mixed  $interface
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrImplementsInterface($value, $interface, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template ExpectedType of object
-     * @psalm-param class-string<ExpectedType> $interface
-     * @psalm-assert iterable<class-string<ExpectedType>> $value
-     *
-     * @param mixed  $value
-     * @param mixed  $interface
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allImplementsInterface($value, $interface, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param null|class-string|object $classOrObject
-     *
-     * @param null|string|object $classOrObject
-     * @param mixed              $property
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrPropertyExists($classOrObject, $property, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param iterable<class-string|object> $classOrObject
-     *
-     * @param iterable<string|object> $classOrObject
-     * @param mixed                   $property
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allPropertyExists($classOrObject, $property, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param null|class-string|object $classOrObject
-     *
-     * @param null|string|object $classOrObject
-     * @param mixed              $property
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrPropertyNotExists($classOrObject, $property, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param iterable<class-string|object> $classOrObject
-     *
-     * @param iterable<string|object> $classOrObject
-     * @param mixed                   $property
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allPropertyNotExists($classOrObject, $property, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param null|class-string|object $classOrObject
-     *
-     * @param null|string|object $classOrObject
-     * @param mixed              $method
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrMethodExists($classOrObject, $method, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param iterable<class-string|object> $classOrObject
-     *
-     * @param iterable<string|object> $classOrObject
-     * @param mixed                   $method
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allMethodExists($classOrObject, $method, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param null|class-string|object $classOrObject
-     *
-     * @param null|string|object $classOrObject
-     * @param mixed              $method
-     * @param string             $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrMethodNotExists($classOrObject, $method, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-param iterable<class-string|object> $classOrObject
-     *
-     * @param iterable<string|object> $classOrObject
-     * @param mixed                   $method
-     * @param string                  $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allMethodNotExists($classOrObject, $method, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|array $array
-     * @param string|int $key
-     * @param string     $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrKeyExists($array, $key, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<array> $array
-     * @param string|int      $key
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allKeyExists($array, $key, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|array $array
-     * @param string|int $key
-     * @param string     $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrKeyNotExists($array, $key, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<array> $array
-     * @param string|int      $key
-     * @param string          $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allKeyNotExists($array, $key, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|array-key $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrValidArrayKey($value, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<array-key> $value
-     *
-     * @param mixed  $value
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allValidArrayKey($value, $message = '');
-
-    /**
-     * @param null|Countable|array $array
-     * @param int                  $number
-     * @param string               $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrCount($array, $number, $message = '');
-
-    /**
-     * @param iterable<Countable|array> $array
-     * @param int                       $number
-     * @param string                    $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allCount($array, $number, $message = '');
-
-    /**
-     * @param null|Countable|array $array
-     * @param int|float            $min
-     * @param string               $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrMinCount($array, $min, $message = '');
-
-    /**
-     * @param iterable<Countable|array> $array
-     * @param int|float                 $min
-     * @param string                    $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allMinCount($array, $min, $message = '');
-
-    /**
-     * @param null|Countable|array $array
-     * @param int|float            $max
-     * @param string               $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrMaxCount($array, $max, $message = '');
-
-    /**
-     * @param iterable<Countable|array> $array
-     * @param int|float                 $max
-     * @param string                    $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allMaxCount($array, $max, $message = '');
-
-    /**
-     * @param null|Countable|array $array
-     * @param int|float            $min
-     * @param int|float            $max
-     * @param string               $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrCountBetween($array, $min, $max, $message = '');
-
-    /**
-     * @param iterable<Countable|array> $array
-     * @param int|float                 $min
-     * @param int|float                 $max
-     * @param string                    $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allCountBetween($array, $min, $max, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|list $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsList($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<list> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsList($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert null|non-empty-list $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsNonEmptyList($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-assert iterable<non-empty-list> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsNonEmptyList($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template T
-     * @psalm-param null|mixed|array<T> $array
-     * @psalm-assert null|array<string, T> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsMap($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template T
-     * @psalm-param iterable<mixed|array<T>> $array
-     * @psalm-assert iterable<array<string, T>> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsMap($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template T
-     * @psalm-param null|mixed|array<T> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrIsNonEmptyMap($array, $message = '');
-
-    /**
-     * @psalm-pure
-     * @psalm-template T
-     * @psalm-param iterable<mixed|array<T>> $array
-     *
-     * @param mixed  $array
-     * @param string $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allIsNonEmptyMap($array, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param null|string $value
-     * @param string      $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrUuid($value, $message = '');
-
-    /**
-     * @psalm-pure
-     *
-     * @param iterable<string> $value
-     * @param string           $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allUuid($value, $message = '');
-
-    /**
-     * @psalm-param class-string<Throwable> $class
-     *
-     * @param null|Closure $expression
-     * @param string       $class
-     * @param string       $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function nullOrThrows($expression, $class = 'Exception', $message = '');
-
-    /**
-     * @psalm-param class-string<Throwable> $class
-     *
-     * @param iterable<Closure> $expression
-     * @param string            $class
-     * @param string            $message
-     *
-     * @throws InvalidArgumentException
-     */
-    public static function allThrows($expression, $class = 'Exception', $message = '');
-}
diff --git a/web/modules/simplesamlphp_auth/composer.json b/web/modules/simplesamlphp_auth/composer.json
index 0ed7d1f901..51bd14a854 100644
--- a/web/modules/simplesamlphp_auth/composer.json
+++ b/web/modules/simplesamlphp_auth/composer.json
@@ -6,6 +6,7 @@
     "homepage": "https://www.drupal.org/project/simplesamlphp_auth",
     "require": {
         "drupal/externalauth": "^1.1",
-        "simplesamlphp/simplesamlphp": "~1.17.2"
+        "simplesamlphp/simplesamlphp": "^1.18.2",
+        "drupal/core": "^8.7|^9.0"
     }
 }
diff --git a/web/modules/simplesamlphp_auth/config/install/simplesamlphp_auth.settings.yml b/web/modules/simplesamlphp_auth/config/install/simplesamlphp_auth.settings.yml
index 3f6e2ee62d..13620aaa9b 100644
--- a/web/modules/simplesamlphp_auth/config/install/simplesamlphp_auth.settings.yml
+++ b/web/modules/simplesamlphp_auth/config/install/simplesamlphp_auth.settings.yml
@@ -1,10 +1,10 @@
 langcode: en
-default_langcode: en
 activate: false
 mail_attr: 'mail'
 unique_id: 'eduPersonPrincipalName'
 user_name: 'eduPersonPrincipalName'
 auth_source: 'default-sp'
+login_link_show: true
 login_link_display_name: 'Federated login'
 header_no_cache: false
 role:
@@ -14,7 +14,7 @@ register_users: true
 allow:
   set_drupal_pwd: true
   default_login: true
-  default_login_roles: []
+  default_login_roles: {  }
   default_login_users: '1'
 logout_goto_url:
 user_register_original:
diff --git a/web/modules/simplesamlphp_auth/config/schema/simplesamlphp_auth.schema.yml b/web/modules/simplesamlphp_auth/config/schema/simplesamlphp_auth.schema.yml
index 644ea58a9f..6c77840888 100644
--- a/web/modules/simplesamlphp_auth/config/schema/simplesamlphp_auth.schema.yml
+++ b/web/modules/simplesamlphp_auth/config/schema/simplesamlphp_auth.schema.yml
@@ -4,9 +4,6 @@ simplesamlphp_auth.settings:
   type: config_object
   label: 'SimpleSAMLphp Auth Settings'
   mapping:
-    default_langcode:
-      type: string
-      label: 'Site default language code'
     activate:
       type: boolean
       label: 'Activate authentication via SimpleSAMLphp'
@@ -16,6 +13,9 @@ simplesamlphp_auth.settings:
     login_link_display_name:
       type: label
       label: 'Federated Log In Link Display Name'
+    login_link_show:
+      type: boolean
+      label: 'Display a link to the Federated Login page on the user login form'
     user_name:
       type: string
       label: 'SimpleSAMLphp attribute to be used as username for the user'
diff --git a/web/modules/simplesamlphp_auth/simplesamlphp_auth.api.php b/web/modules/simplesamlphp_auth/simplesamlphp_auth.api.php
index 024cd1a1a7..60a6555e9b 100644
--- a/web/modules/simplesamlphp_auth/simplesamlphp_auth.api.php
+++ b/web/modules/simplesamlphp_auth/simplesamlphp_auth.api.php
@@ -77,7 +77,7 @@ function hook_simplesamlphp_auth_allow_login($attributes) {
  * @param \Drupal\user\UserInterface $account
  *   The pre-existing Drupal user to be SAML-enabled.
  */
-function hook_simplesamphp_auth_account_authname_alter(&$authname, \Drupal\user\UserInterface $account) {
+function hook_simplesamlphp_auth_account_authname_alter(&$authname, \Drupal\user\UserInterface $account) {
   $authname = $account->mail;
 }
 
@@ -102,7 +102,7 @@ function hook_simplesamphp_auth_account_authname_alter(&$authname, \Drupal\user\
  */
 function hook_simplesamlphp_auth_existing_user($attributes) {
   $saml_mail = $attributes['mail'];
-  $existing_users = \Drupal::service('entity.manager')->getStorage('user')->loadByProperties(['mail' => $saml_mail]);
+  $existing_users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties(['mail' => $saml_mail]);
   if ($existing_users) {
     $existing_user = is_array($existing_users) ? reset($existing_users) : FALSE;
     if ($existing_user) {
diff --git a/web/modules/simplesamlphp_auth/simplesamlphp_auth.info.yml b/web/modules/simplesamlphp_auth/simplesamlphp_auth.info.yml
index f3685f5c6a..bdada5b9e7 100644
--- a/web/modules/simplesamlphp_auth/simplesamlphp_auth.info.yml
+++ b/web/modules/simplesamlphp_auth/simplesamlphp_auth.info.yml
@@ -1,14 +1,14 @@
 name: SimpleSAMLphp Authentication
 type: module
 description: Allows users to authenticate to a remote SAML identity provider (IdP) via a locally configured SimpleSAMLphp service point (SP).
-# core: 8.x
+core: 8.x
+core_version_requirement: ^8 || ^9
 configure: simplesamlphp_auth.admin_settings
 dependencies:
  - drupal:user
  - externalauth:externalauth
 
-# Information added by Drupal.org packaging script on 2019-08-06
-version: '8.x-3.1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-01-30
+version: '8.x-3.2'
 project: 'simplesamlphp_auth'
-datestamp: 1565118487
+datestamp: 1580423955
diff --git a/web/modules/simplesamlphp_auth/simplesamlphp_auth.install b/web/modules/simplesamlphp_auth/simplesamlphp_auth.install
index 897fc9be54..561cf5b851 100644
--- a/web/modules/simplesamlphp_auth/simplesamlphp_auth.install
+++ b/web/modules/simplesamlphp_auth/simplesamlphp_auth.install
@@ -51,7 +51,7 @@ function simplesamlphp_auth_requirements($phase) {
     simplesamlphp_auth_check_library();
     if (!class_exists('SimpleSAML\Configuration')) {
       $requirements['simplesamlphp_library'] = [
-        'description' => t('SimpleSAMLphp module requires the simplesamlphp library, version 1.17.2 or later. See README file for installation instructions.'),
+        'description' => t('SimpleSAMLphp module requires the simplesamlphp library, version 1.18.2 or later. See README file for installation instructions.'),
         'severity' => REQUIREMENT_ERROR,
       ];
     }
@@ -96,3 +96,21 @@ function simplesamlphp_auth_update_8001() {
 function simplesamlphp_auth_update_8002() {
   \Drupal::service('router.builder')->rebuild();
 }
+
+/**
+ * Provide a default value for the new login_link_show configuration option.
+ */
+function simplesamlphp_auth_update_8301() {
+  \Drupal::configFactory()->getEditable('simplesamlphp_auth.settings')
+    ->set('login_link_show', TRUE)
+    ->save(TRUE);
+}
+
+/**
+ * Remove Site default language from simplesamlphp_auth configuration.
+ */
+function simplesamlphp_auth_update_8302() {
+  \Drupal::configFactory()->getEditable('simplesamlphp_auth.settings')
+    ->clear('default_langcode')
+    ->save(TRUE);
+}
diff --git a/web/modules/simplesamlphp_auth/simplesamlphp_auth.module b/web/modules/simplesamlphp_auth/simplesamlphp_auth.module
index dba7d35293..1f4783cbbe 100644
--- a/web/modules/simplesamlphp_auth/simplesamlphp_auth.module
+++ b/web/modules/simplesamlphp_auth/simplesamlphp_auth.module
@@ -29,6 +29,8 @@
  *         notices.
  */
 
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Session\AnonymousUserSession;
 use Drupal\Core\Url;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -48,19 +50,22 @@ function simplesamlphp_auth_help($route_name) {
 /**
  * Implements hook_user_logout().
  */
-function simplesamlphp_auth_user_logout($account) {
-
+function simplesamlphp_auth_user_logout(AccountInterface $account) {
   $logout_url = \Drupal::config('simplesamlphp_auth.settings')->get('logout_goto_url');
+  /** @var \Drupal\simplesamlphp_auth\Service\SimplesamlphpAuthManager $simplesaml */
   $simplesaml = \Drupal::service('simplesamlphp_auth.manager');
+  $session = \Drupal::service('session_manager');
 
   // Only interfere if this user was logged in through simplesaml.
-  if ($simplesaml->isAuthenticated()) {
+  if ($simplesaml->isActivated() && $simplesaml->isAuthenticated()) {
     // Have to destroy the session here as some configurations of
     // SimpleSAMLphp_auth can create infinite loops. By removing IdP auth before
     // Drupal auth, checks for local authentication will trigger before the
     // session is destroyed naturally. We must therefore destroy the session
     // manually here.
-    session_destroy();
+    // Copied from user.module method user_logout().
+    $session->destroy();
+    $account->setAccount(new AnonymousUserSession());
 
     if ($logout_url) {
       $simplesaml->logout($logout_url);
@@ -108,12 +113,12 @@ function simplesamlphp_auth_form_user_form_alter(&$form, FormStateInterface $for
 
   if ($saml_enabled) {
     $form['simplesamlphp_auth_user_enable']['#default_value'] = TRUE;
-    $form['account']['current_pass']['#access'] = FALSE;
 
     // If the user is a simplesamlphp_auth user and is NOT allowed to set their
     // Drupal password, remove the fields from the form.
     $config = \Drupal::config('simplesamlphp_auth.settings');
     if (!$config->get('allow.set_drupal_pwd')) {
+      $form['account']['current_pass']['#access'] = FALSE;
       $form['account']['pass']['#access'] = FALSE;
     }
   }
@@ -165,7 +170,7 @@ function simplesamlphp_auth_form_user_login_form_alter(&$form, FormStateInterfac
   // Return without executing if the functionality is not enabled.
   $config = \Drupal::config('simplesamlphp_auth.settings');
   \Drupal::service('renderer')->addCacheableDependency($form, $config);
-  if (!$config->get('activate')) {
+  if (!$config->get('activate') || !$config->get('login_link_show')) {
     return;
   }
 
diff --git a/web/modules/simplesamlphp_auth/simplesamlphp_auth.routing.yml b/web/modules/simplesamlphp_auth/simplesamlphp_auth.routing.yml
index 99b4401570..5fe63b317e 100644
--- a/web/modules/simplesamlphp_auth/simplesamlphp_auth.routing.yml
+++ b/web/modules/simplesamlphp_auth/simplesamlphp_auth.routing.yml
@@ -4,21 +4,21 @@ simplesamlphp_auth.admin_settings:
     _title: 'SimpleSAMLphp Auth Settings'
     _form: '\Drupal\simplesamlphp_auth\Form\BasicSettingsForm'
   requirements:
-    _permission: 'administer simpleSAMLphp authentication'
+    _permission: 'administer simplesamlphp authentication'
 simplesamlphp_auth.admin_settings_local:
   path: '/admin/config/people/simplesamlphp_auth/local'
   defaults:
     _title: 'Local authentication'
     _form: '\Drupal\simplesamlphp_auth\Form\LocalSettingsForm'
   requirements:
-    _permission: 'administer simpleSAMLphp authentication'
+    _permission: 'administer simplesamlphp authentication'
 simplesamlphp_auth.admin_settings_sync:
   path: '/admin/config/people/simplesamlphp_auth/sync'
   defaults:
     _title: 'User info and syncing'
     _form: '\Drupal\simplesamlphp_auth\Form\SyncingSettingsForm'
   requirements:
-    _permission: 'administer simpleSAMLphp authentication'
+    _permission: 'administer simplesamlphp authentication'
 simplesamlphp_auth.saml_login:
   path: '/saml_login'
   defaults:
diff --git a/web/modules/simplesamlphp_auth/src/Form/BasicSettingsForm.php b/web/modules/simplesamlphp_auth/src/Form/BasicSettingsForm.php
index dd81df9cb9..ed476290e4 100644
--- a/web/modules/simplesamlphp_auth/src/Form/BasicSettingsForm.php
+++ b/web/modules/simplesamlphp_auth/src/Form/BasicSettingsForm.php
@@ -53,7 +53,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#default_value' => $config->get('login_link_display_name'),
       '#description' => $this->t('Text to display as the link to the external federated login page.'),
     ];
-
+    $form['basic']['login_link_show'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Display a link to the Federated Login page on the user login form'),
+      '#default_value' => $config->get('login_link_show'),
+    ];
     $form['basic']['header_no_cache'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Use Header with: Cache-Control: no-cache'),
@@ -116,6 +120,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     $config->set('activate', $form_state->getValue('activate'));
     $config->set('auth_source', $form_state->getValue('auth_source'));
     $config->set('login_link_display_name', $form_state->getValue('login_link_display_name'));
+    $config->set('login_link_show', $form_state->getValue('login_link_show'));
     $config->set('debug', $form_state->getValue('debug'));
     $config->set('secure', $form_state->getValue('secure'));
     $config->set('httponly', $form_state->getValue('httponly'));
diff --git a/web/modules/simplesamlphp_auth/src/Form/LocalSettingsForm.php b/web/modules/simplesamlphp_auth/src/Form/LocalSettingsForm.php
index 8e341b28dc..ae3294047c 100644
--- a/web/modules/simplesamlphp_auth/src/Form/LocalSettingsForm.php
+++ b/web/modules/simplesamlphp_auth/src/Form/LocalSettingsForm.php
@@ -81,7 +81,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
 
     $config->set('allow.default_login', $form_state->getValue('allow_default_login'));
     $config->set('allow.set_drupal_pwd', $form_state->getValue('allow_set_drupal_pwd'));
-    $config->set('allow.default_login_roles', $form_state->getValue('allow_default_login_roles'));
+    $config->set('allow.default_login_roles', array_filter($form_state->getValue('allow_default_login_roles')));
     $config->set('allow.default_login_users', $form_state->getValue('allow_default_login_users'));
     $config->set('logout_goto_url', $form_state->getValue('logout_goto_url'));
     $config->save();
diff --git a/web/modules/simplesamlphp_auth/src/Service/SimplesamlphpDrupalAuth.php b/web/modules/simplesamlphp_auth/src/Service/SimplesamlphpDrupalAuth.php
index 79d62f8f8f..de367cc8c9 100644
--- a/web/modules/simplesamlphp_auth/src/Service/SimplesamlphpDrupalAuth.php
+++ b/web/modules/simplesamlphp_auth/src/Service/SimplesamlphpDrupalAuth.php
@@ -4,13 +4,13 @@
 
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\user\UserInterface;
 use Drupal\Core\Session\AccountInterface;
-use Psr\Log\LoggerInterface;
 use Drupal\externalauth\ExternalAuthInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\user\UserInterface;
+use Psr\Log\LoggerInterface;
 
 /**
  * Service to link SimpleSAMLphp authentication with Drupal users.
@@ -124,7 +124,7 @@ public function externalLoginRegister($authname) {
     if ($account) {
       // Determine if roles should be evaluated upon login.
       if ($this->config->get('role.eval_every_time')) {
-        $this->roleMatchAdd($account);
+        $this->roleMatchSync($account);
       }
     }
 
@@ -146,19 +146,6 @@ public function externalLoginRegister($authname) {
   public function externalRegister($authname) {
     $account = FALSE;
 
-    // First we check the admin settings for simpleSAMLphp and find out if we
-    // are allowed to register users.
-    if (!$this->config->get('register_users')) {
-
-      // We're not allowed to register new users on the site through simpleSAML.
-      // We let the user know about this and redirect to the user/login page.
-      $this->messenger
-        ->addMessage($this->t('We are sorry. While you have successfully authenticated, you are not yet entitled to access this site. Please ask the site administrator to provision access for you.'), 'status');
-      $this->simplesamlAuth->logout(base_path());
-
-      return FALSE;
-    }
-
     // It's possible that a user with their username set to this authname
     // already exists in the Drupal database.
     $existing_user = $this->entityTypeManager->getStorage('user')->loadByProperties(['name' => $authname]);
@@ -210,6 +197,19 @@ public function externalRegister($authname) {
           }
         }
       }
+
+      // Check the admin settings for simpleSAMLphp and find out if we
+      // are allowed to register users.
+      if (!$this->config->get('register_users')) {
+        // We're not allowed to register new users on the site through
+        // simpleSAML. We let the user know about this and redirect to the
+        // user/login page.
+        $this->messenger
+          ->addMessage($this->t('We are sorry. While you have successfully authenticated, you are not yet entitled to access this site. Please ask the site administrator to provision access for you.'), 'status');
+        $this->simplesamlAuth->logout(base_path());
+
+        return FALSE;
+      }
     }
 
     if (!$account) {
@@ -249,7 +249,7 @@ public function synchronizeUserAttributes(AccountInterface $account, $force = FA
         $existing = FALSE;
         $account_search = $this->entityTypeManager->getStorage('user')->loadByProperties(['name' => $name]);
         if ($existing_account = reset($account_search)) {
-          if ($this->currentUser->id() != $existing_account->id()) {
+          if ($account->id() != $existing_account->id()) {
             $existing = TRUE;
             $logger_params = [
               '%username' => $name, '%new_uid' => $this->currentUser->id(),
@@ -287,25 +287,43 @@ public function synchronizeUserAttributes(AccountInterface $account, $force = FA
   }
 
   /**
-   * Adds roles to user accounts.
+   * Synchronizes (adds/removes) user account roles.
    *
    * @param \Drupal\user\UserInterface $account
-   *   The Drupal user to add roles to.
+   *   The Drupal user to sync roles for.
    */
-  public function roleMatchAdd(UserInterface $account) {
+  public function roleMatchSync(UserInterface $account) {
     // Get matching roles based on retrieved SimpleSAMLphp attributes.
     $matching_roles = $this->getMatchingRoles();
+    // Get user's current roles, excluding locked roles (e.g. Authenticated).
+    $current_roles = $account->getRoles(TRUE);
+    // Set boolean to only update account when needed.
+    $account_updated = FALSE;
+
+    // Remove non-locked roles not mapped to the user via SAML.
+    foreach (array_diff($current_roles, $matching_roles) as $role_id) {
+      if ($this->config->get('debug')) {
+        $this->logger->debug('Removing role %role from user %name', [
+          '%role' => $role_id,
+          '%name' => $account->getAccountName(),
+        ]);
+      }
+      $account->removeRole($role_id);
+      $account_updated = TRUE;
+    }
 
-    if ($matching_roles) {
-      foreach ($matching_roles as $role_id) {
-        if ($this->config->get('debug')) {
-          $this->logger->debug('Adding role %role to user %name', [
-            '%role' => $role_id,
-            '%name' => $account->getAccountName(),
-          ]);
-        }
-        $account->addRole($role_id);
+    // Add roles mapped to the user via SAML.
+    foreach (array_diff($matching_roles, $current_roles) as $role_id) {
+      if ($this->config->get('debug')) {
+        $this->logger->debug('Adding role %role to user %name', [
+          '%role' => $role_id,
+          '%name' => $account->getAccountName(),
+        ]);
       }
+      $account->addRole($role_id);
+      $account_updated = TRUE;
+    }
+    if ($account_updated) {
       $account->save();
     }
   }
diff --git a/web/modules/simplesamlphp_auth/tests/simplesamlphp_auth_test/simplesamlphp_auth_test.info.yml b/web/modules/simplesamlphp_auth/tests/simplesamlphp_auth_test/simplesamlphp_auth_test.info.yml
index 30a7fa8209..4f88bcba9e 100644
--- a/web/modules/simplesamlphp_auth/tests/simplesamlphp_auth_test/simplesamlphp_auth_test.info.yml
+++ b/web/modules/simplesamlphp_auth/tests/simplesamlphp_auth_test/simplesamlphp_auth_test.info.yml
@@ -1,13 +1,12 @@
 name: 'SimpleSAMLPHP Authentication Test module'
 type: module
 description: 'Support module for SimpleSAMLPHP Authentication tests'
-# core: 8.x
+core: 8.x
 dependencies:
   - drupal:user
 hidden: true
 
-# Information added by Drupal.org packaging script on 2019-08-06
-version: '8.x-3.1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-01-30
+version: '8.x-3.2'
 project: 'simplesamlphp_auth'
-datestamp: 1565118487
+datestamp: 1580423955
diff --git a/web/modules/simplesamlphp_auth/tests/src/Functional/SimplesamlphpAuthTest.php b/web/modules/simplesamlphp_auth/tests/src/Functional/SimplesamlphpAuthTest.php
index b3c18a0352..ef5dece1a2 100644
--- a/web/modules/simplesamlphp_auth/tests/src/Functional/SimplesamlphpAuthTest.php
+++ b/web/modules/simplesamlphp_auth/tests/src/Functional/SimplesamlphpAuthTest.php
@@ -11,6 +11,11 @@
  */
 class SimplesamlphpAuthTest extends BrowserTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'classy';
+
   /**
    * Modules to enable for this test.
    *
@@ -29,6 +34,13 @@ class SimplesamlphpAuthTest extends BrowserTestBase {
    */
   protected $adminUser;
 
+  /**
+   * An authenticated user.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $authenticatedUser;
+
   /**
    * {@inheritdoc}
    */
@@ -38,7 +50,10 @@ public function setUp() {
       'access administration pages',
       'administer users',
       'administer blocks',
+      'administer simplesamlphp authentication',
     ]);
+    $this->authenticatedUser = $this->drupalCreateUser();
+    $this->drupalPlaceBlock('page_title_block');
 
     // Configure SimpleSAMLphp for testing purposes.
     $this->config('simplesamlphp_auth.settings')
@@ -47,7 +62,7 @@ public function setUp() {
       ->set('unique_id', 'uid')
       ->set('user_name', 'displayName')
       ->set('login_link_display_name', "Federated test login")
-      ->set('allow.default_login_users', $this->adminUser->id())
+      ->set('allow.default_login_users', $this->adminUser->id() . ',' . $this->authenticatedUser->id())
       ->save();
   }
 
@@ -60,6 +75,11 @@ public function testFederatedLoginLink() {
     $this->drupalGet('user/login');
     $this->assertSession()->pageTextContains(t('Federated test login'));
 
+    // Check the auth link is not displayed when disabled in configuration.
+    $this->config('simplesamlphp_auth.settings')->set('login_link_show', FALSE)->save();
+    $this->drupalGet('user/login');
+    $this->assertSession()->pageTextNotContains(t('Federated test login'));
+
     $this->drupalLogin($this->adminUser);
     $default_theme = $this->config('system.theme')->get('default');
 
@@ -82,7 +102,45 @@ public function testFederatedLoginLink() {
 
     $this->drupalGet('user/login');
     $this->assertSession()->pageTextNotContains(t('Federated test login'));
+  }
+
+  /**
+   * Tests access to the administrative UI pages.
+   */
+  public function testAdminPageAccess() {
+    $paths = [
+      'admin/config/people/simplesamlphp_auth',
+      'admin/config/people/simplesamlphp_auth/local',
+      'admin/config/people/simplesamlphp_auth/sync',
+    ];
+
+    // Anonymous user.
+    foreach ($paths as $path) {
+      $this->drupalGet($path);
+      $this->assertSession()->statusCodeEquals(403);
+    }
+
+    // Authenticated user.
+    $this->drupalLogin($this->authenticatedUser);
+    foreach ($paths as $path) {
+      $this->drupalGet($path);
+      $this->assertSession()->statusCodeEquals(403);
+    }
+    $this->drupalLogout();
+
+    $this->drupalLogin($this->adminUser);
+
+    $this->drupalGet('admin/config/people/simplesamlphp_auth');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->elementContains('css', 'h1', 'SimpleSAMLphp Auth Settings');
+
+    $this->drupalGet('admin/config/people/simplesamlphp_auth/local');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->elementContains('css', 'h1', 'Local authentication');
 
+    $this->drupalGet('admin/config/people/simplesamlphp_auth/sync');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->elementContains('css', 'h1', 'User info and syncing');
   }
 
 }
diff --git a/web/modules/simplesamlphp_auth/tests/src/Unit/Service/SimplesamlphpDrupalAuthTest.php b/web/modules/simplesamlphp_auth/tests/src/Unit/Service/SimplesamlphpDrupalAuthTest.php
index b6f80ab5a3..8b3a1a1df5 100644
--- a/web/modules/simplesamlphp_auth/tests/src/Unit/Service/SimplesamlphpDrupalAuthTest.php
+++ b/web/modules/simplesamlphp_auth/tests/src/Unit/Service/SimplesamlphpDrupalAuthTest.php
@@ -26,11 +26,11 @@ class SimplesamlphpDrupalAuthTest extends UnitTestCase {
   protected $simplesaml;
 
   /**
-   * The mocked Entity Manager.
+   * The mocked entity type manager.
    *
-   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
    */
-  protected $entityManager;
+  protected $entityTypeManager;
 
   /**
    * The mocked logger instance.
@@ -80,7 +80,7 @@ class SimplesamlphpDrupalAuthTest extends UnitTestCase {
   protected function setUp() {
     parent::setUp();
 
-    $this->entityManager = $this->createMock('\Drupal\Core\Entity\EntityManagerInterface');
+    $this->entityTypeManager = $this->createMock('\Drupal\Core\Entity\EntityTypeManagerInterface');
 
     $this->logger = $this->getMockBuilder('\Psr\Log\LoggerInterface')
       ->disableOriginalConstructor()
@@ -134,7 +134,7 @@ public function testExternalLoginRegister() {
       ->setConstructorArgs([
         $this->simplesaml,
         $this->configFactory,
-        $this->entityManager,
+        $this->entityTypeManager,
         $this->logger,
         $this->externalauth,
         $this->entityAccount,
@@ -158,7 +158,7 @@ public function testExternalLoginRegister() {
    * Tests external login with role matching.
    *
    * @covers ::externalLoginRegister
-   * @covers ::roleMatchAdd
+   * @covers ::roleMatchSync
    * @covers ::evalRoleRule
    * @covers ::__construct
    */
@@ -175,9 +175,16 @@ public function testExternalLoginWithRoleMatch() {
 
     // Get a Mock User object to test the external login method.
     // Expect the role "student" to be added to the user entity.
+    // Expect the role "teacher" to be removed from user entity.
+    $this->entityAccount->expects($this->once())
+      ->method('getRoles')
+      ->will($this->returnValue(['teacher']));
     $this->entityAccount->expects($this->once())
       ->method('addRole')
       ->with($this->equalTo('student'));
+    $this->entityAccount->expects($this->once())
+      ->method('removeRole')
+      ->with($this->equalTo('teacher'));
     $this->entityAccount->expects($this->once())
       ->method('save');
 
@@ -204,7 +211,7 @@ public function testExternalLoginWithRoleMatch() {
       ->setConstructorArgs([
         $simplesaml,
         $config_factory,
-        $this->entityManager,
+        $this->entityTypeManager,
         $this->logger,
         $this->externalauth,
         $this->entityAccount,
@@ -231,12 +238,12 @@ public function testExternalRegister() {
       ->method('loadByProperties')
       ->will($this->returnValue([]));
 
-    $this->entityManager->expects($this->any())
+    $this->entityTypeManager->expects($this->any())
       ->method('getStorage')
       ->will($this->returnValue($entity_storage));
 
     // Create a Mock ExternalAuth object.
-    $externalauth = $this->createMock('\Drupal\externalauth\ExternalAuthInterface');
+    $externalauth = $this->createMock('Drupal\externalauth\ExternalAuthInterface');
 
     // Set up expectations for ExternalAuth service.
     $externalauth->expects($this->once())
@@ -254,7 +261,7 @@ public function testExternalRegister() {
       ->setConstructorArgs([
         $this->simplesaml,
         $this->configFactory,
-        $this->entityManager,
+        $this->entityTypeManager,
         $this->logger,
         $externalauth,
         $this->entityAccount,
@@ -295,7 +302,7 @@ public function testExternalRegisterWithAutoEnableSaml() {
       ->method('loadByProperties')
       ->will($this->returnValue([$this->entityAccount]));
 
-    $this->entityManager->expects($this->any())
+    $this->entityTypeManager->expects($this->any())
       ->method('getStorage')
       ->will($this->returnValue($entity_storage));
 
@@ -324,7 +331,7 @@ public function testExternalRegisterWithAutoEnableSaml() {
       ->setConstructorArgs([
         $this->simplesaml,
         $config_factory,
-        $this->entityManager,
+        $this->entityTypeManager,
         $this->logger,
         $externalauth,
         $this->entityAccount,
@@ -368,7 +375,7 @@ public function testSynchronizeUserAttributes() {
       ->method('loadByProperties')
       ->will($this->returnValue([]));
 
-    $this->entityManager->expects($this->any())
+    $this->entityTypeManager->expects($this->any())
       ->method('getStorage')
       ->will($this->returnValue($entity_storage));
 
@@ -385,7 +392,7 @@ public function testSynchronizeUserAttributes() {
     $simplesaml_drupalauth = new SimplesamlphpDrupalAuth(
       $simplesaml,
       $this->configFactory,
-      $this->entityManager,
+      $this->entityTypeManager,
       $this->logger,
       $this->externalauth,
       $this->entityAccount,
@@ -428,7 +435,7 @@ public function testRoleMatching($rolemap, $attributes, $expected_roles) {
     $simplesaml_drupalauth = new SimplesamlphpDrupalAuth(
       $simplesaml,
       $config_factory,
-      $this->entityManager,
+      $this->entityTypeManager,
       $this->logger,
       $this->externalauth,
       $this->entityAccount,
-- 
GitLab